Skip to content

Quick Start

Lightweight SQLite WAL sync to S3 in Rust.

Walrust is a SQLite replication tool optimized to use less memory than Litestream:

DatabaseswalrustLitestreamReduction
119 MB36 MB47%
1019 MB55 MB65%
10020 MB160 MB88%

Walrust’s memory remains ~19-20 MB regardless of database count.

  • Written in Rust with async/await (tokio)
  • No CGO dependencies
  • ~8 MB binary size

See Why Walrust? for detailed comparisons and use cases.


Terminal window
cargo install walrust
Terminal window
pip install walrust
Terminal window
walrust --version

Configure your S3 credentials. Example for Tigris (Fly.io):

Terminal window
export AWS_ACCESS_KEY_ID=tid_xxxxx
export AWS_SECRET_ACCESS_KEY=tsec_xxxxx
export AWS_ENDPOINT_URL_S3=https://fly.storage.tigris.dev

See S3 Providers for AWS, R2, MinIO, and other providers.

Back up your database to S3:

Terminal window
walrust snapshot myapp.db --bucket my-backups

Output:

Snapshotting myapp.db to s3://my-backups/myapp.db/...
✓ Snapshot complete (1.2 MB, 445ms)
Checksum: a3f2b9c8d4e5f6a7...

Continuously sync WAL changes:

Terminal window
walrust watch myapp.db --bucket my-backups

This watches for database changes and syncs them to S3. Run this as a background service in production.

Restore a database from backup:

Terminal window
walrust restore myapp.db --bucket my-backups -o restored.db

Output:

Restoring myapp.db from s3://my-backups/...
Downloading snapshot... done (1.2 MB)
Verifying checksum... ✓
✓ Restored to restored.db

Sync multiple databases with a single process:

Terminal window
walrust watch app.db users.db analytics.db --bucket my-backups

Run a local read replica that polls S3 for changes:

Terminal window
walrust replicate s3://my-backups/myapp.db --local replica.db --interval 5s

Output:

Replicating s3://my-backups/myapp.db -> replica.db
Poll interval: 5s
Press Ctrl+C to stop
Bootstrapped from snapshot: 1024 pages, TXID 100
[10:30:05] Applied 1 LTX file(s), now at TXID 101

The replica auto-bootstraps from the latest snapshot if it doesn’t exist, then applies incremental updates.