Releases: letehaha/moneymatter
Release list
v0.30.4 – AI app permission fixes
What's Changed
🔐 AI app permissions
- An AI app connected to MoneyMatter could read your accounts, transactions and budgets even when the approval screen asked only for your profile. Only an app built to ask for profile access alone could do this. Claude, ChatGPT and other AI apps ask for your financial data, and the approval screen lists it. An app now gets your financial data only when you approve it.
- If you left Delete your financial data unticked when you connected an AI app, it could still delete or merge your payees. It now needs that permission, the same one it needs to delete transactions or budgets. To let an app delete or merge payees again, reconnect it and tick the permission. Thanks to @fandiyana for reporting both issues.
📝 Code Changes
Full Changelog: v0.30.3...v0.30.4
v0.30.3 – Editable initial balance, attachments on transfers, and fixes
What's Changed
✏️ Edit an account's initial balance
In MoneyMatter you can change the initial balance of a manual account after you create it. Open the account, select the Details tab and click the pencil next to Initial Balance.
The current balance and the whole balance history move by the amount of your change, so your charts show no jump. Your transactions stay as they are, and MoneyMatter adds no balance adjustment. You can't edit the initial balance of accounts connected to a bank, loans or vehicles.
📎 Attachments on transfers
You can attach files while you create a transfer between accounts. A file you add to a transfer shows on both sides of it. Each side keeps its own copy, so removing the file from one side leaves the other.
📌 Categories Watchlist tracks up to 30 categories
The widget stopped at 7 categories, or 16 on a tall widget. It takes 30 and scrolls once they no longer fit. You can also add a category from the widget's settings menu.
✨ Other improvements
- MoneyMatter is available in Slovak, a community translation. Pick it in Settings → Language.
- Net worth, portfolio totals and the subscriptions summary load faster.
- Self-hosting: you can paste the MoneyMatter compose file into a Portainer stack unchanged. The self-hosting docs have a Portainer guide.
🐞 Bug fixes
- In browsers set to a timezone west of UTC, such as the Americas, each bar in Analytics → Trends Comparison, Analytics → Cash Flow and a budget's statistics timeline carried the previous month's name. The amounts were right. Thanks to @mariofox for the report.
- Editing a transfer you opened from its receiving side turned the sending side into income, even if you only changed the note. Transfers opened from the sending side were never affected.
- The Cash Flow dashboard widget showed its empty state if the selected period had no transactions yet, such as on the first day of a month, and hid the trend of earlier periods. It shows zeros for the period, "N/A" for the comparison, and keeps the trend.
- Net worth and balance history valued foreign-currency amounts 1:1 on dates before MoneyMatter's first exchange rate for that currency. Those dates use the earliest rate MoneyMatter has, and the chart flags them as estimated.
- Sync now on a bank connection's page counted once per linked account against your provider's limit. On a SimpleFIN connection with several accounts, a few presses used up SimpleFIN's daily allowance. One press is one sync for the whole connection, and the button stays busy until the sync ends.
- Undoing a large import locked the app for a while and then failed if you had linked the account to a bank after the import. MoneyMatter refuses that undo at once and tells you why. Small imports were never affected.
- If an app update restarted the server during an import, an import undo or a backup restore, you saw a technical failure message. MoneyMatter says the update interrupted the job, and for imports tells you to undo the partial import before you retry.
- You couldn't sign in if the data MoneyMatter keeps in your browser was corrupted, which happened in Chrome. Sign-in works, and MoneyMatter skips the broken data.
- If your AI provider refused your key over billing, for example with no payment method on the account, auto-categorization kept retrying. MoneyMatter stops and marks the AI connection as rejected.
- In Russian, the word after a number took the wrong form for most counts, 1 and 2–4 included.
- In the attachments dialog, the delete confirmation opened behind the dialog. It opens on top.
- Self-hosted: the server crashed if the database restarted. It stays up.
📝 Code Changes
- fix: Fixes bunch of Sentry issues by @letehaha in #687
- fix: fix bunch of Sentry issues by @letehaha in #680
- chore(i18n): new Crowdin translations by @letehaha in #678
- chore(deps): bump actions/setup-node from 4.4.0 to 7.0.0 in /.github/actions/prepare-local-env by @dependabot in #686
- chore(deps): bump crowdin/github-action from 3.2.0 to 3.3.0 by @dependabot in #685
- chore(deps): bump actions/checkout from 4.4.0 to 7.0.1 by @dependabot in #684
- chore(deps): bump actions/setup-node from 4.4.0 to 7.0.0 by @dependabot in #683
- chore(deps): bump actions/download-artifact from 4.3.0 to 8.0.1 by @dependabot in #682
- chore(deps): bump appleboy/scp-action from 0.1.7 to 1.0.0 by @dependabot in #681
- feat(accounts): allow editing initial balance of manual accounts by @letehaha in 8c545420a
- feat(attachments): attach files to both legs of a transfer by @letehaha in 09e9c62c4
- feat: Improve categories watchlist widget by @letehaha in 84574acce
- feat(dashboard): give quick-menu widget settings the panel layout by @letehaha in ddaeb2d3d
- feat(i18n): add Slovak locale with Slavic three-form plurals by @letehaha in 1906b18aa
- feat(self-hosting): support Portainer stacks and document the setup by @letehaha in d6566289d
- fix(analytics): label period bars with the local month, not UTC by @letehaha in 32f368a22
- fix(transactions): keep leg types when editing a transfer via its income leg by @letehaha in d413b651a
- fix: keep cash flow widget visible when the current period is empty by @letehaha in a56cfc89d
- fix(import): reject undo of oversized bank-linked batch before queueing by @letehaha in 781440a48
- fix(docs): fix screenshot seed welcome and attachment steps by @letehaha in 8e84074ac
Full Changelog: v0.30.2...v0.30.3
v0.30.2 – Transaction reconciliation
What's Changed
🧹 Reconciliation for bank-synced transactions
In MoneyMatter you can't delete transactions that come from a bank connection. Sometimes a bank sends a wrong one anyway: the same payment twice, a card hold that was never charged, or a pending payment that sits there for weeks. Open Transactions → Optimizations → Reconciliation to clean them up.
- Merge 2 to 4 copies of the same payment on one account. You pick the copy to keep, and it takes over the budget, group and subscription links of the others.
- Remove up to 500 transactions that shouldn't be there. Your next bank sync won't bring them back.
- Stuck pending lists Enable Banking payments still pending after 7 days. Press Check with bank, then merge each one into its booked copy, keep it as booked, or remove it. A daily notification tells you when new ones get stuck.
- History lists every merge and removal. Press Restore to undo one.
Your account balance keeps following your bank. Removed transactions stop counting in your stats.
🔗 Choose where the balance gap goes when you link an account
When you link an existing account to a bank connection, the link dialog shows the difference between your MoneyMatter balance and the bank's. You decide how to cover it: one balance adjustment dated at the link, or a change to the account's opening balance. Until now MoneyMatter always changed the opening balance. For credit cards, both figures leave out the credit limit, and the account takes the credit limit your bank reports.
📊 Dashboard widgets
- Recurring payments has a chart of payments due over the next 30 days, which you can hide in the widget settings. Due and overdue payments get their own colour, and hovering a row explains its status.
- Planned lists all your planned transactions in a scrollable list, not only the nearest four. The projected balance stays in the header while you scroll.
- Latest transactions can show tags as thin colour bars. Hover a bar to see the tag name. Chips stay the default.
🗓️ Planned transactions tucked away
In the transactions table and lists, planned transactions sit behind one row that shows how many there are. Click it to expand them.
🐞 Bug fixes
- With Enable Banking and pending imports turned on, a payment could stay pending forever if your bank stopped listing it as pending before it listed the booked copy. MoneyMatter now finds the booked copy.
- Some banks flag a pending payment with the wrong direction, income instead of expense or the reverse. With Enable Banking pending imports, that left you with two rows once the payment booked. The booked copy now replaces the pending one and sets the direction.
- Importing a PDF invoice with AI failed with "Unsupported chat content part type: 'file'" when your AI connection used a custom OpenAI-compatible server such as vLLM or Ollama. Those connections now read the PDF's text, or its pages as images for scans. Other AI providers and image invoices were never affected. Thanks to @MatteGary for the report.
- FIRE milestones you had already passed (25%, 50%, 75%) showed the current month as the date you reached them. They now show the month your history first crossed each one.
- On phones, the Latest transactions, Recurring payments, Planned and Credit utilization widgets stay one cell tall. Large amounts in Balance trend, Cash flow and Net worth shorten to fit the widget.
- Budget cards and transaction group summaries shorten large amounts (12.3K) instead of wrapping them, and the minus sign stays next to the number.
- A long payee name no longer pushes the bulk edit dialog past the edge of the screen.
- Tooltips with wrapped text no longer leave empty space on the right.
📝 Code Changes
- feat: Reconciliation screen by @letehaha in #675
- fix: Fix bunch of app issues by @letehaha in #672
- chore(i18n): new Crowdin translations by @letehaha in #671
- fix(transaction-groups): compact summary amounts and keep sign inline by @letehaha in daa9881a7
- feat(transactions): collapse planned rows behind an expandable row by @letehaha in 7b4adb71a
- fix: improve empty state by @letehaha in b5025f501
- fix(budgets): compact card stat amounts and keep sign inline by @letehaha in d186184fb
- feat(dashboard): redesign recurring payments and planned widgets by @letehaha in 83ab75501
- feat(dashboard): add colour-bar tag style to Latest Transactions widget by @letehaha in 0465d25ce
- fix(dashboard): cap list widgets to 1x1 height on mobile by @letehaha in ea760f1e6
- fix(dashboard): fit widget contents on mobile by @letehaha in e1a443749
- fix(invoices): read PDF invoices on custom OpenAI-compatible AI by @letehaha in 42008e728
Full Changelog: v0.30.1...v0.30.2
v0.30.1 – Inline transaction editing
What's Changed
✏️ Edit transactions right in the table
In the MoneyMatter transactions table, click a cell to change it on the spot: date, account, category, payee, amount, note or tags. A small editor opens next to the cell. Press Enter or Save to keep the change. To open the full transaction, click the ↗ icon on its row.
Some cells stay locked. Date, account and amount on bank-synced transactions come from your bank. Transactions that belong to a portfolio, venture, vehicle or loan are edited from their own page so balances stay correct. Click a locked cell and a short note tells you why. Edits that reach beyond one cell, such as the amount of a transfer between your own accounts or of a split transaction, open the full editor. Locked cells shade when you hover over them. Turn on Always show locked cells in the table settings to shade them on every row.
🗑️ Bulk delete payees
On the Payees page, press Select, tick the payees you want gone, and delete them in one go. Choose Delete and ignore to also stop imports and bank syncs from recreating them. Their transactions stay and only lose the payee link. Payee rows on phones are more compact and show the transaction count next to the name.
⚙️ Default payment type
Set a default payment type under Settings → General. New transactions and loan payments start with it preselected.
✅ Split transactions in bulk actions
You can now select split transactions together with other rows for bulk actions, and they count toward the selection totals. Before, the checkbox on a split transaction was disabled.
🐞 Bug fixes
- On self-hosted MoneyMatter opened over plain http, importing a CSV file and saving a pivot report layout failed with an error. Both work now. The hosted app at moneymatter.app was never affected. Thanks to u/MaxLin_ on Reddit for the report.
- Chrome on Android now offers to install MoneyMatter as an app. The install prompt never appeared there before.
📝 Code Changes
- feat: Add inline cell editing to transactions table by @letehaha in #670
- feat: App improvements by @letehaha in #668
- fix(frontend): stop relying on secure-context-only crypto APIs by @letehaha in 0334019fc
- ci: run preview teardown on pull_request_target by @letehaha in 6f909057d
Full Changelog: v0.30.0...v0.30.1
v0.30.0 – FIRE planner
What's Changed
🔥 FIRE planner
MoneyMatter now has a FIRE planner under Analytics → Investments → FIRE. FIRE stands for "financial independence, retire early": the point where your savings are big enough to live off for good. The planner takes your accounts, portfolios and transactions and works out your FIRE number, how far along you are, and the month you could get there, with your age at that point if you enter your birth year.
Spending and monthly contribution start on Auto, based on your last 12 full months of transactions. Type your own figures when the automatic ones are off, and leave out categories you won't pay for once retired, such as commuting. In Assumptions, pick an annual return from a market preset such as Total World Stock or S&P 500, use one of your own portfolios' returns, or set a custom rate, then choose a withdrawal rate. Switches decide whether ventures, vehicles and loans count toward your net worth.
The page compares five FIRE types: Lean, Regular, Fat, Barista and Coast. Click Lean, Regular or Fat to make it your target, and the time to FIRE, progress bar, chart and milestones follow. The chart draws your net worth so far, the projection to your target date, and the range you'd land in if returns ran 2 points higher or lower each year. Your assumptions save on their own and stay the same on every device.
The planner is part of the Plus plan and of the 40-day trial every new account starts with. On Essential or Early Adopter, opening it starts a free 14-day trial, once per account.
📊 FIRE progress widget
Add the FIRE progress widget to your dashboard with Add to dashboard at the top of the planner, or from Add widgets. It shows your progress to the target, time to FIRE, next milestone and FIRE number, in 1×1 or 2×1 size with a Ring or Numbers style. The demo dashboard includes it too.
📖 Help center
The user guides now cover the FIRE planner and transaction groups, with screenshots.
📝 Code Changes
- feat: FIRE calculator with dashboard widget by @letehaha in #666
- docs: add transaction groups page with screenshots by @letehaha in 32bf22aa9
- fix(docs): restore lockfile entries npm 11.19 requires by @letehaha in 942c785fd
Full Changelog: v0.29.7...v0.30.0
[chore] v0.29.7 – Landing FAQ reliability and repo upkeep
What's Changed
🐞 Bug Fixes
- On the MoneyMatter homepage, a question you typed into the FAQ box sometimes hung for up to 30 seconds and then showed an error. If the first AI model is slow to answer, the FAQ now tries a backup model after a few seconds, so you still get an answer. The app itself never had this problem.
📝 Code Changes
- chore: Improved README by @letehaha in #654
- chore: Bunch of improvements and actualizations by @letehaha in #655
- fix(landing-faq): hedge a fallback model so stalled Gemini calls still answer by @letehaha in 57e706b0b
- chore(deps): bump actions/cache from 4.3.0 to 6.1.0 by @letehaha in #656
- chore(deps): bump actions/upload-artifact from 4.6.2 to 7.0.1 by @letehaha in #657
- chore(deps): bump marocchino/sticky-pull-request-comment from 2.9.4 to 3.0.5 by @letehaha in #658
- chore(deps): bump docker/login-action from 3.7.0 to 4.6.0 by @letehaha in #659
- chore(deps): bump crowdin/github-action from 2.17.1 to 3.2.0 by @letehaha in #660
- chore(deps): bump docker/login-action from 3.7.0 to 4.6.0 in /.github/actions/backend-docker-build by @letehaha in #661
- chore(deps): bump docker/login-action from 3.7.0 to 4.6.0 in /.github/actions/frontend-docker-build by @letehaha in #662
- chore(deps): bump actions/cache from 3.5.0 to 6.1.0 in /.github/actions/prepare-local-env by @letehaha in #663
Full Changelog: v0.29.6...v0.29.7
v0.29.6 – Help center at docs.moneymatter.app
What's Changed
📖 Help center
MoneyMatter has user guides at docs.moneymatter.app. They cover accounts, transactions, transfers and refunds, bank connections and CSV import, stats, and settings, with screenshots. Open them from the user menu in the sidebar, or use the Learn more links next to settings that need explaining, such as credit limits and transfer matching under Settings → General.
📝 Code Changes
Full Changelog: v0.29.5...v0.29.6
v0.29.5 – Any AI model for any feature
What's Changed
🧠 Any AI model, for any feature
Every AI model you add to MoneyMatter is now one entry you can pick for any AI feature. Under Settings → AI, add OpenAI, Claude, Gemini or OpenRouter with your own key, or point MoneyMatter at any OpenAI-compatible server. Self-hosters can connect a local model through Ollama or LM Studio. You then choose a model per feature: one for categorization, another for statement parsing, and so on. A model guide shows whether a model can read PDFs or images before you pick it for a feature that needs that. Keys and custom endpoints you saved before carry over.
🏦 Pending bank transactions now merge into their booked ones
This applies to Enable Banking connections with pending transactions turned on. A pending transaction that booked late, or came back with the counterparty's IBAN, stayed in your list next to the booked copy. MoneyMatter now matches the two and keeps one. For pairs you already have, open the bank connection and press Merge duplicates: notes and categories you set on the pending row move to the booked transaction. A pending card reservation without an IBAN only matches a booked transaction within 5 days, so an unrelated payment of the same amount weeks later stays separate. Thanks to @algedabra for reporting this.
🐞 Bug Fixes
- Loan payments in the transactions table didn't open when you clicked them, and the account column showed only one of the two accounts. They now open the loan payment dialog and show both accounts, like other transfers. The list view opened them all along. Thanks to @algedabra for reporting.
- Someone you share your household with got an error when opening a vehicle you own. They can view it now. Your own vehicles, and accounts shared one by one, were never affected. Thanks to @algedabra for reporting.
📝 Code Changes
- feat: Unify API keys and custom endpoints into AI connections by @letehaha in #651
- chore: Address Crowdin advises by @letehaha in #649
- feat(analytics): track completed invoice attachments in PostHog by @letehaha in 7802ac1b
- fix(enablebanking): match booked transactions to their pending rows by @letehaha in 3f989c83
- fix(enablebanking): limit IBAN-less pending fallback to 5 days by @letehaha in 9de8b20a
- fix(transactions): open loan payments from the table view by @letehaha in bd237963
- fix(vehicles): let household share recipients view shared vehicles by @letehaha in 7c2ddadd
- fix(landing-faq): lower Gemini thinking and track answers in PostHog by @letehaha in 706f9a41
Full Changelog: v0.29.4...v0.29.5
v0.29.4 – Smart invoice matching
What's Changed
🧾 Smart invoice matching
Drop an invoice into MoneyMatter and it reads the vendor, total, date and invoice number for you. You pick whether you paid the bill or issued it. MoneyMatter then suggests the transactions that match it, and you attach the invoice to the right one. If you haven't recorded the payment yet, you can create a transaction from the invoice with the amount, date, account and reference already filled in. For an invoice in another currency, the transaction keeps the original amount too.
Open it from the arrow next to New transaction in the header. Invoice matching is part of the Plus plan, and you can try it 5 times on any plan.
📎 Files on new transactions
You can attach files while creating a transaction. Before, you had to save the transaction first and then open it again to add a receipt.
🚀 Bring back the Quick Start guide
If you dismissed the Quick Start guide, you can turn it back on under Settings → General. The hint pointed there, but the setting was missing.
🤖 Foreign-currency amounts from AI assistants
An AI assistant connected to MoneyMatter can record a transaction's original amount and currency, such as the euro total on an invoice you pay from a dollar account. Before, you could only set this in the app.
🐞 Bug Fixes
- You create a transaction without picking a payee, and MoneyMatter recognizes the payee from the note: the payee's default tags now get added. Transactions where you picked the payee yourself, and bank-synced transactions, got their tags all along.
- A bank connection disappeared from the Accounts page once you removed its last account, so you couldn't disconnect it. The connection now stays listed until you disconnect it.
- Long balances spilled out of the collapsed sidebar, and long account names made its pop-out menus scroll sideways. The collapsed sidebar drops the totals and shortens long names.
- Self-hosting: with the landing page skipped behind a reverse proxy, opening the site sent you to the container's internal port instead of your public address. You can also set
LISTEN_PORTnow, for hosts like Synology that block the app from using port 80.
📝 Code Changes
- feat: Invoice attachment to existing transactions by @letehaha in #644
- feat(transactions): attach files on create and prefill create form from invoice by @letehaha in e17670f0
- feat(settings): add toggle to re-enable the Quick Start guide by @letehaha in 9e6bcc91
- feat(mcp): expose original amount and currency on transaction tools by @letehaha in 0557452c
- fix(payees): apply default tags for server-matched payees and return tags by id by @letehaha in 72adbadc
- fix(accounts): show bank connections that have no accounts by @letehaha in 07ce6601
- fix(sidebar): drop rail totals and truncate long names in flyouts by @letehaha in 05acb3a5
- fix(self-host): relative nginx redirects and configurable LISTEN_PORT by @letehaha in 1d3dca64
Full Changelog: v0.29.3...v0.29.4
v0.29.3 – Logos for vehicles and loans, attachments from AI assistants
What's Changed
🖼️ Logos for vehicles and loans
Vehicle and loan accounts in MoneyMatter get the same logo picker as your other accounts. Open the vehicle or loan page and click the logo to pick a brand logo, or set initials and a color.
🤖 AI assistants can attach files
An AI assistant connected to MoneyMatter can attach a file to a transaction, such as a receipt you hand it in the chat. Until now assistants could read and edit transactions but had no way to add files.
🐞 Bug Fixes
- Deleting a category deleted the split parts filed under it, even when you picked a replacement category. A category used only in splits got deleted with no prompt to reassign. The app now asks for a replacement first and moves the splits to it. Transactions filed directly under the category moved to the replacement all along.
📝 Code Changes
- feat: Let agents upload transaction attachments via upload URL by @letehaha in #640
- chore: chore(i18n): new Crowdin translations by @letehaha in #639
- feat(accounts): allow editing logos for vehicle and loan accounts by @letehaha in 504e26a5
- fix(categories): keep splits when deleting a category by @letehaha in c2b5ba49
Full Changelog: v0.29.2...v0.29.3