What we gave up by not shipping a web app

Native and local-first are choices with a bill attached. Here is what is actually on it.

1 min read

A native desktop app window beside a browser tab, with a receipt between them

It is easy to write a marketing page about local-first software and never mention that the approach costs something. It does. Every NabuSuite app is a native desktop application with Rust underneath, and that decision has consequences we live with daily.

The bill

  • Platform work does not generalise. NabuVoice ships on macOS; its Windows build is still in progress. On the web that sentence would not exist.
  • Shipping is slower. There is no deploy button — there are signed builds, per-platform installers, and update mechanics for three operating systems.
  • We cannot see inside the apps. There is no telemetry in a local-first app, so bug reports are what you tell us, and nothing else.
  • Every model is a download. Speech and correction models are hundreds of megabytes that arrive on your disk instead of running on someone else's.

What we got

In exchange: dictation with no per-minute meter, because your machine did the inference. Agent sessions that survive the app closing, because a daemon on your machine owns them. Work that stays yours when a subscription lapses, because it was never in our custody. Apps that keep working on a plane.

The performance argument matters too, and it is a stated product value rather than an accident. Unused features are meant to consume zero resources — live terminal renderers are pooled and capped, and a pane that is not visible does not get to cost you anything.

The honest summary

Local-first is not free, not obviously correct, and not the right answer for every product. For a dictation tool that hears everything you say, and for a workspace that runs agents against your source code, it is the answer we are willing to pay for.

The test is simple: if our servers went away tomorrow, would your software still work? It should. That is the whole idea.
← All posts