AppVion Studio logo AppVion Studio Insights

Engineering for the field

Offline-first mobile app development: how it actually works.

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

Offline-first and offline-friendly are not the same thing.

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.

Offline-friendly vs offline-first mobile apps
BehaviourOffline-friendlyOffline-first
Reading data with no signalYes, what was already downloadedYes
Recording new work with no signalNo, it waits or failsYes, synced later
Where the truth livesOn the serverOn the phone first, then the server
Good forNews, announcements, cataloguesDeliveries, inspections, attendance, field jobs
Our exampleWUM Connect announcementsD. Delivery rider app, Attendance Management

How it is built

Five parts every offline-first app needs.

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.

2. An outbox for every change

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.

3. A background sync worker

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.

4. Conflict rules the server enforces

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.

5. Sync status the user can see

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.

Plus: media that waits its turn

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

Three ways to settle a conflicting edit.

There is no universal answer. The right rule depends on what the record is and what a wrong value costs.

Last write wins

The most recent change replaces the older one. Simple and fine for personal settings or notes. Wrong for anything two people depend on.

The server decides

The phone proposes, the server checks the rules and accepts or rejects. Right for order status, payments and anything a business is paid on.

Append-only

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 is not a toggle, so plan it from day one.

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.

Data-heavy utility

Attendance Management

Mark now, sync later: offline capture, background sync and an append-only audit log across four roles.

Read the case study
Logistics platform

D. Delivery

An encrypted local outbox for every job step, with video proof uploads queued on weak signal.

Read the case study
Field service

PropFix

Work orders with a sync status the contractor can see, from one shared Kotlin core.

Read the case study

FAQ

Questions people ask first.

What is an offline-first app?

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.

What is the difference between offline-first and offline-friendly?

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.

How does an offline app handle two people editing the same record?

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.

Does offline-first cost more?

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.

Can an existing app be made offline-first?

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

Building something that has to work without a network?

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.

WhatsApp Start Project