The Resonate Server is a highly efficient single binary that pairs with a Resonate SDK to bring durable execution to your application — reliable, distributed function execution that survives process restarts and failures. It acts as both a supervisor and orchestrator for Resonate Workers, persisting execution state so long-running functions always run to completion.
- Evaluate Resonate for your next project
- Example application library
- The concepts that power Resonate
- Join the Discord
- Subscribe to the Blog
- Follow on X
- Follow on LinkedIn
- Subscribe on YouTube
brew install resonatehq/tap/resonatenpm install @resonatehq/sdkA countdown as a loop. Simple, but the function can run for minutes, hours, or days, despite restarts.
import { Resonate, type Context } from "@resonatehq/sdk";
function* countdown(context: Context, count: number, delay: number) {
for (let i = count; i > 0; i--) {
// Run a function, persist its result
yield* context.run((context: Context) => console.log(`Countdown: ${i}`));
// Sleep
yield* context.sleep(delay * 1000);
}
console.log("Done!");
}
// Instantiate Resonate
const resonate = new Resonate({ url: "http://localhost:8001" });
// Register the function
resonate.register(countdown);resonate servenpx ts-node countdown.tsActivate the function with execution ID countdown.1:
resonate invoke countdown.1 --func countdown --arg 5 --arg 60You will see the countdown in the terminal
npx ts-node countdown.ts
Countdown: 5
Countdown: 4
Countdown: 3
Countdown: 2
Countdown: 1
Done!For more Resonate Server deployment information see the Set up and run a Resonate Server guide.
You can download and install the Resonate Server using Homebrew with the following commands:
brew install resonatehq/tap/resonateThis previous example installs the latest release. You can see all available releases and associated release artifacts on the releases page.
Once installed, you can start the server with:
resonate serveYou will see log output like the following:
2026-04-02T05:05:32.480430Z INFO resonate: Resonate Server starting on port 8001
2026-04-02T05:05:32.480805Z INFO resonate: Using SQLite backend: resonate.db
2026-04-02T05:05:32.486547Z INFO resonate: SQLite initialized
2026-04-02T05:05:32.492689Z INFO resonate: Metrics server listening on 0.0.0.0:9090
2026-04-02T05:05:32.492915Z INFO resonate: Server listening on 0.0.0.0:8001The output indicates that the server has HTTP endpoints available at port 8001 and a metrics endpoint at port 9090.
These are the default ports and can be changed via configuration. The SDKs are all configured to use these defaults unless otherwise specified.
The Resonate Server repository contains a Dockerfile that you can use to build and run the server in a Docker container. You can also clone the repository and start the server using Docker Compose:
git clone https://github.com/resonatehq/resonate
cd resonate
docker-compose upIf you don't have Homebrew, we recommend building from source using Cargo. Run the following commands to download the repository and build the server:
git clone https://github.com/resonatehq/resonate
cd resonate
cargo build --release
After it is built, you can compile and run it as a Go program using the following command:
cargo run serve
Or, you can run it as an executable using the following command:
./target/release/resonate serve

