{"id":26924083,"url":"https://github.com/resonatehq/resonate","last_synced_at":"2026-04-29T00:06:29.469Z","repository":{"id":187539880,"uuid":"676683893","full_name":"resonatehq/resonate","owner":"resonatehq","description":"a dead simple programming model for the cloud","archived":false,"fork":false,"pushed_at":"2024-05-22T20:27:14.000Z","size":1787,"stargazers_count":257,"open_issues_count":30,"forks_count":22,"subscribers_count":10,"default_branch":"main","last_synced_at":"2024-05-22T21:35:21.360Z","etag":null,"topics":["async-await","dead-simple","deterministic-simulation","distributed-systems","golang","promise","resonate"],"latest_commit_sha":null,"homepage":"https://www.resonatehq.io","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/resonatehq.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-08-09T19:07:14.000Z","updated_at":"2024-05-22T21:28:07.000Z","dependencies_parsed_at":null,"dependency_job_id":"498b79d1-6ab5-422e-a998-6e0a8762dcb7","html_url":"https://github.com/resonatehq/resonate","commit_stats":null,"previous_names":["resonatehq/resonate"],"tags_count":7,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/resonatehq%2Fresonate","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/resonatehq%2Fresonate/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/resonatehq%2Fresonate/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/resonatehq%2Fresonate/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/resonatehq","download_url":"https://codeload.github.com/resonatehq/resonate/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248054195,"owners_count":21039952,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["async-await","dead-simple","deterministic-simulation","distributed-systems","golang","promise","resonate"],"created_at":"2025-04-02T01:53:11.005Z","updated_at":"2026-04-29T00:06:29.464Z","avatar_url":"https://github.com/resonatehq.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"![resonate banner](./assets/resonate-banner.png)\n\n# Resonate Server\n\n## About this component\n\nThe 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.\n\n- [Evaluate Resonate for your next project](https://docs.resonatehq.io/evaluate/)\n- [Example application library](https://github.com/resonatehq-examples)\n- [The concepts that power Resonate](https://www.distributed-async-await.io/)\n- [Join the Discord](https://resonatehq.io/discord)\n- [Subscribe to the Blog](https://journal.resonatehq.io/subscribe)\n- [Follow on X](https://x.com/resonatehqio)\n- [Follow on LinkedIn](https://www.linkedin.com/company/resonatehqio)\n- [Subscribe on YouTube](https://www.youtube.com/@resonatehqio)\n\n## Resonate quickstart\n\n![resonate quickstart banner](./assets/quickstart-banner.png)\n\n### 1. Install the Resonate Server \u0026 CLI\n\n```shell\nbrew install resonatehq/tap/resonate\n```\n\n### 2. Install the Resonate SDK\n\n#### TypeScript\n\n```shell\nnpm install @resonatehq/sdk\n```\n\n### 3. Write your first Resonate Function\n\nA countdown as a loop. Simple, but the function can run for minutes, hours, or days, despite restarts.\n\n#### TypeScript (countdown.ts)\n\n```typescript\nimport { Resonate, type Context } from \"@resonatehq/sdk\";\n\nfunction* countdown(context: Context, count: number, delay: number) {\n  for (let i = count; i \u003e 0; i--) {\n    // Run a function, persist its result\n    yield* context.run((context: Context) =\u003e console.log(`Countdown: ${i}`));\n    // Sleep\n    yield* context.sleep(delay * 1000);\n  }\n  console.log(\"Done!\");\n}\n// Instantiate Resonate\nconst resonate = new Resonate({ url: \"http://localhost:8001\" });\n// Register the function\nresonate.register(countdown);\n```\n\n[Working example](https://github.com/resonatehq-examples/example-quickstart-ts)\n\n### 4. Start the server\n\n```shell\nresonate serve\n```\n\n### 5. Start the worker\n\n#### TypeScript\n\n```shell\nnpx ts-node countdown.ts\n```\n\n### 6. Activate the function\n\nActivate the function with execution ID `countdown.1`:\n\n```shell\nresonate invoke countdown.1 --func countdown --arg 5 --arg 60\n```\n\n### 7. Result\n\nYou will see the countdown in the terminal\n\n#### TypeScript\n\n```shell\nnpx ts-node countdown.ts\nCountdown: 5\nCountdown: 4\nCountdown: 3\nCountdown: 2\nCountdown: 1\nDone!\n```\n\n### What to try\n\n## More ways to install the server\n\nFor more Resonate Server deployment information see the [Set up and run a Resonate Server](https://docs.resonatehq.io/operate/run-server) guide.\n\n## Install with Homebrew\n\nYou can download and install the Resonate Server using Homebrew with the following commands:\n\n```shell\nbrew install resonatehq/tap/resonate\n```\n\nThis previous example installs the latest release.\nYou can see all available releases and associated release artifacts on the [releases page](https://github.com/resonatehq/resonate/releases).\n\nOnce installed, you can start the server with:\n\n```shell\nresonate serve\n```\n\nYou will see log output like the following:\n\n```shell\n2026-04-02T05:05:32.480430Z  INFO resonate: Resonate Server starting on port 8001\n2026-04-02T05:05:32.480805Z  INFO resonate: Using SQLite backend: resonate.db\n2026-04-02T05:05:32.486547Z  INFO resonate: SQLite initialized\n2026-04-02T05:05:32.492689Z  INFO resonate: Metrics server listening on 0.0.0.0:9090\n2026-04-02T05:05:32.492915Z  INFO resonate: Server listening on 0.0.0.0:8001\n```\n\nThe output indicates that the server has HTTP endpoints available at port 8001 and a metrics endpoint at port 9090.\n\nThese are the default ports and can be changed via configuration.\nThe SDKs are all configured to use these defaults unless otherwise specified.\n\n### Run with Docker\n\nThe Resonate Server repository contains a Dockerfile that you can use to build and run the server in a Docker container.\nYou can also clone the repository and start the server using Docker Compose:\n\n```shell\ngit clone https://github.com/resonatehq/resonate\ncd resonate\ndocker-compose up\n```\n\n### Build from source\n\nIf you don't have Homebrew, we recommend building from source using Cargo.\nRun the following commands to download the repository and build the server:\n\n```\ngit clone https://github.com/resonatehq/resonate\ncd resonate\ncargo build --release\n```\n\nAfter it is built, you can compile and run it as a Go program using the following command:\n\n```\ncargo run serve\n```\n\nOr, you can run it as an executable using the following command:\n\n```\n./target/release/resonate serve\n```\n\n## Outbound authentication for HTTP push\n\nWhen the Resonate Server delivers execute messages to protected Cloud Functions or Cloud Run services, it can attach an outbound authentication header. Configure this under `[transports.http_push.auth]`.\n\n### Google Cloud ID token (recommended for Cloud Run / Cloud Functions)\n\n```toml\n[transports.http_push.auth]\nmode = \"gcp\"\n# audience = \"https://my-function.example.com\"  # optional; defaults to the delivery URL\n```\n\nEquivalent environment variables:\n```\nRESONATE_TRANSPORTS__HTTP_PUSH__AUTH__MODE=gcp\nRESONATE_TRANSPORTS__HTTP_PUSH__AUTH__AUDIENCE=https://...   # optional\n```\n\nEquivalent CLI flags:\n```\nresonate serve --transports-http-push-auth-mode gcp\n```\n\nTokens are obtained via [Application Default Credentials](https://cloud.google.com/docs/authentication/application-default-credentials). On Cloud Run, this resolves to the service account identity automatically. Token acquisition and refresh are managed by the `google-cloud-auth` crate.\n\n### Static bearer token\n\n```toml\n[transports.http_push.auth]\nmode = \"bearer\"\ntoken = \"my-static-token\"\n```\n\n### No auth (default)\n\n```toml\n[transports.http_push.auth]\nmode = \"none\"\n```\n\n### Custom header name\n\nThe auth header defaults to `Authorization`. Override with:\n\n```toml\n[transports.http_push.auth]\nmode = \"gcp\"\nheader = \"X-Custom-Auth\"\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fresonatehq%2Fresonate","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fresonatehq%2Fresonate","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fresonatehq%2Fresonate/lists"}