Prerequisites
Getting started
Get started quickly with the TypeScript Quickstart.
@restatedev/restate-sdk dependency to your project to start developing Restate services.
Basic Services
Basic Services group related handlers and expose them as callable endpoints:- Define a service using
restate.service. - The service has a name and a list of handlers.
- Each handler has a name and can be called at
<RESTATE_INGRESS>/myService/myHandler - Handlers take the
Contextas the first argument. - Handlers can take one optional JSON-serializable input and must return a JSON-serializable output (see custom serialization for advanced types).
- Serve the service over HTTP (port
9080by default).
Virtual Objects
Virtual Objects are services that are stateful and key-addressable — each object instance has a unique ID and persistent state.- Define a Virtual Object using
restate.object(...) - Each instance is identified by a key (accessible via
ctx.key). - Virtual Objects can have exclusive and shared handlers.
- Exclusive handlers receive an
ObjectContext, allowing read/write access to object state. - Shared handlers are wrapped in
handlers.object.shared(...)and use theObjectSharedContext - Serve the Virtual Object over HTTP (port
9080by default).
Workflows
Workflows are long-lived processes with a defined lifecycle. They run once per key and are ideal for orchestrating multi-step operations, which require external interaction via signals and queries.- Define a workflow with
restate.workflow(...) - Every workflow must include a
runhandler:- This is the main orchestration entry point
- It runs exactly once per workflow execution and uses the
WorkflowContext - Resubmission of the same workflow will fail with “Previously accepted”. The invocation ID can be found in the request header
x-restate-id. - Use
ctx.keyto access the workflow’s unique ID
- Additional handlers must use the
WorkflowSharedContextand can signal or query the workflow. They can run concurrently with therunhandler and until the retention time expires. - Serve the Workflow over HTTP (port
9080by default).