Most productivity apps today are cloud-first by default. Notes sync to Notion's servers. Habit trackers phone home. Grammar tools process your text on remote infrastructure.

There is an alternative architectural approach: local-first. Data stays on the device. There is no backend. The application works without network access.

This is not a new concept — it is how desktop software worked before the web. What is interesting in 2026 is building local-first applications as browser extensions, where the expectations are that everything talks to a server.

Why local-first for browser extensions

Browser extensions have access to browser.storage.local — a persistent key-value store that:

  • Survives browser restarts
  • Is isolated per extension (no sharing between extensions)
  • Has no network dependency
  • Is not accessible to web pages (security isolation)

For extensions that handle personal data (task lists, voice notes, habit grids, grammar-checked text), keeping data in browser.storage.local means:

  1. No account required: there is no server to authenticate against
  2. No breach surface: the data exists only on the user's device
  3. Works offline: the extension functions without internet access
  4. Fast: local reads are synchronous; no API latency

The trade-offs

What you lose with local-first:

  • Cross-device sync (data exists on one device only)
  • Backup to cloud
  • Sharing with other users
  • Server-side search across large datasets

For productivity tools — task lists, habit trackers, calculators — most users do not need any of these. They use the tool on one device. The simplification is worth more than the lost features.

When cloud is the right choice:

  • Shared workspaces (multiple users, same data)
  • Cross-device workflows that require real-time sync
  • Large datasets that exceed device storage
  • Collaborative tools where other people need access

The 11 extensions I built

All 11 of my Firefox extensions are local-first:

  • Daily Planner: today's tasks stored locally
  • Habit Tracker: monthly grid in browser.storage.local
  • Voice Notes: audio saved to Downloads folder, never uploaded
  • AI Writing Assistant: grammar processing in-browser, no API calls
  • Quick Calculator: offline math and unit conversion
  • Tab Manager: sessions stored locally (no sync across devices)
  • Stock Market Dashboard: public market data fetched live, watchlist stored locally
  • Weather Clock: weather API for current conditions, preferences stored locally
  • News Widget: RSS feeds fetched live, subscriptions stored locally
  • Speed Dial: shortcuts stored locally
  • NightOwl: schedule and preferences stored locally

The two that do make network calls (Stock Market, Weather Clock) are for public data only — they have no user account to authenticate against, and the user's watchlist/location preference is local.

The developer argument for building local-first extensions

Building a local-first extension is simpler than building a cloud-connected one:

  • No server to build and maintain
  • No authentication system
  • No database
  • No API to design and version
  • No billing

For a solo developer building side projects, this is a significant reduction in complexity. The extension can be shipped and maintained indefinitely without ongoing infrastructure costs.

All 11 extensions are free, no-account, local-first. See the full series.