From b3c9916416b826905f166ec5badcec3ea94c8cc4 Mon Sep 17 00:00:00 2001 From: Cully Wakelin Date: Mon, 12 Jan 2026 13:33:12 -0700 Subject: [PATCH 1/3] adding quickstart instructions to the README --- README.md | 159 ++++++++++++++++++++++++++++++++--- assets/quickstart-banner.png | Bin 0 -> 32083 bytes assets/resonate-banner.png | Bin 0 -> 70701 bytes 3 files changed, 147 insertions(+), 12 deletions(-) create mode 100644 assets/quickstart-banner.png create mode 100644 assets/resonate-banner.png diff --git a/README.md b/README.md index 2b7ee0ed..53306e0f 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -![resonate component banner](/assets/resonate-component.png) +![resonate banner](/assets/resonate-banner.png) # Resonate Server @@ -18,27 +18,162 @@ To provide those abstractions at the application level (i.e. to enable API-like The Resonate Server is a highly efficient single binary that pairs with a Resonate SDK to provide those APIs. -### [How to contribute to this repo](./CONTRIBUTING.md) +- [How to contribute to this repo](./CONTRIBUTING.md) +- [Evaluate Resonate for your next project](https://docs.resonatehq.io/evaluate/) +- [Example application library](https://github.com/resonatehq-examples) +- [The concepts that power Resonate](https://www.distributed-async-await.io/) +- [Join the Discord](https://resonatehq.io/discord) +- [Subscribe to the Blog](https://journal.resonatehq.io/subscribe) +- [Follow on Twitter](https://twitter.com/resonatehqio) +- [Follow on LinkedIn](https://www.linkedin.com/company/resonatehqio) +- [Subscribe on YouTube](https://www.youtube.com/@resonatehqio) -### [Get started with Resonate](https://docs.resonatehq.io/get-started/) +## Resonate quickstart -### [Evaluate Resonate for your next project](https://docs.resonatehq.io/evaluate/) +![resonate quickstart banner](./assets/quickstart-banner.png) -### [Example application library](https://github.com/resonatehq-examples) +### 1. Install the Resonate Server & CLI -### [The concepts that power Resonate](https://www.distributed-async-await.io/) +```shell +brew install resonatehq/tap/resonate +``` + +### 2. Install the Resonate SDK -### [Join the Discord](https://resonatehq.io/discord) +#### TypeScript -### [Subscribe to the Blog](https://journal.resonatehq.io/subscribe) +```shell +npm install @resonatehq/sdk +``` -### [Follow on Twitter](https://twitter.com/resonatehqio) +#### Python + +```shell +pip install resonate-sdk +``` + +### 3. Write your first Resonate Function + +A countdown as a loop. Simple, but the function can run for minutes, hours, or days, despite restarts. + +#### TypeScript (countdown.ts) + +```typescript +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); +``` + +[Working example](https://github.com/resonatehq-examples/example-quickstart-ts) + +#### Python (countdown.py) + +```python +from resonate import Resonate, Context +from threading import Event + +def countdown(ctx: Context, count: int, delay: int): + for i in range(count, 0, -1): + # Run a function, persist its result + yield ctx.run(ntfy, i) + # Sleep + yield ctx.sleep(delay) + print("Done!") + + +def ntfy(_: Context, i: int): + print(f"Countdown: {i}") + + +# Instantiate Resonate +resonate = Resonate.remote() +# Register the function +resonate.register(countdown) +resonate.start() # Start Resonate threads +Event().wait() # Keep the main thread alive +``` + +[Working example](https://github.com/resonatehq-examples/example-quickstart-py) + +### 4. Start the server + +```shell +resonate dev +``` -### [Follow on LinkedIn](https://www.linkedin.com/company/resonatehqio) +### 5. Start the worker + +#### TypeScript + +```shell +npx ts-node countdown.ts +``` + +#### Python + +```shell +python countdown.py +``` + +### 6. Activate the function + +Activate the function with execution ID `countdown.1`: + +```shell +resonate invoke countdown.1 --func countdown --arg 5 --arg 60 +``` + +### 7. Result + +You will see the countdown in the terminal + +#### TypeScript + +```shell +npx ts-node countdown.ts +Countdown: 5 +Countdown: 4 +Countdown: 3 +Countdown: 2 +Countdown: 1 +Done! +``` + +#### Python + +```shell +python countdown.py +Countdown: 5 +Countdown: 4 +Countdown: 3 +Countdown: 2 +Countdown: 1 +Done! +``` + +### What to try + +After starting the function, inspect the current state of the execution using the `resonate tree` command. The tree command visualizes the call graph of the function execution as a graph of durable promises. + +```shell +resonate tree countdown.1 +``` -### [Subscribe on YouTube](https://www.youtube.com/@resonatehqio) +Now try killing the worker mid-countdown and restarting. **The countdown picks up right where it left off without missing a beat.** -## Server quick start instructions +## More ways to install the server For more Resonate Server deployment information see the [Set up and run a Resonate Server](https://docs.resonatehq.io/operate/run-server) guide. diff --git a/assets/quickstart-banner.png b/assets/quickstart-banner.png new file mode 100644 index 0000000000000000000000000000000000000000..59ca941d17b2475ce885527198d00f76e7d02be0 GIT binary patch literal 32083 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 o@UI8{^}xR#`2VX18gDIThizzj9`V*?MgRZ+ literal 0 HcmV?d00001 diff --git a/assets/resonate-banner.png b/assets/resonate-banner.png new file mode 100644 index 0000000000000000000000000000000000000000..783a58076d110b86dc592eab0f0bbf89cff3de0e GIT binary patch literal 70701 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 Date: Mon, 19 Jan 2026 14:12:22 -0700 Subject: [PATCH 2/3] Update README.md --- README.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 53306e0f..69a10efe 100644 --- a/README.md +++ b/README.md @@ -84,6 +84,8 @@ resonate.register(countdown); from resonate import Resonate, Context from threading import Event +# Register the function +@resonate.register def countdown(ctx: Context, count: int, delay: int): for i in range(count, 0, -1): # Run a function, persist its result @@ -99,11 +101,8 @@ def ntfy(_: Context, i: int): # Instantiate Resonate resonate = Resonate.remote() -# Register the function -resonate.register(countdown) resonate.start() # Start Resonate threads Event().wait() # Keep the main thread alive -``` [Working example](https://github.com/resonatehq-examples/example-quickstart-py) From 37e399e9f5cf73fee3828a679b19a9db9d40e6c1 Mon Sep 17 00:00:00 2001 From: Cully Date: Mon, 19 Jan 2026 14:13:43 -0700 Subject: [PATCH 3/3] Update README.md --- README.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/README.md b/README.md index 69a10efe..b6428beb 100644 --- a/README.md +++ b/README.md @@ -103,9 +103,6 @@ def ntfy(_: Context, i: int): resonate = Resonate.remote() resonate.start() # Start Resonate threads Event().wait() # Keep the main thread alive - -[Working example](https://github.com/resonatehq-examples/example-quickstart-py) - ### 4. Start the server ```shell