Home

Awesome

Documentation Examples Discord Twitter

Restate Typescript SDK

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);

Community

Using the SDK

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

Versions

This library follows Semantic Versioning.

The compatibility with Restate is described in the following table:

Restate Server\sdk-typescript1.0/1.1/1.2/1.31.4
1.0βœ…βŒ
1.1βœ… <sup>(1)</sup>βœ…

<sup>(1)</sup> 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.

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!

Building the SDK

Prerequisites

Install the dependencies and transpile the TypeScript code:

npm install
npm run build

If everything goes well, the artifact would be created at dist/.

Testing Changes

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 example

Testing end-to-end with Restate Server

See https://github.com/restatedev/e2e/ for more details.

Releasing the package

Releasing via release-it

Releasing a new npm package from this repo requires:

release-it

The actual npm publish is run by GitHub actions once a GitHub release is created.

Releasing manually

  1. Bump the version field in package.json to X.Y.Z
  2. Create and push a tag of the form vX.Y.Z to the upstream repository
  3. 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:

  1. Update and release the tour of Restate
  2. Update the Typescript SDK and Tour version in the documentation and release it
  3. Update and release the Node template generator
  4. Update the examples