Skip to content

Self-host Actual Budget

updated Jul 2026prices checked · Jul 2026Install verified on Ubuntu 26.04 · Sep 2026 · how we test
We earn commissions when you shop through the links below. Full disclosure →

A fast, local-first envelope-budgeting app with optional self-hosted sync. Most people are up and budgeting in minutes — privacy without the spreadsheet.

Key facts

CategoryPersonal finance
LicenseMIT
StackJavaScript, Node.js
Min RAM512 MB
Official imageyes
Measured idle RAM241 MB
Difficulty
Our recommendation

Pick Actual when you want envelope budgeting that works offline and syncs when it can: the app is local-first, the MIT-licensed sync server is one container with a single volume, and releases arrive roughly monthly as `YY.M.0` (26.9.0 as of September 2026). Nothing leaves your box unless you enable it — bank sync, for instance, is manual and uses provider keys you supply. It is the friendliest personal-finance install in the catalog; the trade-off is that by default it is a one-password server, and the docs still expect you to bring HTTPS.

Follow the Actual Budget deploy guide →

What you need

  • Any VPS with at least 512 MB of RAM
  • A domain you control — most self-hosted setups need HTTPS in front of them
  • Under an hour if you've used Docker before
Where to host itaffiliate disclosure
Hetzner Cloudrun it on
From $23.59/mo · 2 vCPU / 4 GB / 80 GB · EU + US
Get Hetzner Cloud (opens in new tab)
Kamaterafree trial
From $4/mo · 1 vCPU / 1 GB / 20 GB · US + EU + Asia
Start free on Kamatera → (opens in new tab)
DigitalOceanalso works on
From $6/mo · 1 vCPU / 1 GB / 25 GB · US + EU + Asia
Deploy on DigitalOcean → (opens in new tab)

Paid link — we earn a commission if you shop through it.

Install

Run these commands on your server:

# Actual Budget — sync server
docker run -d --name actual \
  -p 5006:5006 -v actual-data:/data \
  actualbudget/actual-server:latest
# open http://SERVER_IP:5006

What you take on

Actual's docs are frank about what the server does and does not do for you:

non-negotiableWithout a server you get budgeting but not sync, mobile or browser use, bank syncing or the API (install docs); with one, the docs say "You'll need to enable HTTPS on your server in order to safely use all of Actual's features" — a proxy with a certificate, a self-signed pair in config.json, or Tailscale/Caddy for non-public hosts.
non-negotiableAuthentication is one server password by default. Multiple users require an OpenID provider (loginMethod: "openid", described as "in preview"); the header method is "for advanced use and if not done correctly could have security implications".
non-negotiableEnd-to-end encryption is optional, extra and irreversible: "It is not possible to turn off encryption", and if you lose the encryption password with no local copy "you can never recover your data". Bank-sync tokens are stored on the server and "are not covered by end-to-end encryption".
non-negotiableBank sync needs your own credentials with Akahu, Enable Banking, GoCardless ("not accepting new accounts"), SimpleFIN or Pluggy, and "Actual does not sync bank data automatically" — you press Bank Sync. Backups are an export from Settings (or the desktop app's Backup Now); if a large budget will not restore, the docs say to Reset Sync first to compact the file.
non-negotiable26.9.0 moved the container images to Node 24 and dropped 32-bit ARM from the Ubuntu images — use :26.9.0-alpine there. Data lives in /data (server-files/account.sqlite with the hashed password; user-files with the budgets). The 512 MB floor is our estimate; upstream publishes no RAM figure.

An alternative to

Head-to-head

More self-hosted tools

We use analytics cookies (Google Analytics, PostHog) to see which guides are useful. No ad networks, no cross-site tracking. See our privacy policy.