DATE:
AUTHOR:
PowerSync Product Team
Rust SDK

Rust Client SDK Reaches Beta

DATE:
AUTHOR: PowerSync Product Team

The PowerSync Rust client SDK is now in beta with v0.1.0 of the powersync crate. Beta means that the SDK is production-ready for tested use cases. Its APIs are stable, and we communicate breaking changes clearly.

Since the alpha release in March 2026, we have seen steady adoption of the SDK, both directly in Rust apps and through our Tauri SDK. For the beta we focused on closer feature parity with our other SDKs, and closed the main gaps with checkpoint requests and disconnect_and_clear().

What's new

  • Checkpoint requests: Call request_checkpoint() from the client and wait until the local database has caught up with the server, for example before a critical job. Opt in with SyncOptions::with_checkpoint_mode(CheckpointMode::Requests(..)). (docs, announcement)

  • Disconnect and clear: Call disconnect_and_clear() to disconnect and delete the synced data, for example when a user signs out.

  • Generated setup code: The Connect drawer in the PowerSync Dashboard now generates Rust setup code, so you write less of it by hand. You can generate a client schema that matches your Sync Streams, and a backend connector with fetch_credentials() and a complete upload_data().

  • Fixes: This release also fixes a number of bugs. Two of the fixes came from community contributors. Thanks @julianallchin and @birdmanmandbir! See the full changelog here.

Upgrade from v0.0.x

v0.1.0 changes how you set up the async runtime. connect() now spawns the sync tasks, and disconnect() waits for them to finish. If you're on v0.0.x:

  1. In PowerSyncEnvironment::custom, replace tokio_timer() with tokio(), or async_io_timer() with async_io(executor). The executor is an Arc<async_executor::Executor<'static>>.

  2. Remove the db.async_tasks().spawn_with(...) or spawn_with_tokio() call that you made before connect().

Before (v0.0.x):

let env = PowerSyncEnvironment::custom(
    reqwest::Client::new(),
    pool,
    PowerSyncEnvironment::tokio_timer(),
);
let db = PowerSyncDatabase::new(env, schema::app_schema());
db.async_tasks().spawn_with_tokio();
db.connect(SyncOptions::new(connector)).await;

After (v0.1.0):

let env = PowerSyncEnvironment::custom(
    reqwest::Client::new(),
    pool,
    PowerSyncEnvironment::tokio(), // smol: PowerSyncEnvironment::async_io(executor)
);
let db = PowerSyncDatabase::new(env, schema::app_schema());
// connect() now spawns the sync tasks, so there is no spawn_with call.
db.connect(SyncOptions::new(connector)).await;

Get started

The Rust SDK reference covers setup, and the egui todo list example shows a complete working app that you can reference.

Thank you to everyone who tried the experimental and alpha releases. Please share your feedback on Discord, or open an issue on GitHub.

Powered by LaunchNotes