Self-hosting

Run it on your own server.

This page is the honest overview. The step-by-step quickstart lives on the docs site and is the one that's kept current line-by-line — this page won't repeat it in full and drift out of sync.

What you need

Docker To run the published container image.
PostgreSQL 16+ Required specifically — not SQLite or MySQL. Plugin isolation is enforced with row-level security, roles and schemas that only Postgres has.
A place to put it A homelab box, a small VPS, anything that can stay reachable. Wicker Money doesn’t need much: it’s a single container plus your existing Postgres.

Why Postgres is a hard requirement

The core owns identity and the ledger; everything that interprets money — budgets, forecasting, importers — is a plugin. Keeping one plugin's data invisible to another (and to the wrong user) is enforced with Postgres row-level security and per-plugin database roles derived from each plugin's manifest, not just checked in application code. That's a deliberate, load-bearing choice, not a default nobody reconsidered.

The shape of it

  1. Pull the image. docker pull ghcr.io/wickermoney/wicker-money:latest — pin a version once you have plugins in the picture; bundled plugins ship inside the same image.
  2. Point it at Postgres. The app connects as a least-privilege role that owns nothing and can't bypass row-level security. Migrations connect as a separate owner role that can. Both point at the same database.
  3. Run migrations. The image doesn't migrate on start, on purpose — that would mean the running API needs owner credentials, which it deliberately doesn't have.
  4. Start it. docker compose up -d. Put a reverse proxy in front if you want TLS and a real domain; set TRUST_PROXY=true if you do.
  5. Sign up first. The first account on an instance is its owner — the one who can turn plugins on and off. Anyone who signs up after you is a member, with their own data. From v0.5.0 you can set BOOTSTRAP_OWNER_EMAIL to your address so that someone who registers before you doesn't become the owner. Addresses aren't verified, so register promptly either way. Once everyone who needs an account has one, set REGISTRATION_ENABLED=false.

Before you commit to running this

Wicker Money is pre-1.0 with a single maintainer. Pre-1.0 means minor versions may still break things between releases — read what to expect between upgrades before you point it at data you can't afford to lose, and keep your own backups of the Postgres database regardless of what Wicker Money does or doesn't do.