Introducing Trout: Open-Source Envelope Budgeting You Actually Own
A free, self-hosted envelope budgeting app with AI assistant, 2,500+ European bank connections, crypto tracking, and multi-currency support. No subscription. No data sharing.
Most budgeting apps charge you money to manage your money. YNAB costs $99 per year. Monarch Money costs $100. Both store your complete financial history on their servers. Every transaction, every account balance, every paycheck -- sitting on infrastructure you don't control.
Trout is a free, open-source envelope budgeting application. You can self-host it on your own server, or use the hosted version at trout.money with no setup required. Same proven methodology as YNAB. Zero subscription fees. Your financial data stays under your control.
What is envelope budgeting?
Every dollar of income gets assigned to a category before you spend it. Rent, groceries, gas, savings -- each category is an "envelope." When you spend, the money comes out of that envelope. When an envelope hits zero, you stop spending in that category or move money from another one.
This is how people managed money before apps existed, with literal paper envelopes full of cash. YNAB proved the digital version works. Millions of people use it. The problem is the price tag and the data collection, not the method.
Trout uses the same approach. If you've used YNAB, the concepts map directly: categories, category groups, "Ready to Assign," activity tracking, rollover balances. The learning curve is near zero for YNAB users.
What Trout does
Envelope budgeting with rolling balances. Allocate income across categories. Underspending carries forward automatically. Overspend in dining? Move money from entertainment to cover it. Your "Ready to Assign" balance shows exactly how much unallocated money you have at any moment.
2,500+ European bank connections. Trout connects to banks through GoCardless, a regulated Open Banking provider. Unlike Plaid (which YNAB uses), Open Banking means your bank credentials never pass through a third-party intermediary. You authenticate directly with your bank. Transactions sync automatically, including pending charges. The connection refreshes within Open Banking rate limits (4 requests per day per account) and lasts 90 days before requiring re-authorization.
AI financial assistant. Ask questions in plain English: "How much did I spend on groceries last month?" or "Move $200 from dining to savings." The assistant has access to 10 tools for querying transactions, modifying budgets, and creating categories. It runs through OpenAI's API, but the key detail is that your financial data never leaves your server for AI processing -- the assistant makes tool calls against your local database, then constructs responses.
Transaction rules engine. Set up rules with multiple conditions: if the payee starts with "REWE" AND the amount is between 10 and 100 EUR, categorize as Groceries. Rules support AND/OR condition groups, amount ranges, payee matching, and memo/description filters. YNAB only offers basic payee matching.
Crypto portfolio tracking. Add your cryptocurrency holdings and track their real-time value via CoinGecko. Crypto balances appear in your net worth alongside checking accounts, savings, and credit cards.
Five goal types. Needed for Spending (monthly bills), Savings Balance (emergency fund), Target by Date (vacation in June), Target Monthly (save $500/month), and Debt Payment. YNAB offers three.
Multi-currency support. Budget in multiple currencies with automatic exchange rate updates. Built for expats, digital nomads, and anyone managing money across borders.
Financial reports. Spending breakdowns, cash flow analysis, income vs. expense trends, and net worth tracking over time.
The tech stack
Trout is a TypeScript monorepo:
- Frontend: Next.js 15, React 19, Tailwind CSS 4
- Backend: Elysia on the Bun runtime
- Database: PostgreSQL with Drizzle ORM
- Build system: Turborepo with Bun as package manager
- Deployment: Docker Compose
The API uses Eden Treaty for type-safe communication between frontend and backend -- types flow from the database schema through the API to the React components without code generation. PostgreSQL stores currency amounts with NUMERIC(19,4) precision for GAAP-compliant accounting.
For developers, the codebase follows a module pattern: each feature (accounts, transactions, budget, bank sync, rules) lives in its own directory with routes, services, and validation schemas. Contributing a new feature means creating a new module, not modifying a monolithic file.
Get running in 5 minutes
If you have Docker installed, getting started takes one command:
git clone https://github.com/SSardorf/betterbudget
cd betterbudget
cp .env.example .env
Edit .env to set your BETTER_AUTH_SECRET (generate one with openssl rand -base64 32), then:
docker compose -f docker-compose.production.yml up -d
This starts PostgreSQL, runs database migrations, launches the API server, and starts the web frontend. Open http://localhost:3000 and create your account.
For bank sync, you'll need GoCardless API credentials (free tier available at bankaccountdata.gocardless.com). For the AI assistant, add an OpenAI API key to your .env file.
What Trout does not do well (yet)
No native mobile app. The web interface is responsive and works on phones, but there's no dedicated iOS or Android app. YNAB's mobile apps are excellent -- quick transaction entry, widget support, Apple Watch integration. Trout can't match that today.
No offline mode. Trout requires an internet connection to your self-hosted server. Actual Budget, another open-source alternative, uses a local-first architecture with sync -- a fundamentally different design choice that enables offline use. If you budget on the subway or in areas with spotty connectivity, this matters.
Smaller community. YNAB has decades of user content, YouTube tutorials, a subreddit with hundreds of thousands of members, and dedicated support staff. Actual Budget has an active Discord with 7,000+ members. Trout is new. The community is small. You'll be an early adopter, with the upsides (influence on direction) and downsides (fewer guides, less peer support) that come with it.
Bank sync is Europe-focused. GoCardless covers 2,500+ European and UK banks. If you're in the US, automatic bank sync is not available yet. Manual transaction entry or CSV import is the current path for US-based users.
Self-hosting requires technical comfort. You need to be comfortable running Docker containers and managing a PostgreSQL database. Backups are your responsibility. Updates require pulling new images and restarting containers. If "Docker Compose" sounds unfamiliar, try the free hosted version at trout.money instead -- same app, no infrastructure to manage.
Who is Trout for?
YNAB users tired of the subscription. You know envelope budgeting works. You're spending $99/year for a method, not a technology. Trout gives you the same method for $0/year, with more features (rules, crypto, AI) and complete data ownership.
Self-hosters. If you already run Nextcloud, Vaultwarden, or Immich on your home server, Trout fits right into your stack. Another Docker Compose service, another piece of your digital life under your control.
European users. 2,500+ bank connections via Open Banking. Multi-currency support. Built by a European, for Europeans. Most budgeting apps treat Europe as an afterthought.
Privacy advocates. No analytics. No telemetry. No data collection. The only external API calls are the ones you configure (bank sync, AI, crypto prices). Audit the code yourself -- it's FSL-1.1-MIT licensed.
Developers who want to contribute. Modern TypeScript stack. Clean module architecture. If you've been looking for a meaningful open-source project to contribute to, Trout needs help with mobile improvements, additional bank sync providers, new report types, and import tools for YNAB data.
What comes next
The roadmap is driven by what users actually need. Current priorities:
- US bank sync support (evaluating Plaid and SimpleFIN integration)
- YNAB data import tool
- Progressive Web App improvements for better mobile use
- Scheduled transactions with automatic posting
- Additional investment platform integrations (currently paused)
Trout is open source under the FSL-1.1-MIT license. The code is on GitHub. Star the repo if this interests you. Open an issue if something breaks. Submit a PR if you want to make it better.
Your money, your server, your rules.