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);
- 🤗️ Join our online community for help, sharing feedback and talking to the community.
- 📖 Check out our documentation to get quickly started!
- 📣 Follow us on Twitter for staying up to date.
- 🙋 Create a GitHub issue for requesting a new feature or reporting a problem.
- 🏠 Visit our GitHub org for exploring other repositories.
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.1/1.2/1.3 | 1.4 |
---|---|---|
1.0 | ✅ | ❌ |
1.1 | ✅ (1) | ✅ |
(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.
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!
- NodeJS (and npm) installed
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.
Releasing a new npm package from this repo requires:
- SSH access configured for Github in order to push commits and tags to GitHub
- A GitHub personal access token with access to https://github.com/restatedev/sdk-typescript in your environment as
GITHUB_TOKEN
in order to create a Github release
release-it
The actual npm publish
is run by GitHub actions once a GitHub release is created.
- Bump the version field in package.json to
X.Y.Z
- Create and push a tag of the form
vX.Y.Z
to the upstream repository - Create a new GitHub release
Creating the GitHub release will trigger npm publish
via GitHub actions.
After having created a new SDK release, you need to: