/restate

Restate is the platform for building resilient applications that tolerate all infrastructure faults w/o the need for a PhD.

Primary LanguageRustOtherNOASSERTION

Documentation Examples Discord Twitter

Restate - Building resilient applications made easy!

Restate overview

Easily build workflows, event-driven applications, and distributed services in a fault-tolerant manner with durable async/await.

Restate is great at building:

Get started with Restate

  1. 🏎 Check out our quickstart to get up and running with Restate in 2 minutes!
  2. πŸ’‘ The tour of Restate walks you through all features of Restate.

SDKs

Restate supports the following SDKs:

Install

We offer pre-built binaries of the CLI and the server for MacOS and Linux.

Install the server

Install via Homebrew:

brew install restatedev/tap/restate-server

Run via npx:

npx @restatedev/restate-server

Run via docker:

docker run --rm -it --network=host docker.io/restatedev/restate:latest

Install the CLI

Install via Homebrew:

brew install restatedev/tap/restate

Install via npm:

npm install --global @restatedev/restate

Run via npx:

npx @restatedev/restate

You can also download the binaries from the release page or our download page.

Community

Core primitives

The basic primitives Restate offers to simplify application development are the following:

  • Reliable Execution: user code will always run to completion. Intermediate failures result in re-tries that use the durable execution mechanism to recover partial progress and not duplicate already executed steps.
  • Suspending User Code: long-running user code suspends when awaiting on a promise and resume when that promise is resolved.
  • Reliable Communication: user code communicates with exactly-once semantics. Restate reliably delivers messages and anchors both sender and receiver in the durable execution to ensure no losses or duplicates can happen.
  • Durable Timers: user code can sleep (and suspend) or schedule calls for later.
  • Isolation: user code can be keyed, which makes Restate scheduled them to obey single-writer-per-key semantics.
  • Consistent State: keyed user code can attach key/value state, which is eagerly pushed into handlers during invocation, and written back upon completion. This is particularly efficient for FaaS deployments (stateful serverless, yay!).
  • Observability & Introspection: Restate automatically generates Open Telemetry traces for the interactions between handlers and gives you a SQL shell to query the distributed state of the application.

Contributing

We’re excited if you join the Restate community and start contributing! Whether it is feature requests, bug reports, ideas & feedback or PRs, we appreciate any and all contributions. We know that your time is precious and, therefore, deeply value any effort to contribute!

Check out our development guidelines and tips for local development to get started.

Versions

Restate follows Semantic Versioning.

You can safely upgrade from a Restate x.y to x.(y+1) release without performing any manual data migration, as Restate performs an automatic data migration for you.

For SDK compatibility, refer to the supported version matrix in the respective READMEs:

Building Restate locally

In order to build Restate locally follow the build instructions.