Self-host Kestral Budget
Run Kestral Budget on your own computer or server with Docker, Portainer, or Podman.
Self-hosting runs the same Kestral Budget app on your own computer or server. All options keep your data in a persistent volume you control. Prefer a desktop app? Download it for Windows or macOS instead.
The desktop and self-hosted editions use separate databases. Use Export backup and Import backup to move data between them. Do not expose a self-hosted instance to an untrusted network, because the app has no login.
Docker
Install Docker Desktop or Docker Engine with the Compose plugin, and make sure Git is available. From a terminal:
git clone https://github.com/btmcbride/kestralbudget.git
cd kestralbudget
docker compose up --build -d
Open http://localhost:8080. Data is stored in the persistent kestralbudget-data volume. Stop the app with docker compose down, which keeps your data. Avoid docker compose down -v unless you intend to delete it.
Portainer
Portainer’s Git-based stack deployment does not build this repository’s Docker image automatically. Build the image on the same Docker host that Portainer manages:
git clone https://github.com/btmcbride/kestralbudget.git
cd kestralbudget
docker build -f DockerFile -t kestralbudget:local .
In Portainer, select that Docker environment, open Stacks → Add stack → Web editor, and use this Compose definition:
services:
kestralbudget:
image: kestralbudget:local
ports:
- "8080:8080"
environment:
HOST: "0.0.0.0"
PORT: "8080"
DATABASE_PATH: /data/kestralbudget.sqlite
volumes:
- kestralbudget-data:/data
restart: unless-stopped
volumes:
kestralbudget-data:
Deploy the stack and open http://localhost:8080. The database is kept in the named volume.
Podman Desktop
Install Podman Desktop and start its Podman machine. Go to Settings → Resources → Compose → Setup to install the Compose provider (Podman Compose setup). Then clone the repository and start the app:
git clone https://github.com/btmcbride/kestralbudget.git
cd kestralbudget
podman compose up --build -d
Open http://localhost:8080. Stop it with podman compose down. The named volume preserves your data.
Questions or problems? Open an issue on GitHub. See also the FAQ and the privacy details.