About Project Budget

A browser-only envelope budgeting app — no accounts, no servers, no bank connections, no telemetry on your financial data. Built and maintained by one person, in public, under the MIT License.

Project Budget is the envelope budgeting workflow popularized by YNAB and Actual Budget, rebuilt as a single static web page that runs entirely in your browser. Your data lives in localStorage — nowhere else.

Open the app

The first visit drops you into a fully-populated sample household so you can see how every page works before committing to your own profile. Open the sample budget · Read the getting-started guide

Why Project Budget exists

Most modern budgeting apps require a cloud account, link to your bank, and route your transactions through a third-party aggregator. That model trades convenience for surveillance: a startup with access to every dollar you spend, hoping to monetize that data, can be acquired, breached, or simply shut down.

Project Budget is the opposite trade. It does not ask for an email address. There is no server. There is no bank link. The app's source is on GitHub under the MIT License — you can self-host it, fork it, or audit it.

The trade-off you make in return is real: you maintain your own backups. There is no cloud sync between devices. Importing transactions means downloading a CSV / OFX / QFX / QIF file from your bank and uploading it. If you wipe your browser data without exporting first, your budget is gone. That trade buys you control of your financial data — and on the budgeting workflow itself, this app does roughly what every full-featured envelope budgeting app does.

Hard commitments

  • No backend. No server processes any of your data. The hosted version at https://projectbudget.org is a static page on Cloudflare Pages — when the page loads, all subsequent work is local to your browser.
  • No telemetry on financial data. The optional analytics (Umami, if enabled) records page views only. It never sees transactions, accounts, balances, payees, categories, or any other budgeting content.
  • No bank-connection integrations. Plaid, SimpleFIN, MX, and similar services require a server and a paid relationship with the aggregator. Project Budget instead supports the file formats banks already provide.
  • No paid tiers, no license keys, no paywalled features. The MIT-licensed source is the entire app. There is no Pro version.
  • No tracking pixels or third-party scripts on financial pages. Fonts ship from Bunny Fonts (GDPR-compliant, no logging). Nothing else loads from a third party while you use the app.

Who built it

Jon Ajinga, the maintainer of Project Budget

Jon Ajinga

Maintainer · Project Budget

I built Project Budget because every other tool I tried either required a cloud account I didn't want, missed an envelope-budgeting workflow I'd come to rely on, or got acquired and shut down. I read every issue + every contact-form submission personally. The roadmap is short on purpose — see the project commitments above for what gets accepted and what doesn't.

How it differs from the alternatives

AspectProject BudgetYNABActual Budget
Where your data livesThis browser's localStorageYNAB's cloudYour machine + optional self-hosted sync server
Account requiredNoYes (email + password)Not for local-only use
PriceFree, open sourceSubscriptionFree, open source
Bank linkingManual CSV / OFX / QFX / QIF importPlaid, othersSimpleFIN, others
Multi-device syncNot built-in — export / import JSONCloud syncSelf-hosted sync server
Source codeMIT, publicClosedMIT, public

Project Budget is closest in spirit to Actual Budget run in local-only mode. The two main differences: Project Budget never asks for any optional server (the surface area for a sync feature simply isn't there), and it ships as a single static page so you can drop it on any static host or open it from a USB drive.

How it's built

  • Eleventy v3 (ESM, Nunjucks templates) — static site generator. The build produces ~190 HTML pages plus a single concatenated CSS file.
  • Alpine.js — reactive UI in the app shell. No virtual DOM, no client-side router, no build-time framework.
  • Chart.js + D3 — lazy-loaded only on the reports pages.
  • Tippy.js + Popper — tooltips on the budgeting controls so every numeric input has a one-line explainer.
  • Pagefind — the static-site search index. Builds at deploy time; queries run in the browser.
  • Bunny Fonts — privacy-respecting font CDN for the four typefaces (Playfair Display, Lora, Source Serif 4, DM Sans).
  • SortableJS — drag-and-drop for category groups, accounts, and budget rows.
  • Cloudflare Pages — static host. The build runs on every push to main.

Total runtime payload is small: the CSS bundle is ~200 KB, Alpine + the in-app JS modules are well under 100 KB. Chart libraries (~486 KB combined) load only on report pages. Most pages load and render before the network finishes idling.

Versioning & release cadence

Project Budget ships continuously. There is no fixed release cycle — features and fixes go out as they're ready. Watch the GitHub commit history for the canonical record of what's changed. Conventional commit prefixes (feat:, fix:, chore:) make the log scannable.

Breaking changes to the export-data schema (rare) get called out in the commit message. The export schema is documented at /docs/profiles-backups/export-schema/.

Contributing

See the open-source page for the contribution policy. The short version: bug fixes, accessibility improvements, new CSV / OFX / QFX / QIF format detectors, new reports, and documentation improvements are all welcome. Anything that requires a backend, sends data off-device, or adds a paid tier is out of scope.

Acknowledgements

  • YNAB — for popularizing the envelope-budgeting workflow this app implements (Rule One, Ready to Assign, Category Goals).
  • Actual Budget — for proving that an open-source local-first budgeting app can ship a great experience without a SaaS backend.
  • Pikes Peak Web Designs — for the site build pattern (CSS partials, Eleventy config, accessibility checklist) reused here.
  • The open-source vendors — Alpine, Chart.js, D3, Tippy, Pagefind, SortableJS, Dexie, PapaParse, Fuse, Luxon. Every one is MIT, BSD, or Apache licensed.

Reach out

Questions, bug reports, feature requests, partnership inquiries — all welcome through the contact form or by emailing hello@projectbudget.org directly. Bug reports and accessibility issues get priority.

Loading…