← Finlynq
Comparison

Finlynq vs Firefly III

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

When to choose Firefly III

Firefly III is the right call if any of these matter more than ownership:

  • You want a true double-entry accounting model. Every Firefly III transaction is a transfer between two accounts (asset / expense / revenue / liability) — accountant-grade rigor. Finlynq is single-entry with derived transfer pairs (link_id), which is lighter but doesn't enforce balance.
  • You want a battle-tested rule engine. Firefly III's rule groups, triggers, actions, and "replay over historical transactions"UX are more mature than Finlynq's auto-categorize rules.
  • You're in the EU/UK and want first-party PSD2 bank aggregation. Firefly III's Data Importer ships GoCardless / Nordigen (free PSD2 access) and Salt Edge integrations. Finlynq has no first-party Plaid or PSD2 aggregator integration today.
  • You want the largest, longest-running OSS PFM community. ~23.2k GitHub stars, 10M+ Docker pulls, hundreds of contributors since 2015. Finlynq is brand new by comparison.
  • You want multi-user on one instance. Firefly III supports admin / demo / regular roles on a single deployment. Finlynq is single-user.
  • You prefer PHP/Laravel + LAMP hosting. Firefly III runs on any shared host with PHP 8.x. Finlynq's Node + PostgreSQL stack is heavier.

When to choose Finlynq

