Not “offline-friendly.” Offline-first.
The device is the primary source of truth — the network is an optimization, not a requirement.
The device is the primary source
Every operation writes to the local SQLite database first. The UI never waits on the network.
A durable mutation queue
Writes are enqueued and reconcile in the background, bidirectionally, with no data loss on flaky links.
Works fully without a network
The app doesn’t freeze offline; it keeps working and syncs the moment it reconnects.
Server-authoritative ordering
A global order plus write checkpoints guarantee convergence — it never trusts the device clock.
One order — from the field to approved, without waiting for the network
Follow a real order: created offline, synced, approved by the supervisor and back to the rep. All automatic.
Out on the road, on a phone or laptop, they log the customer's order — with an 18% discount.
One engine. Your language.
The same Rust core, exposed through idiomatic SDKs via FFI, JNI, N-API and WASM.
A stable common API, with thin idiomatic SDKs over the same Rust core.
Syncs with the database you already have
Change capture via log-based CDC (e.g. Postgres logical replication), with a trigger/outbox fallback selected by capability-probe.
From local write to durable convergence
A data plane on the hot path, a control plane for metadata, and an incremental transport that only moves what changed.
Device writes locally
The app writes to local SQLite and enqueues the mutation — instantly, with or without a network.
Change capture
Native CDC (log-based) when the database supports it, with a trigger + outbox fallback otherwise.
Rust core
A data plane (crossfly-sync-service) on the hot path plus a control plane that handles only metadata, off the hot path.
Incremental transport
Protobuf/gRPC over TLS 1.3 for deltas, columnar bulk/snapshot (Apache Arrow/Parquet, zstd). Attachments ride a separate plane — referenced by content_hash with pluggable storage (S3/MinIO/Azure Blob + CDN).
Where CrossFly Sync goes further
How it compares, honestly
| CrossFly Sync | PowerSync / ElectricSQL | Realm / Couchbase / RxDB | |
|---|---|---|---|
| Multi-database CDC | ✓ | — | — |
| Dynamic schema-per-tenant | ✓ | — | — |
| Per-tenant crypto isolation | ✓ | — | — |
| Real offline-first with a durable queue | ✓ | ✓ | ◑ |
✓ supported · ◑ partial / varies by product · — not offered. Comparison reflects our reading of typical capabilities and may change as those products evolve.
Open-core, priced per active device
The parts you build on are open; the server is source-available and converts to a permissive license over time.
SDKs, protocol & specs
Apache-2.0 — the SDKs, wire protocol and specs you build against are permissively licensed.
Source-available server
FSL-1.1 — converts to a permissive license after 2 years. Not AGPL, not SSPL.
Billed per active device
You pay per active synced device — aligned with real usage, not seats or cores.