Deployment guide

How to Self-Host Actual Budget on a VPS: Your Private YNAB Alternative

Deploy on a VPS Cloud →

Self-hosting6 min read

How to Self-Host Actual Budget on a VPS: Your Private YNAB Alternative

YNAB proved that zero-based (envelope) budgeting works, but its $99/year subscription and cloud-only model aren't for everyone. Actual Budget (MIT, ~26 k GitHub stars) brings the same methodology — assign every dollar a job before you spend it — to a self-hosted Node.js server that runs on a single Docker container. Your data stays in an SQLite file on your own VPS; every device syncs through end-to-end encryption. Here is how to deploy it in minutes.

Why self-host your budget instead of using YNAB

The envelope budgeting method is straightforward: allocate every incoming dollar to a named category (rent, food, savings, emergency fund) before spending it. When a category runs out, you either stop spending or consciously move money from another envelope. YNAB popularised this approach in a polished app — but it costs $99/year, stores your financial data on its servers, and can't be audited. Actual Budget replicates the method (including the coveted 'roll with the punches' flexibility) with full source code on GitHub under the MIT licence. Self-hosting it on a VPS means your transactions, balances and budget history never leave your infrastructure — and the annual cost is whatever a small VPS costs.

Deploy Actual Budget with Docker in two minutes

Actual ships as a single Docker image — no database server, no message broker, no configuration files. One container, one volume, one port. On your Ubuntu 22.04 VPS, run: docker run -d --restart=always -p 5006:5006 -v actual-budget:/data --name actual-budget actualbudget/actual-server. The server is ready in under two seconds on port 5006. Open http://<your-vps-ip>:5006 in a browser, click 'Create new budget', and you are budgeting. The entire SQLite database is stored in the actual-budget Docker volume — back it up with a single docker run --rm -v actual-budget:/data alpine tar -czf - /data.

What you get out of the box

  • Zero-based envelope budgeting — assign every dollar to a category before spending; Actual flags overspending in real time.
  • Multi-device sync — phone, tablet and desktop all share the same live budget via the encrypted server.
  • End-to-end encryption — the server only stores ciphertext; your transactions are readable only on your devices.
  • Bank sync via GoCardless (Europe) and SimpleFIN (North America), or import OFX/QFX/CSV files manually.
  • Reporting: net-worth chart, cash-flow, spending by category, and fully custom reports.
  • YNAB 4 and nYNAB import — migrate your full history in about five minutes.

Add HTTPS so you can sync from anywhere

To access your budget from outside the VPS — on mobile or from another country — you need HTTPS. The simplest path is Caddy. Install it on the same VPS and add a one-line Caddyfile: budget.yourdomain.com { reverse_proxy localhost:5006 }. Caddy handles the Let's Encrypt certificate automatically. Once the domain resolves, open https://budget.yourdomain.com on your phone, tap the browser's 'Add to Home Screen' button, and Actual becomes a full PWA icon on your home screen. All sync traffic between your devices and the server goes through this TLS channel.

Setup in six steps

01

Create a VPS (1 GB RAM, Ubuntu 22.04)

Actual idles under 80 MB RAM. Even the smallest VPS plan gives you plenty of headroom.

02

Deploy the container

docker run -d --restart=always -p 5006:5006 -v actual-budget:/data --name actual-budget actualbudget/actual-server

03

Create your budget

Open port 5006 in a browser, click 'Create new budget', add your bank accounts with opening balances.

04

Set up envelope categories

Create categories (Housing, Food, Transport, Savings…) and allocate your expected monthly income across them.

05

Secure with HTTPS

Install Caddy, add budget.yourdomain.com { reverse_proxy localhost:5006 } to your Caddyfile, and reload.

06

Install on mobile

Open the HTTPS URL on your phone and use 'Add to Home Screen' — Actual Budget becomes a PWA icon.

How to back up your budget

All data lives in the actual-budget Docker volume. A daily cron backup is one command: docker run --rm -v actual-budget:/data -v /backups:/out alpine tar czf /out/actual-budget-$(date +%Y%m%d).tar.gz /data. Restore by reversing the tar into a fresh volume before starting the container. Actual also has a built-in export: from the budget screen, go to Settings → Export → Download backup. This creates a portable ZIP of your entire budget that you can import on any other Actual instance.

Deploy Actual Budget on your VPS

Private, zero-based budgeting with no subscription — your financial data stays on your own server, synced across every device.

Need help?

Browse our help center and FAQ, or write to our team — support in French, English and Arabic.