Quick Start
Lightweight SQLite WAL sync to S3 in Rust.
Why Walsync?
Section titled “Why Walsync?”Walsync is built for control, efficiency, and Rust-native integration.
Control
Section titled “Control”You own the code. No black box, no surprises. If you need a custom feature or fix, you can implement it. Walsync is designed to be hackable and transparent.
Memory Efficiency
Section titled “Memory Efficiency”Walsync’s Rust implementation has a smaller memory footprint:
Measured overhead:
- walsync: ~12 MB baseline
- Litestream: ~33 MB baseline
For resource-constrained environments (small VMs, containers, edge deployments), this difference matters.
Rust-Native
Section titled “Rust-Native”Walsync integrates naturally into Rust projects:
- Native async/await with tokio
- No CGO dependencies
- Smaller binary size (~8 MB)
- LTX format compatible with Litestream
Installation
Section titled “Installation”CLI (Rust)
Section titled “CLI (Rust)”cargo install walsyncPython
Section titled “Python”pip install walsyncVerify
Section titled “Verify”walsync --versionSet Up Credentials
Section titled “Set Up Credentials”Configure your S3 credentials. Example for Tigris (Fly.io):
export AWS_ACCESS_KEY_ID=tid_xxxxxexport AWS_SECRET_ACCESS_KEY=tsec_xxxxxexport AWS_ENDPOINT_URL_S3=https://fly.storage.tigris.devSee S3 Providers for AWS, R2, MinIO, and other providers.
Take a Snapshot
Section titled “Take a Snapshot”Back up your database to S3:
walsync snapshot myapp.db --bucket my-backupsOutput:
Snapshotting myapp.db to s3://my-backups/myapp.db/...✓ Snapshot complete (1.2 MB, 445ms) Checksum: a3f2b9c8d4e5f6a7...Watch for Changes
Section titled “Watch for Changes”Continuously sync WAL changes:
walsync watch myapp.db --bucket my-backupsThis watches for database changes and syncs them to S3. Run this as a background service in production.
Restore
Section titled “Restore”Restore a database from backup:
walsync restore myapp.db --bucket my-backups -o restored.dbOutput:
Restoring myapp.db from s3://my-backups/... Downloading snapshot... done (1.2 MB) Verifying checksum... ✓✓ Restored to restored.dbWatch Multiple Databases
Section titled “Watch Multiple Databases”Sync multiple databases with a single process:
walsync watch app.db users.db analytics.db --bucket my-backupsCreate a Read Replica
Section titled “Create a Read Replica”Run a local read replica that polls S3 for changes:
walsync replicate s3://my-backups/myapp.db --local replica.db --interval 5sOutput:
Replicating s3://my-backups/myapp.db -> replica.dbPoll interval: 5sPress Ctrl+C to stop
Bootstrapped from snapshot: 1024 pages, TXID 100[10:30:05] Applied 1 LTX file(s), now at TXID 101The replica auto-bootstraps from the latest snapshot if it doesn’t exist, then applies incremental updates.
Next Steps
Section titled “Next Steps”- Why Not Litestream? - Detailed comparison
- CLI Reference - Full command documentation (including
replicate) - Configuration - Environment variables and options
- Deployment - systemd, Docker, Kubernetes guides