1. A local database as the source of truth
Screens read from the database on the phone, never straight from the network. We use SQLDelight in Kotlin Multiplatform and Room on Android, encrypted with SQLCipher when the data is sensitive.
Engineering for the field
An offline-first app treats the database on the phone as the place work is recorded, and the server as the place it is shared. Every action is saved on the device first and synced when a connection exists, so a rider in a basement or a teacher in a thick-walled lecture hall never waits on a spinner. This is how we build it, from apps we have shipped.
The short answer
Most apps that claim to work offline only keep old data readable. Offline-first means new work can be recorded with no signal at all. Android's own offline-first guide puts it the same way: the app performs all, or a critical part, of its core work without the internet.
| Behaviour | Offline-friendly | Offline-first |
|---|---|---|
| Reading data with no signal | Yes, what was already downloaded | Yes |
| Recording new work with no signal | No, it waits or fails | Yes, synced later |
| Where the truth lives | On the server | On the phone first, then the server |
| Good for | News, announcements, catalogues | Deliveries, inspections, attendance, field jobs |
| Our example | WUM Connect announcements | D. Delivery rider app, Attendance Management |
How it is built
Screens read from the database on the phone, never straight from the network. We use SQLDelight in Kotlin Multiplatform and Room on Android, encrypted with SQLCipher when the data is sensitive.
Each action is written as a queued change on the device. In D. Delivery every step of a job goes through a local outbox in an encrypted on-device database.
A worker drains the outbox when the connection returns, even if the app is closed. In Attendance Management a WorkManager job does this, so a register is never lost.
Decide what happens when two people change the same record, and let the server have the final word on money and status. A modified phone cannot skip a step the server forbids.
PropFix tells a worker the difference between "nothing to do" and "we have not heard from the server lately", a distinction most apps quietly collapse.
Photos and videos are compressed on the phone before upload and queued in the background, so a weak signal never stops someone finishing a job.
Conflicts
There is no universal answer. The right rule depends on what the record is and what a wrong value costs.
The most recent change replaces the older one. Simple and fine for personal settings or notes. Wrong for anything two people depend on.
The phone proposes, the server checks the rules and accepts or rejects. Right for order status, payments and anything a business is paid on.
Records are never edited in place; each change is added as a new entry. Our attendance platform keeps an append-only audit log, so a disputed record has a history.
Cost and platform
Offline behaviour is one of the seven things that move an app's price on our pricing page. It is far cheaper to design in from the start than to bolt onto an app that assumed a connection. The sync rules are logic, so with Kotlin Multiplatform they are written once and behave the same on Android and iOS.
Mark now, sync later: offline capture, background sync and an append-only audit log across four roles.
An encrypted local outbox for every job step, with video proof uploads queued on weak signal.
Work orders with a sync status the contractor can see, from one shared Kotlin core.
FAQ
An offline-first app records every action in a database on the phone first and syncs it with the server when a connection exists. Reading and writing both work with no signal, so the user never waits for the network and never loses work because of it.
An offline-friendly app keeps what it has already downloaded readable without signal, but needs a connection to record anything new. An offline-first app also records new work offline and syncs it later. Field and operational apps usually need the second.
With a rule decided at design time. Common choices are last write wins for personal data, server decides for anything involving money or status, and append-only records where nothing is edited in place. The server should enforce the rules that matter, because a phone can be modified.
Yes. It needs a local database, a sync queue, conflict rules and a lot more testing, so it is one of the seven things that move an app's price. It costs far less to design in from the start than to add to an app built online-only.
Usually, if its data layer is separate from its screens. Writes are routed through a local outbox and a sync worker is added. How much has to change first is what a Clarity Sprint establishes.
Start the conversation
Attendance, inspections, deliveries, stock counts: if work happens away from a desk, twenty minutes is enough to map what has to work offline and what can wait.