budgetzero is a free, open-source, privacy-friendly, offline-first budgeting system.

Use at budgetzero.io, download the desktop apps or self-host on your own server. Zero ads, zero trackers, just budgeting.

⚠️ budgetzero is under active development and considered an alpha version. You may encounter significant bugs and breaking changes. Feel free to file an issue! ⚠️


✔️ Zero-based ‘envelope’ budgeting
✔️ Offline-first storage. NOTE: All data is stored in the browser and may be lost if you clear the browser’s data.
✔️ Import Transactions (OFX, QFX, CSV)
✔️ Carry negative balances into next month
✔️ Privacy-focused. Zero trackers & zero analytics.

Getting Started

There’s multiple ways to use budgetzero.

  1. On the official app.budgetzero.io page.
  2. Installing the desktop app (Windows or Mac). Download here
  3. Self host the web app. You can either deploy the docker image or build and host the static files on your own webserver. See deployment section below for more details.

⚠️ Known Issues (being worked on)

  • UI Inconsistencies (pop-up boxes, colors, etc)
  • Performance not tested for extremely large budgets (thousands of transactions)
  • Transfer transactions work but may be a bit buggy
  • Find a bug? Please file an issue!


Current development board

  • Reports – started!
  • Cloud Sync through budgetzero.io (coming soon)
  • Self-hosted sync server (coming soon)
  • Cross-platform desktop applications (Windows, Mac, Linux)
  • Multi-month view
  • Payee management



docker pull budgetzero/budgetzero:latest

Then run with

docker run -d -p <desired_port>:8080 --name budgetzero budgetzero/budgetzero


docker run -d -p 8080:8080 --name budgetzero budgetzero/budgetzero

Your budgetzero instance is now running at <docker_IP>:<desired_port>

Manual Deployment

You can also build the static files and host on any webserver.

npm install
npm run build

The files will be built into the dist/ folder and can be hosted anywhere.

Sync Server Setup

Budgetzero uses PouchDB to store the all data client-side in the browser. In order to enable sync across multiple browsers and/or devices, you’ll need to set up a CouchDB server accessible from the desired devices. This setup guide is a general overview, feel free to adapt as needed.

Manual Setup Instructions for Advanced Users

  1. Install CouchDB on a server: Manually or with the official docker couchdb image.
    If you’re using docker, start CouchDB using the provided instructions.

    docker run -d --name budgetzero-couchdb-sync -e COUCHDB_USER=admin -e COUCHDB_PASSWORD=password couchdb:latest

    Replace admin and password with desired user/password.

  2. Navigate to http://[docker_host_IP]:5984/_utils, which opens the Fauxton web interface for CouchDB administration.

  3. Go to ‘Configuration’ and enable CORS for all domains.

  4. Create a database with whatever name you desire.

  5. In BudgetZero, go to Settings and set the couchdb URL to start syncing. This will need to be set up for each client/browser/computer/etc.
    http://username:[email protected]:5984/mybudget


Pull Requests

Good pull requests (patches, improvements, new features) are a greatly appreciated.

Please ask first before embarking on any significant pull request (e.g. implementing features, refactoring code), otherwise, you risk spending a lot of time working on something that might not get accepted or is already in development.

Dev Setup

npm install

To start a development web server:

npm run serve

Run tests

Run all tests once:

npm run test:unit

Run all tests and re-run if files change:

npm run test-watch:unit

Run with debugger (chrome://inspect)

node --inspect node_modules/.bin/jest --runInBand tests/unit/Transactions.spec.js    


View Github