Local-First And Data Boundaries

Local-first is often the simplest v1 data boundary. It keeps product scope small until users prove they need shared state.

Pick The Boundary

BoundaryUse whenUpgrade path
Local filesUsers own documents, markdown, CSV, JSON, mediaAdd index/cache, then sync/export
SQLiteStructured local state, search, audit events, sessionsAdd backup/export, then sync when needed
IndexedDB/cacheBrowser/PWA local state and offline behaviorAdd server sync only for multi-device needs
Device platform storageMobile app settings, encrypted secrets, biometricsAdd export and backup before cloud sync
Backend databaseShared state, auth, roles, payments, jobsAdd local caches only where offline matters

Local-First Questions

  1. Can the user export everything?
  2. Can the app recover from a corrupt local database?
  3. Does backup depend on the OS, the app, or the user?
  4. Is encryption needed at rest?
  5. Is sync truly v1, or can it be manual import/export?
  6. What happens when two devices edit the same data?

When A Server Becomes Unavoidable

  • Multiple users need the same canonical data.
  • Permissions or roles cannot be trusted to clients.
  • Payments, webhooks, or external integrations need secret custody.
  • Background jobs must run when the user’s device is off.
  • Audit logs must be tamper-resistant.