I’ve been on the FIRE journey for 3 years now, and tracking every penny is non-negotiable. Beancount has been my accounting backbone—double-entry bookkeeping, Python importers, complete data ownership. But here’s the thing: I miss envelope budgeting.
I came from YNAB in 2023. The envelope system was incredible—assign every dollar a job, roll with the punches, prioritize spending. When I switched to Beancount for data ownership and customization, I lost that. Fava’s budget feature works (you can set monthly budgets and see actuals), but it doesn’t give you the YNAB feeling—the real-time “I have $247 left in Groceries this month” visibility.
Enter Surebeans (and Friends)
A few weeks ago, I discovered Surebeans—a new hledger-compatible budgeting app that brings YNAB-style envelope budgeting to plain text accounting. It runs on Windows, macOS, Linux, and your browser. Your data lives in plain text hledger journal files, synced via “bring your own cloud” (Dropbox, S3, git, etc.). Each budget gets its own git repo.
This got me thinking: Do we need GUI budgeting layers on top of Beancount/hledger, or should we stick to pure plain text?
The Contenders in 2026
Option 1: YNAB (Proprietary SaaS)
Pros:
- Gold standard envelope budgeting UX
- Bank sync, mobile apps, real-time sync
- Partner budgets (YNAB Together)
- Polished, mature product
Cons:
- $99/year subscription (adds up over time)
- Proprietary data—no exports to Beancount
- Vendor lock-in
- Can’t script or customize
Option 2: Surebeans (hledger + YNAB UX)
Pros:
- YNAB-style budgeting with plain text storage
- One-time purchase (~$50), no subscription
- Data in hledger format (portable, auditable)
- Git sync = version control built-in
- Private (no server, no cloud vendor)
Cons:
- New product (launched 2026, still maturing)
- hledger-specific (not directly Beancount-compatible)
- Requires learning hledger syntax if coming from Beancount
- Self-managed sync (no “it just works” cloud)
Option 3: Firefly III (Self-Hosted FOSS)
Pros:
- Free and open-source
- Self-hosted = full data control
- Double-entry bookkeeping (accountant-friendly)
- RESTful API for integrations
- Budget schedules, auto-categorization
Cons:
- Self-hosting = IT burden (Docker/server maintenance)
- Not plain text accounting (uses database)
- Steeper learning curve for setup
- Separate from Beancount ecosystem
Option 4: Pure Fava + Beancount Budgets
Pros:
- Built-in Beancount feature, no extra tools
- Budget directives in plain text
- Fava shows budget vs actual in Income Statement
- Fava Envelope plugin available for YNAB-style workflows
- Zero extra cost
Cons:
- Less intuitive than YNAB (more technical)
- No real-time “remaining balance” feeling
- Budget setup requires custom directives
- Limited mobile experience
My Current Stack (Experimental)
I’m testing a hybrid approach:
- Beancount for investments, rental properties, taxes (the “serious accounting”)
- Surebeans (via hledger) for daily spending budgets (groceries, dining, entertainment)
- Custom Python scripts to reconcile between the two
Why both? Beancount excels at complex tracking (cost basis, capital gains, multi-currency). Surebeans excels at daily spending discipline—the “I have $32 left in my restaurant budget, should I order takeout?” question.
The Big Question
Does adding a GUI budgeting layer sacrifice plain text accounting’s power?
On one hand, tools like Surebeans and Firefly III make plain text accessible to non-technical users (my partner actually uses Surebeans, wouldn’t touch raw Beancount). On the other hand, every abstraction layer adds complexity, sync issues, and potential data conflicts.
What’s your approach?
- Pure Beancount + Fava budgets?
- Hybrid stack (Beancount + external budgeting tool)?
- Considering Surebeans or Firefly III?
- Still using YNAB alongside plain text accounting?
For FIRE folks: How do you balance obsessive tracking accuracy (Beancount’s strength) with daily spending discipline (YNAB’s strength)?
Relevant links:
- Surebeans website
- Firefly III
- Beancount budgeting docs
- Fava Envelope plugin (YNAB-style budgeting in Fava)