< 1 ms
Local write
SQLite-first — never waits for the network
1.2 s
Reconnect catch-up
10k queued mutations, over the delta
−92%
Bytes on the wire
columnar + zstd vs raw rows
50k/s
Ingest throughput
mutations per data-plane node
*Illustrative preliminary internal benchmarks on representative workloads. Final, audited numbers ship with the commercial release.
Why it's this fast
It syncs the change, not the database
A naive sync ships whole rows and reconciles everything server-side. CrossFly Sync writes locally first, then moves a compact, columnar delta over gRPC.
CrossFly Sync
deltaDevice writes local
SQLite + durable mutation queue
Incremental delta
gRPC/TLS, columnar (Arrow), zstd
Rust data plane
Hot path only — metadata stays aside
Your database
Log-based CDC, no full copy
Naive / full-table sync
full payloadApp waits on network
The UI blocks until the round-trip
Full-row payload
Whole records, uncompressed
Server reconciles all
Re-scans instead of applying a delta
Database
Duplicated sync state server-side
vs the market
How it compares, honestly
| PowerSync / ElectricSQL | Realm / Couchbase / RxDB | ||
|---|---|---|---|
| Incremental delta transport | ✓ | ◑ | ◑ |
| Durable offline queue | ✓ | ✓ | ◑ |
| Multi-database CDC | ✓ | — | — |
| Columnar bulk hydration | ✓ | — | — |
| Attachments with no row ceiling | ✓ | ~15 MB | varies |
✓ offered · ◑ partial / varies by product · — not offered. The comparison reflects our reading of typical capabilities and may change as those products evolve.
In practice
Real-world sync scenarios
| Task | Typical approach | |
|---|---|---|
| Local write while offline | < 1 ms | waits on the network |
| First hydration (10k rows) | 0.8 s (columnar) | 3–6 s (row by row) |
| Reconnect after 1h offline | 1.2 s (delta) | full re-sync |
| Edit one record and sync | 1 delta, ~1 KB | whole row |
| 50 MB attachment | resumable, chunked | ~15 MB/row ceiling |