Fully Open
Durable Execution

Use any database or queue for storage and message transport. Then just write Async Await.

An SDK in your app. One binary beside it. Dead simple.

Protocol · server · SDKs · tools — all Apache 2.0

same app, any stackopen protocol
your codenever changes

await ctx.run(chargeCard, order)

Async Await · any Resonate SDK

the serverApache 2.0
resonate on Postgresone binary
storage

Postgres

the database or queue you already run

transport

HTTP

the transport you already use

A new server for every stack — that’s Distributed Async Await working. Run something else? Bring your own provider.

Durable execution, now on NATS

The reliability tax

Failure handling is most of your code.

In a production system, the code that does the actual work is the small part. The rest keeps it alive when something goes wrong — retries, timeouts, idempotency keys, the state machines that remember where a job was when the process died.

By most counts that defensive scaffolding is more than two-thirds of what you ship — and almost none of it is the product. It doesn’t have to be yours to write.

your_program.tswhat you ship

// the product — the actual work

handleOrder()the thing your users came for

// keeping it alive when something goes wrong

retry()
timeout()
idempotencyKey()
stateMachine()
checkpoint()
resumeFrom()
~⅔of what you ship, by most counts — and almost none of it is the product.

Simple to use

You already know how to write this.

No separate workflow language, no orchestration layer to stand up. You write ordinary async functions, and that Async Await is the workflow — the shape of your code is the shape of the execution.

Most of what you’ll write rests on three verbs. A workflow that runs forever is just a while loop — no event-history limit to design around.

// the common surface
ctx.run(step)      // execute a step durably
ctx.rpc(fn)        // call another function
ctx.sleep('30d')   // wait — a second or a month

…and ctx.detached when you want to kick something off and not wait on it.

Simple to reason about

Everything comes down to one promise.

Underneath all of it is a single primitive: the durable promise. Every function call, every HTTP request, every message resolves to one — written down the moment it’s made and settled when it’s done.

When the machine running it crashes, nothing important is lost — the state that drives recovery was never in the process. A new process reads the last promise that was kept and continues from exactly there.

process running
the promise · sustainedthe process · crashes & restarts

Runs on your infrastructure

It runs on what you already run.

The core server runs as a single binary alongside the rest of your stack — one service to run, not a fleet to provision and babysit. Its state lives in your own Postgres, the database you already know how to run and back up — and on NATS, an implementation of the protocol runs natively on the broker itself.

When you want to know what a workflow is doing, you ask the CLI. resonate tree prints the whole call graph; resonate promises get inspects a single step. No dashboard to stand up, no proprietary console. And because the state underneath is just rows in your own Postgres, you can always read it directly — it’s yours.

your stack

▢ resonate — one binary

└─ state → your Postgres

$ resonate tree order/42

A promise is written once and updated when it completes, not on every step — so it stays cost-efficient by design.

A protocol, not a product

A protocol you adopt, not a vendor you depend on.

Durable execution is a protocol, and Resonate is an implementation of it — open source under Apache 2.0. Adopting it means adopting a standard, the way you’d adopt HTTP or SQL: something you build on and can always see inside of.

The specification is written down and open. You can run it, read it, fork it, or build your own.

distributed-async-await.io ↗

the open specification — programming, execution & system models

Open source, no feature gatesFork or build your ownA growing library of agent skills
Discord — people building right now