Open source desktop & web app that extends Monarch Money with additional budgeting tools.
Runs locally or self-hosted. Each feature is modular; enable only what you need.
Try the Demo · Documentation · Wiki
Dashboard |
Recurring Expenses |
Settings |
- Local-first: Credentials encrypted locally with Fernet (AES-128-CBC + HMAC-SHA256); server never sees your passphrase
- Monarch sync: Reads and writes directly to your Monarch account via their GraphQL API
- Modular: Each feature operates independently; enable/disable as needed
| Feature | Description |
|---|---|
| Recurring Expenses | Monthly savings targets for non-monthly expenses (annual, quarterly, semi-annual). Calculates targets, tracks progress, syncs to Monarch. Supports rollup categories for aggregating subscriptions. |
| Monthly Notes | Persistent notes for Monarch categories/groups. Auto-carry-forward, revision history, inline math evaluation. |
| Stashes | Visual dashboard for savings goals. Set target amounts and dates, track progress with status badges, organize with drag/drop. Optional browser bookmark sync. |
| Feature | Description |
|---|---|
| Joint Goals | Shared goal tracking between two Monarch accounts. Share progress without exposing transactions/balances. |
| Leaderboard | Category spending competition with P2P encrypted score sharing. Income-adjusted scoring, multiple timeframes. |
| Inbox Sync | Email integration for receipt itemization. Parses receipts from Walmart, Costco, Uber, DoorDash, etc. |
| Shared Budget | Expense splitting and settlement tracking. Configurable split ratios with per-transaction overrides. |
| Allowance | Habit-based allowance accumulation. Define habits with reward values, track completions. |
Download the latest release for macOS, Windows, or Linux.
Runs locally with an embedded Python backend. See the Desktop App wiki for build instructions.
From registry (recommended):
export INSTANCE_SECRET=$(openssl rand -hex 16)
docker run -d \
-p 5001:5001 \
-v eclosion-data:/app/data \
-e INSTANCE_SECRET=$INSTANCE_SECRET \
ghcr.io/312-dev/eclosion:stable
# Access at http://localhost:5001?secret=YOUR_SECRETFrom source:
git clone https://github.com/312-dev/eclosion.git && cd eclosion
export INSTANCE_SECRET=$(openssl rand -hex 16)
docker compose up -dSee the Self-Hosting wiki for reverse proxy setup and environment variables.
Credentials are encrypted with Fernet (AES-128-CBC + HMAC-SHA256) using PBKDF2 key derivation (480,000 iterations).
| Desktop | Server/Docker | |
|---|---|---|
| Data location | Local machine only | Server filesystem |
| Access control | None needed (localhost) | Instance secret required |
| Encryption key | OS keychain (Touch ID / Keychain) | User-entered passphrase |
| Network exposure | None | Requires HTTPS in production |
See the Security wiki for full details.
# Backend
pip install -r requirements.txt && python app.py
# Frontend (separate terminal)
cd frontend && npm install && npm run dev
# Or run everything with Docker
docker compose up --build| Layer | Stack |
|---|---|
| Frontend | React 19, TypeScript 5, Vite 7, Tailwind CSS 4 |
| Backend | Python 3.11+, Flask, APScheduler |
| Desktop | Electron, PyInstaller (embedded Python) |
| State | SQLite (SQLAlchemy ORM) |
| CI/CD | GitHub Actions, Docker (GHCR), Cloudflare Pages |
See the Contributing guide.
- Bugs: GitHub Issues
- Questions: GitHub Discussions
Created by @GraysonCAdams. Maintained by 312.dev.
See contributors for the full list.
MIT