Finlynq is the right call if any of these matter:

  • You want a first-party MCP server. Finlynq ships 91 HTTP and 87 stdio MCP tools built and maintained by the project, with OAuth 2.1 + Dynamic Client Registration, Bearer API keys, and stdio transports. Firefly III has no first-party MCP server — its maintainer closed issue #9753 ("LLM integration for auto-categorization & advanced reporting") with no plan to add one. Two community-built MCP wrappers exist that call Firefly III's REST API with a Personal Access Token; they aren't blessed by the project, aren't integrated into the UI, and depend on whatever access the user's REST token has.
  • You want per-user envelope encryption of names, payees, notes, and tags. Finlynq wraps a per-user DEK with a scrypt-derived KEK keyed off your password (AES-256-GCM with a 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.
  • You want native investment / portfolio tracking. Finlynq has cost basis, dividends, FX-aware aggregation across accounts, and per-currency cost-basis bucketing. Firefly III has no native concept of holdings, prices, or portfolio P/L — long-standing community gap.
  • You want a managed cloud option. Finlynq has both a free Docker self-host path and finlynq.com/cloud (same features). Firefly III is self-host only by design.
  • You want a modern App Router UI. Finlynq is Next.js 16 + Tailwind + shadcn/ui v4. Firefly III is server-rendered Laravel Blade with progressively enhanced JS — boring-stable but visibly older.
  • You're North American. Firefly III's bank-aggregation story is EU-PSD2 centric; NA users almost always CSV import. Finlynq's connector framework + email-import staging is more flexible for NA institutions today.

Side-by-side

 FinlynqFirefly III
LicenseAGPL v3AGPL v3
Founded20262015
GitHub starsNew project~23.2k
Docker pullsNew project10M+ on fireflyiii/core
HostingSelf-host (Docker + PostgreSQL) or managed cloudSelf-host only (Docker + LAMP)
PricingDonation-based; same features on self-host and managed cloudDonation-based (GitHub Sponsors, Patreon)
First-party MCP serverYes — 91 HTTP / 87 stdio tools, v3.1.0No — maintainer-declined (#9753)
Community MCP wrappersn/a (first-party)Two unofficial: etnperlong/firefly-iii-mcp (TS, ~69★) and horsfallnathan/firefly-iii-mcp-server (Python, ~7★)
MCP authOAuth 2.1 + DCR, Bearer API key (pf_*), or stdioCommunity wrappers proxy a Firefly Personal Access Token
REST / HTTP APIYes — full surface mirrored from MCPYes — covers almost the whole app; OAuth 2 + PAT
Accounting modelSingle-entry with server-minted transfer-pair link_idsDouble-entry (every txn is asset↔expense / asset↔asset etc.)
Multi-currencyNative, with per-currency cost-basis bucketingNative; per-account currency + stored FX rate per txn
Investment / portfolioCost basis, dividends, FX-aware aggregation across accountsNot natively supported — community workaround via asset accounts
Bank syncFile / email import + connector framework. No first-party Plaid / PSD2 yet.Data Importer: CSV, OFX, camt.053, GoCardless / Nordigen (PSD2 EU), Salt Edge, Spectre
Rule engineAuto-categorize rules (match field / type / value)Rule groups, triggers, actions, replay over history — deeper
Encryption at restPer-user envelope encryption (AES-256-GCM, scrypt-derived KEK from password) — operator cannot decryptPlaintext at the application layer; row encryption is the operator's responsibility
Multi-user / householdNo (single-user)Yes — admin / demo / regular roles on one instance
Native mobile appNo (mobile web UI only)No (mobile web UI only)
LocalizationEnglish only at launchWidely translated — strong i18n (EU origin)
StackNext.js 16, TypeScript, Drizzle, PostgreSQLLaravel (PHP 8.x), Blade + Vue 3, MySQL/MariaDB/PostgreSQL/SQLite
Anthropic Connectors DirectorySubmitted 2026-05-09; awaiting reviewNot listed

Migrating from Firefly III

  1. Export transactions.Use Firefly III's built-in CSV export from Profile → Export data, or hit the /api/v1/transactions endpoint with a Personal Access Token and a paginated date range.
  2. Flatten double-entry pairs into single-entry. Each Firefly III double-entry transaction becomes one row in Finlynq with a signed amount. Transfers between two of your asset accounts will land in Finlynq's staging UI; mark them as transfer pairs on /import/pending and Finlynq mints a server-side link_id.
  3. Import into Finlynq. Upload the CSV at /import/reconcile. The unified staging pipeline lets you review, edit, and approve every row — multi-currency, transfer-pair detection, and dedup are built in.
  4. Re-create your rules. Firefly III's rule groups don't auto-import. Use Finlynq's 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.
  5. Hook up your AI client. Open Claude → Customize → Connectors → "+" → paste https://finlynq.com/mcp. OAuth handles the rest. For self-host, point Claude at your own deployment's /mcp URL.

FAQ

Isn't Firefly III strictly better since it's older and more popular?
For traditional double-entry budgeting workflows on EU/UK banking infrastructure, often yes — Firefly III has eleven years of polish, a deep rule engine, PSD2 bank aggregation, and multi-user support. Finlynq is built for a different slot: AI-native users who want a first-party MCP server, encryption that excludes the operator, and native investment tracking. We pick different fights.
Why doesn't Firefly III just add MCP?
The maintainer (JC5) closed the LLM-integration request without plans to ship it (issue #9753). That's a legitimate product call — Firefly III's identity is opinionated double-entry accounting, not AI. Two community wrappers exist that proxy the REST API; they work, but they aren't blessed, aren't in-UI, and they expose whatever a Firefly III Personal Access Token can access.
Are the community MCP wrappers for Firefly III as good as Finlynq's MCP?
They cover a useful slice — accounts, bills, categories, tags, transactions, search, budgets — but they're external Node / Python processes calling Firefly III's REST API with a Personal Access Token. There's no per-user envelope encryption, no confirmation-token preview/execute pattern for destructive ops, no OAuth 2.1 + DCR, and no first-party support. Finlynq's MCP is part of the project (91 HTTP / 87 stdio tools at v3.1.0, the canonical { success: true, data: <T> } envelope, tool annotations for the Anthropic Connectors Directory, per-user encryption all the way through).
Does Firefly III have better bank-sync than Finlynq?
In the EU/UK — yes, materially. Firefly III's Data Importer ships GoCardless / Nordigen (free PSD2 access) and Salt Edge. In North America — both projects largely rely on CSV / OFX / QFX import; neither ships Plaid out of the box. Finlynq's email-import staging via Resend Inbound is a different angle that some users prefer.
Does Finlynq do double-entry?
No. Finlynq is single-entry: every transaction has one signed amount on one account. Transfer pairs are modelled as two rows linked by a server-minted 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.
How do the encryption stories compare?
Firefly III stores names, payees, notes, and tags as plaintext columns and relies on the operator's database-at-rest encryption (whatever the operator configured). Finlynq encrypts those fields at the application layer with a per-user DEK that's wrapped by a scrypt-derived KEK keyed off the user's password (peppered with 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.
Can I run both?
Yes, plenty of people do. Firefly III is a great primary ledger; Finlynq can be a parallel system for users who want an MCP-driven copy of their data in a Postgres they control, with envelope encryption and native investment tracking. Until Finlynq adds bank-sync parity, this is a reasonable hybrid.

Sources

Try Finlynq

Free, open source, AGPL v3. Run it on our managed cloud or self-host with one Docker Compose file. Same features either way.