A simple desktop application for tracking and managing your cryptocurrency portfolio. All data is stored locally on your hard drive — no cloud, no servers, no registration required.
Most portfolio tracking services store your data on their servers, where third parties can potentially access it. CoinMan Portfolio Tracker works differently: all information about your coins, transactions, and amounts stays exclusively on your machine in a plain JSON file.
- Privacy first — nobody knows what you hold
- No registration — no account, no email, no phone number
- Works offline — prices are fetched on demand, not required
- Open source — verify exactly what the app does
- Multiple independent portfolios within a single database file
- Add coins with buy price, amount, date, and notes
- Record sells and track realized profit/loss
- Automatic current price fetching via CoinGecko API or CoinMarketCap API (configurable)
- P&L display and price change in %
- Switch between multiple database files at runtime
- AES-256-GCM database encryption with Argon2id key derivation
- Optional "Current Price" column (toggle in Settings)
- Status bar: loaded database name + market data status
- Debug logging to file (launch with
--debugflag) - Window size and position saved between launches
| Platform | Status |
|---|---|
| Windows 10/11 | ✅ Supported |
| Linux (Ubuntu 22.04+) | ✅ Supported |
| macOS | ✅ Supported |
The only host requirement is Rust (install via rustup). The build scripts under scripts/ take care of everything else — system packages, the Windows cross-compile toolchain, Tauri CLI — and prompt before installing anything (default Y).
Both scripts run on Debian/Ubuntu-based hosts: Linux directly, or Windows via WSL.
git clone https://github.com/coinman-dev/portfolio.git
cd portfolio
bash scripts/build-linux-local.shOutput: target/release/coinman-portfolio
To run on another Ubuntu machine, the package
libwebkit2gtk-4.1-0must be present on the target system.
git clone https://github.com/coinman-dev/portfolio.git
cd portfolio
bash scripts/build-windows-local.shOutput: target/x86_64-pc-windows-msvc/release/coinman-portfolio.exe
The script uses cargo-xwin, which fetches Microsoft's MSVC SDK on demand (MIT-licensed) — no Windows VM or Visual Studio install required.
- Verify prerequisites and offer to install anything missing (
apt,rustup target add,cargo install). - Stamp the binary version from the latest
v*git tag plus the short HEAD SHA — e.g.0.7.2-beta-37c3484— so the version shown in the desktop UI uniquely identifies the build. - Accept a specific tag as an argument:
bash scripts/build-linux-local.sh v0.7.0-beta. - Restore the working tree after the build via a
trap, even on failure or Ctrl+C.
For hot-reload dev iteration:
cd portfolio
cargo tauri devRun the relevant build script once beforehand — it installs the same system packages and Tauri CLI that cargo tauri dev needs.
By default, data is saved to database/default.json next to the executable. You can create multiple database files and switch between them via File → Open database file.
By default, CoinMan fetches live prices from the CoinGecko API (no API key required).
Optionally, you can switch to CoinMarketCap as the price source:
- Go to Settings → Price Source → CoinMarketCap
- Enter your CMC API key (free tier available at coinmarketcap.com)
- The key is validated immediately — if valid, CMC becomes the active price source
- The status bar shows
from CMCorfrom CGto indicate which source was last used
If the CMC API key fails or is revoked, the app automatically falls back to CoinGecko.
CoinMan Portfolio Tracker supports AES-256-GCM encryption for database files, with keys derived via Argon2id (memory-hard key derivation). Your data is protected with modern, battle-tested cryptography.
- Go to File → Encrypt database to set a password for the current database file
- The encrypted file is stored in-place — the same
.jsonpath, but the contents are encrypted - On next launch (or when switching to an encrypted database), you will be prompted for the password
- Without the correct password, the file cannot be read or decrypted
| Property | Value |
|---|---|
| Cipher | AES-256-GCM |
| Key derivation | Argon2id |
| KDF parameters | m=65536 (64 MB), t=2 iterations, p=1 |
| Salt | 16 bytes, randomly generated per file |
| Nonce | 12 bytes, randomly generated per encryption |
- Change password — File → Change database password (re-encrypts with a new key)
- Remove encryption — File → Decrypt database (restores to plain JSON)
- The password is never stored anywhere — it is held in memory only for the current session
Important: If you forget your password, there is no recovery option. Keep your password safe.
- Tauri v2 (2.11.x) — desktop app framework (Rust + WebView)
- Rust (MSRV 1.95.0) — backend, data storage, system calls
- Vanilla JavaScript / HTML / CSS — UI (no frameworks, no npm, no Node.js)
- Python 3 — used only by maintainer-side scripts under
scripts/catalog/for coin catalog updates (not needed to run or build the app) - CoinGecko API — live coin prices (default)
- CoinMarketCap API — live coin prices (optional, requires API key)
- CoinMarketCap — coin catalog & logos
This project was developed with the help of AI tools:
CoinMan Portfolio Tracker is provided for informational purposes only. It is not financial, investment, or trading advice. The authors are not responsible for any financial decisions made based on data displayed by this application. Use at your own risk.
Market price data is provided by the CoinGecko API (default) or the CoinMarketCap API (optional). CoinMan Portfolio Tracker is not affiliated with or endorsed by CoinGecko or CoinMarketCap.
Coin catalog data (names, symbols, IDs) and coin logos are provided by CoinMarketCap. CoinMan Portfolio Tracker is not affiliated with or endorsed by CoinMarketCap.
This project is licensed under the MIT License.

