The Offline Problem
Users expect apps to work in tunnels. You need a local DB that syncs when online. The hard part is conflict resolution (two devices edit same main doc).
SQLite (The Standard)
Rock solid. SQL based. Great for complex queries. Sync is manual (you build the API calls). Libraries: Room (Android), GRDB (iOS).
Realm (The Object Store)
No SQL. Object graph. Very fast. MongoDB Realm Sync offers out-of-the-box syncing with the backend. Expensive but easy.
WatermelonDB (The Lazy One)
Built for React Native. Built on SQLite but lazy-loads everything. Extremely detailed performance optimization for 10,000+ records.
Sync Strategies
Time-based (Last-Write-Wins)? Version vectors? Operational Transformation (OT) is too hard for most. CRDTs are trending.
Conflict Resolution
Server-side wins is safest. Client-side merge gives better UX but is complex. Realm handles this automatically.
Encryption
Always encrypt the local DB. SQLCipher for SQLite. Realm has built-in encryption. If the phone is stolen, data must be unreadable.