Firefly III is the canonical open-source self-hosted PFM — eleven years old, AGPL v3, 23k+ stars, 10M+ Docker pulls, and a deep double-entry accounting model. Finlynq is also AGPL v3 and self-hostable, but built around a first-party MCP server and per-user encryption rather than a strict double-entry ledger. They serve overlapping but distinct audiences.
Last updated: 2026-05-13
Firefly III is the right call if any of these matter more than ownership:
link_id), which is lighter but doesn't enforce balance.Finlynq is the right call if any of these matter:
v1:envelope). Even the operator can't read your transaction notes, payees, tags, or display names. Firefly III stores those fields plaintext in the database; row-level encryption is the operator's responsibility.finlynq.com/cloud (same features). Firefly III is self-host only by design.| Finlynq | Firefly III | |
|---|---|---|
| License | AGPL v3 | AGPL v3 |
| Founded | 2026 | 2015 |
| GitHub stars | New project | ~23.2k |
| Docker pulls | New project | 10M+ on fireflyiii/core |
| Hosting | Self-host (Docker + PostgreSQL) or managed cloud | Self-host only (Docker + LAMP) |
| Pricing | Donation-based; same features on self-host and managed cloud | Donation-based (GitHub Sponsors, Patreon) |
| First-party MCP server | Yes — 91 HTTP / 87 stdio tools, v3.1.0 | No — maintainer-declined (#9753) |
| Community MCP wrappers | n/a (first-party) | Two unofficial: etnperlong/firefly-iii-mcp (TS, ~69★) and horsfallnathan/firefly-iii-mcp-server (Python, ~7★) |
| MCP auth | OAuth 2.1 + DCR, Bearer API key (pf_*), or stdio | Community wrappers proxy a Firefly Personal Access Token |
| REST / HTTP API | Yes — full surface mirrored from MCP | Yes — covers almost the whole app; OAuth 2 + PAT |
| Accounting model | Single-entry with server-minted transfer-pair link_ids | Double-entry (every txn is asset↔expense / asset↔asset etc.) |
| Multi-currency | Native, with per-currency cost-basis bucketing | Native; per-account currency + stored FX rate per txn |
| Investment / portfolio | Cost basis, dividends, FX-aware aggregation across accounts | Not natively supported — community workaround via asset accounts |
| Bank sync | File / email import + connector framework. No first-party Plaid / PSD2 yet. | Data Importer: CSV, OFX, camt.053, GoCardless / Nordigen (PSD2 EU), Salt Edge, Spectre |
| Rule engine | Auto-categorize rules (match field / type / value) | Rule groups, triggers, actions, replay over history — deeper |
| Encryption at rest | Per-user envelope encryption (AES-256-GCM, scrypt-derived KEK from password) — operator cannot decrypt | Plaintext at the application layer; row encryption is the operator's responsibility |
| Multi-user / household | No (single-user) | Yes — admin / demo / regular roles on one instance |
| Native mobile app | No (mobile web UI only) | No (mobile web UI only) |
| Localization | English only at launch | Widely translated — strong i18n (EU origin) |
| Stack | Next.js 16, TypeScript, Drizzle, PostgreSQL | Laravel (PHP 8.x), Blade + Vue 3, MySQL/MariaDB/PostgreSQL/SQLite |
| Anthropic Connectors Directory | Submitted 2026-05-09; awaiting review | Not listed |
Profile → Export data, or hit the /api/v1/transactions endpoint with a Personal Access Token and a paginated date range./import/pending and Finlynq mints a server-side link_id./import/reconcile. The unified staging pipeline lets you review, edit, and approve every row — multi-currency, transfer-pair detection, and dedup are built in.create_rule (web UI or MCP tool) to re-author your most-used rules; "match field / match type / match value"maps cleanly to Firefly III's simpler triggers.https://finlynq.com/mcp. OAuth handles the rest. For self-host, point Claude at your own deployment's /mcp URL.{ success: true, data: <T> } envelope, tool annotations for the Anthropic Connectors Directory, per-user encryption all the way through).link_id with a four-check invariant (link_id present, sole sibling, both type='R', different accounts). That's enough for the workflows Finlynq targets, but it's not accountant-grade. If you want a balance-enforcing ledger, Firefly III (or hledger / Beancount / Actual) is the better tool.PF_PEPPER). Even with full DB access, the operator can't read user-scoped fields. The trade-off: lose your Finlynq password without a backup → those fields are unrecoverable. Firefly III is simpler operationally, Finlynq is stronger structurally.Free, open source, AGPL v3. Run it on our managed cloud or self-host with one Docker Compose file. Same features either way.