Analysis updated 2026-05-18
Add offline-first sync with a durable outbox to an Android, iOS, or desktop app backed by your own API.
Choose a per-entity conflict resolution strategy such as last-write-wins, merge, or defer-to-user.
Connect to REST, GraphQL, Supabase, or Firebase as the sync transport without rewriting the sync stack.
Test sync behavior locally using the included mock server and sample app with a debug sync-health overlay.
| arsenoal/syncforge | androidpoet/mirage | azxcvn/mpvrx-cn | |
|---|---|---|---|
| Stars | 37 | 37 | 36 |
| Language | Kotlin | Kotlin | Kotlin |
| Setup difficulty | moderate | easy | easy |
| Complexity | 4/5 | 2/5 | 1/5 |
| Audience | developer | developer | general |
Figures from each repo's GitHub metadata at analysis time.
Requires your own backend implementing the REST push/pull contract, or a supported transport like Supabase or Firebase.
SyncForge is an offline-first sync engine for Kotlin Multiplatform apps, built for developers who already own their own database and their own backend API rather than wanting a fully managed backend service. It sits on top of a developer's existing entity store, such as Room or SQLDelight, and adds a durable outbox, a push and pull sync loop, and configurable conflict handling for each type of data. Local writes always go to the developer's own store first, and changes are queued so that syncing can happen whenever the network becomes available, with offline edits and app restarts treated as normal cases rather than exceptions. The README is explicit about who it fits: teams building offline-first mobile or multiplatform apps against their own API, who want an outbox that survives the app being killed, per-data-type conflict strategies, and Android as the primary platform with iOS, JVM desktop, and macOS following the same model. It is explicitly not a fit for teams wanting a fully managed backend that owns their schema and authentication, automatic handling of breaking changes to their data structure, or full real-time collaborative document editing. Conflict handling supports several strategies including last-write-wins, always preferring local or remote changes, custom merge logic, git-style conflict resolution, CRDT-based field merging, and deferring the decision to the user. The library ships stable support for REST, GraphQL, Supabase, and Firebase as transport options, along with a built-in authentication helper for apps whose API matches an expected shape. A sample app and mock server are included so developers can see syncing, forced conflicts, and local data clearing in action. Android and the JVM desktop and iOS platforms are described as stable, while debugging tools, tracing, and browser support are marked experimental. The wire format for the REST push and pull endpoints is frozen for the 2.x release line, and the library is distributed through Maven Central.
SyncForge is an offline-first sync engine for Kotlin Multiplatform that adds a durable outbox, push/pull sync, and configurable per-entity conflict resolution on top of your own database and backend.
Mainly Kotlin. The stack also includes Kotlin, Kotlin Multiplatform, SQLDelight.
Setup difficulty is rated moderate, with roughly 1h+ to a first successful run.
Mainly developer.
This repo across BitVibe Labs
Verify against the repo before relying on details.