Cryptomon
A self-hosted, single-binary crypto portfolio dashboard backed by Kraken. Read-only: it tracks your holdings, cost cryptomon, and P&L — it never places trades or moves funds.
Features
- Live portfolio value and P&L, updating in real time from Kraken's websocket ticker, visible in the top bar on every page.
- Per-position detail (holdings, cost cryptomon, current value) and a transfers view.
- Auto-imports trades and balances from Kraken; supports manual ledger entries for anything bought elsewhere.
- Single-user authentication: username/password + optional TOTP-based MFA (with QR code setup), all served over your own network.
- Kraken API credentials are encrypted at rest.
Requirements
- Go 1.26+ (to build from source)
- A Kraken account and API key with read-only permissions (Query Funds, Query Closed Orders & Trades — no withdrawal or trading rights needed)
Setup
Build the binary:
go build -o cryptomon .
Run it:
./cryptomon
On first run it creates a data/ directory next to the binary containing:
settings.conf— port, poll intervals, base currency, and a random encryption key used to encrypt your Kraken API secret at restapp.db— SQLite database (portfolio data, login, MFA state)
By default the server listens on :8080 — open http://localhost:8080.
First login
The default login is admin / admin. On first sign-in you'll be
required to set your own username and password. From there, MFA
(authenticator app via TOTP, with QR code setup) can optionally be
enabled from the Account page.
If you forget your credentials, run:
./cryptomon -userreset
This resets the login back to admin / admin and disables MFA. You'll
be asked to set a new username/password on next sign-in.
Connect Kraken
Go to Settings and enter a Kraken API key/secret with read-only permissions. Balances and trade history will sync automatically on the configured poll interval.
Configuration
data/settings.conf is a plain key=value file, auto-created with
defaults on first run:
| Key | Default | Meaning |
|---|---|---|
port |
8080 |
HTTP listen port |
poll_interval_seconds |
60 |
How often balances/trades/prices refresh |
history_refresh_seconds |
300 |
How often historical price deltas refresh |
db_path |
data/app.db |
Path to the SQLite database |
base_currency |
GBP |
Currency all values are displayed in (also changeable from Settings) |
app_secret |
(random, generated once) | AES-256 key encrypting Kraken credentials at rest — do not share or edit |
Edit port and restart to change the listen address; the rest can also
be changed from the web UI where applicable.
License
See LICENSE.