Local-first sync engines
A PowerSync alternative when there is no backend database
Both are offline-first: the app reads and writes locally and the network is a background concern. Both let a user pick up on another device.
What PowerSync is
In its own terms.
A sync engine that keeps a SQLite database on the client in step with your Postgres, MongoDB or MySQL. Sync rules decide which rows each user receives, writes go back through your own backend, and the client SDKs cover web, React Native, Flutter, Swift and Kotlin. Available as a hosted cloud or self-hosted.
Side by side
Where they part ways.
| s3nd | PowerSync | |
|---|---|---|
| What it is | A CLI, a library and React hooks over your own S3 bucket | Postgres, MongoDB or MySQL to client-side SQLite sync engine |
| Where the data lives | Your bucket: S3, R2, MinIO, Scaleway, Wasabi | Your database, replicated to each client |
| Both ends online at once | No. The code is redeemed later, until it expires | No |
| From inside your web app | Yes, through one route on your server | Yes, web SDK |
| Accounts | None. The code is the whole handshake | Required, JWT |
| Hosting | Your bucket, plus your server when a browser takes part | Hosted cloud or self-hosted |
| Price | Free. You pay your storage provider for a few objects that expire | Free tier and paid plans; self-hosting is free |
| License | MIT | Client SDKs Apache-2.0; the service is source-available |
The differences
What actually changes.
A database on the server versus none
PowerSync replicates from a backend database that is the source of truth. s3nd assumes the browser is the source of truth and there may be no backend database at all; the bucket holds a snapshot, not a replica.
Partial, continuous replication versus a whole snapshot
PowerSync streams the rows a user is allowed to see, as they change. s3nd moves the whole local database once, or rewrites one backup object per user.
A service versus a bucket
PowerSync is a service to run or rent, with sync rules to write. s3nd is one route and a bucket, and a day’s work.
Users versus codes
PowerSync authenticates every client with a JWT. s3nd works without any identity: a code, an expiry, a rate limit.
The decision
Pick the one that fits.
Pick PowerSync when
- You have a Postgres and want it on the client, offline-first.
- Many users, row-level permissions, live updates.
- Native mobile SDKs are a requirement.
Pick s3nd when
- There is no backend database; the browser holds the data.
- A code, not a login.
- The whole feature should take an afternoon.
More comparisons
Tool by tool.
Put a file. Hand over the code.
Point it at the bucket you already pay for. Nothing to deploy, nothing to sign up for, nothing in the middle.
npm install -g @s3nd/clis3nd init --provider r2 --bucket drops3nd put ./anything.zip