Skip to content
All writing
PrinciplesJuly 1, 2026 · 4 min read · The team

Why the file is yours

No account required to start, a plain .json file you can pick, and a format you can read without us. Here is the reasoning, and the trade we made.

The app runs in your browser. Without an account, a draft stays on this device and, if you ask for it, is written into a file on your own disk. Sign in and the budget is also saved to your account so it can follow you to another device.

Why not a server

A budget is a few kilobytes of nested records with no query workload. Everything the app computes, it computes from those records in a millisecond. A server does not make the arithmetic better; it only earns its keep when the same budget has to open on a second device.

So the server only appears when it earns its keep: syncing the same budget to a second device is a thing a server is genuinely required for, and that is the only thing we sell.

Why JSON and not a database

SQLite in a browser costs about a megabyte of WebAssembly to buy indexes and joins that nothing here needs. Plain records cost nothing, diff cleanly in version control, and can be read in any text editor in ten years.

Anything read back in is coerced rather than trusted, so a hand-edited or older file loads with bad fields dropped instead of crashing. Editing your own budget in a text editor is a supported idea, not a hazard.

The trade

Clear this browser without signing in, and without a linked file, and the unsigned-in draft is gone; we cannot recover a budget we never received. Sign in and the copy on your account is the one that lasts. That is why the app still nudges you toward a file you hold.

Written by The team. Everything described here is how the app actually behaves — see it on the features page or in the app itself.

Try it on your own numbers

The argument only means something against a real income and a real set of bills. It takes about ten minutes to enter them.