Build an Offline-First App
Make a notes app that works with no network at all — local SQLite storage, a sync queue for pending writes, and clear online/offline UI feedback.
Prerequisites: completed Mobile Fundamentals (or an equivalent Expo Router project), comfort with async/await.
Version note: verified against current Expo documentation as of July 2026: expo-sqlite is the current first-party local database (SDK 57), with a synchronous API on top of the same engine plus useSQLiteContext / useSQLiteQuery hooks for React integration. @react-native-community/netinfo remains the standard for connectivity detection — it isn't an Expo SDK package, so install and config-plugin it separately. expo-sqlite's blob handling changed in SDK 56 to native ArrayBuffer; if you copy code from older tutorials that reference the old JavaScript ArrayBuffer path, treat it as outdated.
Mobile networks drop constantly: subways, elevators, flights, bad rural signal. An app that only works with a live connection feels broken the instant reception dips. "Offline-first" flips the default: every read comes from a local database that's always available, writes are saved locally first and queued for sync, and the network is treated as an enhancement layered on top rather than a requirement. This project builds a small notes app that fully works offline, then layers in background sync.
Set up a local SQLite database
Read and write against local data only, and detect connectivity
Queue and flush pending writes
Secret Mission: Simulate a sync conflict and resolve it
Before You Go
Test what you just learned
Self-testing is one of the best ways to retain new skills. Unlock project quizzes to check your understanding.
Log in to unlock0 / 6 complete
