Skip to content

Actors that remember. Clusters that heal.

A functional language for the JVM where persistence, actors and self-healing clusters are part of the language, not libraries bolted on.
type Msg = | Deposit Int | Balance (Reply Int)
actor Account (id: String) receives Msg
state balance = 0
on Deposit n = become { balance = balance + n }
on Balance r = send r balance
fn main () =
let account = Account "acc-1"
send account (Deposit 50)
let balance = ask account Balance
print "balance: {balance}"
balance: 50

Run it twice: the balance is 50, then 100. The actor’s state is kept, every message is committed once, and a crash in the middle loses nothing.

Durable by default

Each message commits the actor’s new state, its outgoing messages and its journal together, or not at all.

Effects in the types

What a function does, from printing to calling a model, is part of its type, and handled where you choose.

Test the failures

A deterministic simulator explores crashes, delays and orderings; replay checks any actor’s history.

From one node to many

The same program runs on SQLite, on a cluster over rqlite or PostgreSQL, and upgrades while it runs.