Install
Arca runs as a single Docker container. Pick the way you usually add containers; each one takes a few minutes.
Docker
Section titled “Docker”docker run -d \ --name arca \ -p 3000:3000 \ -v /path/to/arca-data:/data \ --restart unless-stopped \ damianeickhoff/arca:latestReplace /path/to/arca-data with a folder on your machine. Then open http://localhost:3000 (or http://<your-server-ip>:3000 from another device). The first start creates the database and opens the setup.
Docker Compose
Section titled “Docker Compose”Save this as docker-compose.yml in an empty folder:
services: arca: image: damianeickhoff/arca:latest container_name: arca ports: - "3000:3000" volumes: - ./data:/data environment: # Set to "true" only behind a reverse proxy that serves HTTPS. - COOKIE_SECURE=false restart: unless-stoppedThen start it:
docker compose up -dTo use another port, change the left number, for example "8080:3000".
Unraid
Section titled “Unraid”- Download the template
arca.xmland copy it to/boot/config/plugins/dockerMan/templates-user/on your server. - In Unraid, go to Docker → Add Container, choose Template → User templates → Arca.
- Map Data (
/data) to/mnt/user/appdata/arca. - Apply, then open the WebUI from the Docker tab.
Where your data lives
Section titled “Where your data lives”Everything Arca needs to keep is in the /data folder you mapped:
| What | Where |
|---|---|
| The database (all your transactions, budgets and settings) | finance.db (plus finance.db-wal and finance.db-shm while it runs) |
| Logos you uploaded for merchants | brand-icons/ |
| Profile photos | avatars/ |
| Receipt photos | receipts/ |
| Backups Arca made before updates, and the ones you made | backups/ |
Back up that folder and you have everything. See Updating and backups.
Opening Arca from outside your home
Section titled “Opening Arca from outside your home”Arca works fine on your home network over plain http://. If you want to reach it from outside, put it behind a reverse proxy that serves HTTPS (Nginx Proxy Manager, Caddy, Traefik, SWAG and so on) or use a VPN such as Tailscale or WireGuard.
When Arca sits behind a proxy that serves HTTPS, set this on the container:
COOKIE_SECURE=trueThis marks the sign-in cookie as secure. Leave it at false (the default) when you open Arca over plain http://, otherwise signing in won’t stick.
Settings you can change
Section titled “Settings you can change”| Variable | Default | What it does |
|---|---|---|
COOKIE_SECURE |
false |
true only when a reverse proxy serves Arca over HTTPS. |
DB_PATH |
/data/finance.db |
Where the database lives. Logos and photos go next to it. |
ALLOW_OPEN_SIGNUP |
not set | Set to true to let anyone create an account again, without an invite link. Only for getting back into a household whose admin is locked out: set it, restart Arca, create a new account on the sign-in page (it becomes an admin) and remove the setting again. |
BANK_SYNC_DISABLED |
not set | Set to 1 to switch off the automatic daily bank sync. |
BANK_SYNC_TOKEN |
not set | A long random string, only if you want to start the bank sync from your own scheduler. |
OLLAMA_HOST |
http://localhost:11434 |
Where Arca finds Ollama for Scan receipt. Inside Docker, point it at your Ollama container or server, for example http://192.168.1.20:11434. |
OLLAMA_VISION_MODEL |
llava |
The Ollama model that reads receipts. Install it first with ollama pull llava. |
Install it on your phone
Section titled “Install it on your phone”Open Arca in your phone’s browser and use Add to Home Screen (Safari: the share button; Chrome: the ⋮ menu). It then opens full screen, like an app. You still need a connection to your server: Arca doesn’t keep your data on the phone.
Start the bank sync from your own scheduler
Section titled “Start the bank sync from your own scheduler”Arca syncs connected banks once a day by itself. If you’d rather choose the moment yourself (for example with Unraid’s User Scripts plugin or cron):
-
Set
BANK_SYNC_TOKENon the container to a long random string, for example the output ofopenssl rand -hex 32. -
Set
BANK_SYNC_DISABLED=1too if the built-in daily sync shouldn’t run next to it. -
Call Arca from your scheduler:
Terminal window curl -fsS -X POST -H "Authorization: Bearer $BANK_SYNC_TOKEN" https://arca.example.com/api/bank/cron
It answers with the result per bank, or an error when an import or sync is already running. Banks only allow a few syncs a day, so there’s no point running it more than a few times a day.