✨ Highlights
- 🔧 MSRV raised to 1.90.0 — a downstream dependency silently raised its MSRV, which would cause build failures for users relying on our previously announced MSRV
- 🏷️
#[lazy_state]handler attribute — opt into lazy state loading on a per-handler basis
⚠️ Breaking Changes
Dependency bumps with user-facing API changes
Several dependencies have been bumped. Most are transparent, but the following affect user code:rand 0.9 → 0.10
The rand() method on context types returns &mut rand::prelude::StdRng. In rand 0.10, the trait that provides convenience methods like .random() and .random_range() was renamed from Rng to RngExt. If you import this trait, update your code:RngCore (providing next_u32(), next_u64(), fill_bytes()) was renamed to Rng:StdRng no longer implements Clone. If you were cloning the RNG returned by ctx.rand(), this is no longer possible.Other dependency bumps (no user-facing changes)
The following dependencies were also bumped but require no changes to user code:| Dependency | Old | New |
|---|---|---|
restate-sdk-shared-core | 0.6.0 | 0.9.0 |
aws_lambda_events | 0.16.1 | 1.0 |
lambda_runtime | 0.14.2 | 1.0 |
typify | 0.1.0 | 0.6 |
jsonptr | 0.5.1 | 0.7 |
regress | 0.10.3 | 0.10 |
bytes | 1.10 | 1.11 |
http | 1.3 | 1.4 |
hyper | 1.6 | 1.8 |
tokio | 1.44 | 1.49 |
uuid | 1.16.0 | 1.20 |
schemars | 1.0.0 | 1.2 |
reqwest (dev) | 0.12 | 0.13 |
testcontainers | 0.23.3 | 0.27 |
MSRV raised to 1.90.0
The minimum supported Rust version (MSRV) has been raised from 1.85.0 to 1.90.0.This bump was necessary because a downstream dependency raised its own MSRV without announcing it. Without this change, users relying on our previously announced MSRV of 1.85.0 would encounter build failures. Any user building with a toolchain between 1.85.0 and 1.87.x is affected. Rather than pinning to an older version of the dependency, we chose to follow the ecosystem forward.Impact on Users:- Projects using a Rust toolchain older than 1.90.0 will fail to compile against this version of the SDK
- Your own crate’s
editionfield does not need to change, but your installed Rust toolchain must be >= 1.90.0
🆕 New Features
#[lazy_state] handler attribute
You can now annotate individual handlers with #[lazy_state] to enable lazy state loading for that handler. When enabled, state is fetched on demand rather than eagerly loaded when the handler is invoked.Example:- PR #90
📄 Full release notesView on GitHub
✨ Highlights
- 🔧 MSRV raised to 1.85.0 with Rust edition 2024 — ensure your toolchain is up to date
- 🆔 Invocation ID now accessible from all handler context types via
invocation_id() - 🔓
ProtocolModeandHandleOptionsare now public — enabling custom server integrations beyond the built-in HTTP server and Lambda endpoint
⚠️ Breaking Changes
Rust edition 2024 and MSRV 1.85.0
The SDK now uses Rust edition 2024 and requires a minimum supported Rust version (MSRV) of 1.85.0 (previously 1.76.0).Impact on Users:- Projects using an older Rust toolchain will fail to compile against this version of the SDK
- Your own crate’s
editionfield does not need to change, but your installed Rust toolchain must be >= 1.85.0
- PR #82
🚀 New Features
🆔 Invocation ID available in handler context
All handler context types now expose aninvocation_id() method that returns the current Restate invocation ID as a &str.This is useful for logging, debugging, and correlating requests across services.Example:Context, ObjectContext, SharedObjectContext, WorkflowContext, and SharedWorkflowContext.Related Issues:- PR #83
🔓 Public ProtocolMode, HandleOptions, and handle_with_options
ProtocolMode, HandleOptions, and the Endpoint::handle_with_options() method are now part of the public API (exported via the prelude).This enables building custom server integrations beyond the built-in HttpServer and LambdaEndpoint. For example, you can now implement your own HTTP framework adapter or request-response transport by calling handle_with_options directly with the desired ProtocolMode.Related Issues:- PR #86
📄 Full release notes
👋 New Contributors
- @sagikazarmark made their first contribution in https://github.com/restatedev/sdk-rust/pull/80
AWS Lambda support
You can now use the Rust SDK with AWS Lambda, check out https://github.com/restatedev/sdk-rust?tab=readme-ov-file#running-on-lambda for more details on how to set it up.Invocation retry policy
When used with Restate 1.5, you can now configure the invocation retry policy from the SDK directly. See https://github.com/restatedev/restate/releases/tag/v1.5.0 for more details on the new invocation retry policy configuration.What’s Changed
- Refactor Endpoint internals. by @slinkydeveloper in https://github.com/restatedev/sdk-rust/pull/71
- Add lambda runtime support by @muhamadazmy in https://github.com/restatedev/sdk-rust/pull/70
- Add new retry policy options by @slinkydeveloper in https://github.com/restatedev/sdk-rust/pull/73
- Clarify max attempts meaning by @slinkydeveloper in https://github.com/restatedev/sdk-rust/pull/74
New Contributors
- @muhamadazmy made their first contribution in https://github.com/restatedev/sdk-rust/pull/70
Introduce new feature
bind_with_options, allowing to customize service and handler configuration options. Please note, this feature works only with Restate 1.4 onward.What’s Changed
- Discovery protocol v3 by @slinkydeveloper in https://github.com/restatedev/sdk-rust/pull/62
- Update shared core by @slinkydeveloper in https://github.com/restatedev/sdk-rust/pull/63
- Update shared core by @slinkydeveloper in https://github.com/restatedev/sdk-rust/pull/66
What’s Changed
Schema generation
By enabling the optional dependencyschemars, the SDK will generate and propagate JSON schemas of your handlers input/output, which will be available in the generated OpenAPI and in the Restate Playground. For more details on the schema generation, and info on how to tune it, check the https://docs.rs/restate-sdk/latest/restate_sdk/serde/trait.PayloadMetadata.html documentation.Thanks to @hxphsts for the contribution!New restate-sdk-testcontainers module
We’ve released a first version of the testcontainers integration, that simplifies testing locally your restate service. Check https://github.com/restatedev/sdk-rust/blob/main/testcontainers/tests/test_container.rs for a full example.Thanks to @kpwebb for the contribution.View on GitHubWe’re pleased to announce the release of Rust SDK 0.4.0, in combination with Restate 1.3.
Check out the announcement blog post for more details about Restate 1.3 and the new SDK features: https://restate.dev/blog/announcing-restate-1.3/This SDK introduces the following new APIs:
- Support the new features of Restate 1.3, check
InvocationHandlefor more details - You can now use the new macro
select!(aliketokio::select) to await concurrently for multiple operations to complete. Request::send_with_delaywas renamed toRequest::send_after- The SDK now provides a utility to use in combination with
tracingthat hides logs on replay. Check https://docs.rs/restate-sdk/latest/restate_sdk/filter/struct.ReplayAwareFilter.html for more details.
Full changelog
- Add note on retry policies for ctx.run by @gvdongen in https://github.com/restatedev/sdk-rust/pull/39
- Improve workflow docs by @gvdongen in https://github.com/restatedev/sdk-rust/pull/40
- Use test suite 2.4 by @jackkleeman in https://github.com/restatedev/sdk-rust/pull/37
- rust testcontainer framework by @kpwebb in https://github.com/restatedev/sdk-rust/pull/41
- Pin sha2 version by @slinkydeveloper in https://github.com/restatedev/sdk-rust/pull/45
- Service Protocol V4 by @slinkydeveloper in https://github.com/restatedev/sdk-rust/pull/46
- Fix cancel test by @slinkydeveloper in https://github.com/restatedev/sdk-rust/pull/47
- Replay aware logger by @slinkydeveloper in https://github.com/restatedev/sdk-rust/pull/48
- Update test suite by @slinkydeveloper in https://github.com/restatedev/sdk-rust/pull/49
- Protocol V5 by @slinkydeveloper in https://github.com/restatedev/sdk-rust/pull/50
- First pass at a select statement by @slinkydeveloper in https://github.com/restatedev/sdk-rust/pull/51
- Add CLA automation by @tillrohrmann in https://github.com/restatedev/sdk-rust/pull/52
- Fix little bug with run cancellation by @slinkydeveloper in https://github.com/restatedev/sdk-rust/pull/54
- Dependency bumping by @slinkydeveloper in https://github.com/restatedev/sdk-rust/pull/55
- Bump SDK versions by @slinkydeveloper in https://github.com/restatedev/sdk-rust/pull/57
New Contributors
- @jackkleeman made their first contribution in https://github.com/restatedev/sdk-rust/pull/37
- @kpwebb made their first contribution in https://github.com/restatedev/sdk-rust/pull/41
- @tillrohrmann made their first contribution in https://github.com/restatedev/sdk-rust/pull/52
What’s Changed
- Add MSRV computed with
cargo msrvby @slinkydeveloper in https://github.com/restatedev/sdk-rust/pull/26 - Example with periodic task by @slinkydeveloper in https://github.com/restatedev/sdk-rust/pull/28
- Make endpoint handle function independent of other handlers by @h7kanna in https://github.com/restatedev/sdk-rust/pull/29
- No need for the run future to be
Syncby @slinkydeveloper in https://github.com/restatedev/sdk-rust/pull/32 - Documentation for Rust SDK by @gvdongen in https://github.com/restatedev/sdk-rust/pull/34
- Fix docs landing page by @gvdongen in https://github.com/restatedev/sdk-rust/pull/36
New Contributors
- @h7kanna made their first contribution in https://github.com/restatedev/sdk-rust/pull/29
- @gvdongen made their first contribution in https://github.com/restatedev/sdk-rust/pull/34
Breaking changes
- The
ctx.runAPI now does not requirenameas first parameter anymore - Renamed
Endpoint.with_servicetoEndpoint.bind - This SDK is compatible only with Restate >= 1.1
New features
- It is now possible to configure a retry policy for
ctx.run - Now std
Resultcan be returned from handlers, and similarly any error type can be used. Behind the hood, the error type will always be converted toHandlerError, following the rules described here: https://docs.rs/restate-sdk/latest/restate_sdk/errors/struct.HandlerError.html
What’s Changed
- Rust docs by @slinkydeveloper in https://github.com/restatedev/sdk-rust/pull/17
- Fix bad indendation in docs by @slinkydeveloper in https://github.com/restatedev/sdk-rust/pull/18
- Add x_restate_server header by @slinkydeveloper in https://github.com/restatedev/sdk-rust/pull/21
- Side effect retry by @slinkydeveloper in https://github.com/restatedev/sdk-rust/pull/20
- Now a standalone Result can be returned from handlers by @slinkydeveloper in https://github.com/restatedev/sdk-rust/pull/22
- Naming improvements by @slinkydeveloper in https://github.com/restatedev/sdk-rust/pull/23
- Docs improvements by @slinkydeveloper in https://github.com/restatedev/sdk-rust/pull/24
- Add rust toolchain file by @slinkydeveloper in https://github.com/restatedev/sdk-rust/pull/25
New features
- Generated clients from the respective service/object/workflow macros. To use them, just use
context.service_client::<MyTraitClient>()et al. - You can now use the hyper integration alone, without using our
HttpServerthat depends ontokio, by enabling the featurehyperand disabling the featurehttp_server - Now the context methods are defined in traits
- Add
ctx.rand()andctx.rand_uuid()for deterministic random number/uuid generation - Add
ctx.headers()andctx.headers_mut()to access the ingress headers - Add identity verification
Breaking changes
- Renamed
HyperServertoHttpServer - Removed context
send,send_delayandcall, replaced withctx.request(..).send()andctx.request(..).call()(in future thisRequeststruct will allow to configure some parameters of the request, such as headers)