Restate is a system for easily building resilient applications using distributed durable async/await. This repository contains the Restate SDK for writing services in Node.js / Typescript.
Restate applications are composed of durably executed, stateful RPC handlers that can run either as part of long-running processes, or as FaaS (AWS Lambda).
import * as restate from "@restatedev/restate-sdk";
const greeter = restate.service({
name: "greeter",
handlers: {
greet: async (ctx: restate.Context, name: string) => {
return `Hello ${name}!`;
},
},
});
restate.endpoint()
.bind(greeter)
.listen(9080);
Prerequisites:
To use this SDK, add the dependency to your project:
npm install @restatedev/restate-sdk
For brand-new projects, we recommend using the Restate Node Template:
npx -y @restatedev/create-app@latest
This library follows Semantic Versioning.
The compatibility with Restate is described in the following table:
Restate Server\sdk-typescript | 1.0 - 1.3 | 1.4 | 1.5 - 1.6 | 1.7 |
---|---|---|---|---|
1.0 | β | β | β | β |
1.1 | β (1) | β | β | β |
1.2 | β | β | β | β |
1.3 | β | β | β | β (2) |
1.4 | β | β | β | β |
(1) Only when upgrading from 1.0 to 1.1 you MUST rediscover all the existing deployments using restate dp register <address> --force
. You don't need to update the SDK, nor change the code.
(2) Note the new options
in service/object/workflow constructors, together with some of the new options in the handler
s too, work only from Restate 1.4 onward. Check the in-code documentation for more details.
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!
Install the dependencies and transpile the TypeScript code:
npm install
npm run build
If everything goes well, the artifact would be created at dist/
.
Run the tests via
npm run test
Run the formatter and linter via
npm run format
npm run lint
Launch a sample program (requires no build)
npm run -w packages/restate-sdk-examples greeter
npm run -w packages/restate-sdk-examples object
npm run -w packages/restate-sdk-examples workflow
See https://github.com/restatedev/e2e/ for more details.
npx --package=json-schema-to-typescript json2ts endpoint_manifest_schema.json packages/restate-sdk/src/types/discovery.ts
Releasing a new npm package from this repo requires:
GITHUB_TOKEN
in order to create a Github releaserelease-it
The actual npm publish
is run by GitHub actions once a GitHub release is created.
X.Y.Z
vX.Y.Z
to the upstream repositoryCreating the GitHub release will trigger npm publish
via GitHub actions.
After having created a new SDK release, you need to: