Skip to main content
2026-02-20
Rust SDK v0.9.0

✨ 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:
- use rand::Rng;
+ use rand::RngExt;
Additionally, the low-level trait RngCore (providing next_u32(), next_u64(), fill_bytes()) was renamed to Rng:
- use rand::RngCore;
+ use rand::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:
DependencyOldNew
restate-sdk-shared-core0.6.00.9.0
aws_lambda_events0.16.11.0
lambda_runtime0.14.21.0
typify0.1.00.6
jsonptr0.5.10.7
regress0.10.30.10
bytes1.101.11
http1.31.4
hyper1.61.8
tokio1.441.49
uuid1.16.01.20
schemars1.0.01.2
reqwest (dev)0.120.13
testcontainers0.23.30.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 edition field does not need to change, but your installed Rust toolchain must be >= 1.90.0
Migration Guidance:Update your Rust toolchain:
rustup update stable
Verify your version:
rustc --version  # 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:
#[restate_sdk::object]
pub trait MyObject {
    #[lazy_state]
    async fn my_handler(name: String) -> Result<String, HandlerError>;
}
Related Issues:
📄 Full release notesView on GitHub
2026-02-12
Rust SDK v0.8.0

✨ 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()
  • 🔓 ProtocolMode and HandleOptions are 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 edition field does not need to change, but your installed Rust toolchain must be >= 1.85.0
Migration Guidance:Update your Rust toolchain:
rustup update stable
Verify your version:
rustc --version  # Must be >= 1.85.0
Related Issues:

🚀 New Features

🆔 Invocation ID available in handler context

All handler context types now expose an invocation_id() method that returns the current Restate invocation ID as a &str.This is useful for logging, debugging, and correlating requests across services.Example:
impl Greeter for GreeterImpl {
    async fn greet(&self, ctx: Context<'_>, name: String) -> HandlerResult<String> {
        let id = ctx.invocation_id();
        tracing::info!("Handling invocation {id} for {name}");
        Ok(format!("Greetings {name}"))
    }
}
Available on all context types: Context, ObjectContext, SharedObjectContext, WorkflowContext, and SharedWorkflowContext.Related Issues:

🔓 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:
📄 Full release notes

👋 New Contributors

View on GitHub
2025-09-16
Rust SDK v0.7.0

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

New Contributors

View on GitHub
2025-07-02
Rust SDK v0.6.0
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

View on GitHub
2025-04-29
Rust SDK v0.5.0

What’s Changed

Schema generation

By enabling the optional dependency schemars, 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 GitHub
2025-04-09
Rust SDK v0.4.0
We’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:Rust SDK 0.4.0 can be used in combination with Restate 1.3 onward.

Full changelog

New Contributors

View on GitHub
2024-12-05
Rust SDK v0.3.2

What’s Changed

New Contributors

View on GitHub
2024-09-10
Rust SDK v0.3.0

Breaking changes

  • The ctx.run API now does not require name as first parameter anymore
  • Renamed Endpoint.with_service to Endpoint.bind
  • This SDK is compatible only with Restate >= 1.1

New features

What’s Changed

View on GitHub
2024-08-22
Rust SDK v0.2.0

New features

  • Generated clients from the respective service/object/workflow macros. To use them, just use context.service_client::&lt;MyTraitClient&gt;() et al.
  • You can now use the hyper integration alone, without using our HttpServer that depends on tokio, by enabling the feature hyper and disabling the feature http_server
  • Now the context methods are defined in traits
  • Add ctx.rand() and ctx.rand_uuid() for deterministic random number/uuid generation
  • Add ctx.headers() and ctx.headers_mut() to access the ingress headers
  • Add identity verification

Breaking changes

  • Renamed HyperServer to HttpServer
  • Removed context send, send_delay and call, replaced with ctx.request(..).send() and ctx.request(..).call() (in future this Request struct will allow to configure some parameters of the request, such as headers)
View on GitHub