Release 26.5.0
· 14 min read
This release introduces powerful new reporting capabilities as well as numerous fixes:
- Experimental: Age of Money and Sankey Diagram reports
- Experimental: Custom themes expanded with five new community themes (Nord, Ilavenil, Gruvbox Light/Dark, You Need A Theme Light/Dark)
- Tax-style distribution in split transactions
Docker Tag: 26.5.0
Features
- #6685 Added Age of Money report. — thanks sztomi
- #7220 Add Sankey diagram report with two view modes (spent and budgeted) to visualize money flow through categories — thanks emiltb & andrewhumble
Enhancements
- #7116 Add Category Group support to Budget Analysis Report — thanks tabedzki
- #7217 Add "Last 30 days" date range option to custom reports live mode — thanks kenkuo
- #7257 Add option to distribute remaining amount proportionally — thanks victle
- #7335 Add BALANCE_OF function to rules formulas for other account balances — thanks StephenBrown2
- #7346 Add CLP currency — thanks vectorcrumb
- #7378 cli: account ordering, better agent instructions, fix types — thanks MatissJanis
- #7382 Add error boundary to dashboard widgets, displaying fallback UI for rendering failures. — thanks MatissJanis
- #7392 Clarify that end-to-end encryption only protects budget data, excluding bank sync tokens. — thanks MatissJanis
- #7423 Change formatting of reconcile form for clarity and ease of use. — thanks Juulz
- #7432 Add rate limiting to authentication endpoints to prevent brute-force attacks. — thanks actualbudget
- #7434 Add per-schedule custom upcoming length override, allowing each schedule to have its own "upcoming" notification window instead of using only the global setting. — thanks jreniel
- #7437 Add scoped ErrorBoundary to Rules page to contain rendering crashes. — thanks tmchow
- #7441 🎨 You Need A Theme Light, based on 2026 nYNAB light — thanks Juulz
- #7442 Add more filtering options for transactions in Spent mode of the Sankey chart — thanks emiltb
- #7447 🎨 You Need A Theme Dark, based on 2026 nYNAB dark theme colors. — thanks Juulz
- #7476 Added a new Sankey Options menu with a toggle to view values as percentages. — thanks emiltb
- #7495 Custom Themes: custom CSS overrides now persist across theme changes and show a visible indicator next to the Theme dropdown when active — thanks MatissJanis
- #7513 Add nord theme to custom catalog — thanks aadhithbala
- #7543 Added theme Ilavenil to custom theme catalog — thanks aadhithbala
- #7571 Add Gruvbox Light and Gruvbox Dark custom themes to the theme catalog. — thanks Dakyne
- #7581 API: export model types via "actual-app/api/models". — thanks MatissJanis
- #7582 Optimize Sankey chart datamodel to include income sources, allow layer filtering and better budget handling — thanks emiltb
- #7605 Make double Ctrl-f trigger browser find — thanks jfdoming
- #7610 Reimport Deleted is now on by default and persisted between imports — thanks alecbakholdin
Bugfixes
- #7242 Fix
api.updateTransaction()corrupting split parent transactions when doing partial updates — thanks lwarrenthompson - #7253 Custom Themes: improved responsiveness of the theme catalog — thanks MatissJanis
- #7269 Show confirmation dialog when editing/duplicating/deleting transfers where the other half is reconciled — thanks matt-fidd
- #7270 Fix transaction quick search incorrectly treating "?" and "%" as wildcards, causing all transactions to be returned instead of only those matching the literal character — thanks eduardopio03
- #7283 Standardise ledger scrolling when using keyboard shortcuts — thanks JSkinnerUK
- #7284 Handle normalisation of some common non-latin diacritic characters, ł, ø, ß, œ. — thanks JSkinnerUK
- #7296 Fix Net Worth graph showing a time-interval less than specified — thanks emiltb
- #7304 Fix UUID showing when switching filter operators — thanks sk10727-a11y
- #7324 Fixes transaction query by tag when tag starts with $ — thanks gust0717
- #7347 Update code to record timestamp from account linking using handleSyncResponse. — thanks JkBoyo
- #7356 Fix custom report editor retaining unsaved settings when navigating between routes. — thanks tmchow
- #7368 Allow end to end encryption of budget files in the desktop apps — thanks pickle-and-pork
- #7373 Fix date variable in rule formulas — thanks youngcw
- #7381 Fix crash when viewing account ledger with expired recurring schedules. — thanks MatissJanis
- #7428 Fix path traversal vulnerability in file upload sanitization — thanks MatissJanis
- #7453 Fixes unlocking on child split transactions — thanks JSkinnerUK
- #7460 Fix bug where total selected balance is not shown when it is zero — thanks Kennedy242
- #7468 Ship .d.ts declaration files from actual-app/core so that downstream API consumers with strict TypeScript settings no longer get type errors. — thanks MatissJanis
- #7478 Resolve subpath imports when running server locally — thanks MatissJanis
- #7487 Fix bank sync account linking modal being disabled when relinking existing accounts — thanks matt-fidd
- #7496 Fixes inconsistency between web UI and mobile UI where make transfer is not available on uncategorized transaction menu. — thanks tempiz
- #7515 Fix unreadable "Use Regular Expressions" checkbox label in the notes find-and-replace modal by applying the correct theme color. — thanks JasmineLCY
- #7522 Fix runImport failing when ACTUAL_DATA_DIR environment variable is not set — thanks matt-fidd
- #7524 Fix build error with typescript v6 — thanks matt-fidd
- #7532 Fix error when clearing the payee field of a transaction — thanks matt-fidd
- #7564 Fix Docker container failing to start due to unresolved workspace dependencies. — thanks MatissJanis
- #7565 crdt: fix nightly publishing of the packages — thanks MatissJanis
- #7572 Fix transaction row drag interfering with inline text edits. — thanks StephenBrown2
- #7608 Disallow reconfiguring OpenID after initialization — thanks jfdoming
- #7619 Sankey card should follow report settings — thanks matt-fidd
- #7623 Fix infinite loop when applying remainder templates with an amount that can not be divided — thanks matt-fidd
- #7632 Fix Sankey income being shown as spent money, when payee was not set — thanks emiltb
Maintenance
- #6815 Skip release notes generation for pull requests that contain only documentation changes. — thanks StephenBrown2
- #7254 Remove special "*.browser.ts" file extension; remove file resolutions via alias (prefer conditions) — thanks MatissJanis
- #7281 Fix yarn generate:icons command — thanks JSkinnerUK
- #7344 Add claude code worktree folder to .gitignore — thanks MatissJanis
- #7350 Remove some unused/unnecessary dependencies — thanks matt-fidd
- #7352 Replace nordigen-node with our own GoCardless implementation — thanks matt-fidd
- #7354 Fix useless assignments to local variables — thanks matt-fidd
- #7355 Pin minimatch versions to resolve vulnerability reports — thanks matt-fidd
- #7360 Add documentation for bypassing self-signed SSL certificate verification in CLI usage. — thanks MatissJanis
- #7367 Bump electron dependencies — thanks dependabot & matt-fidd
- #7380 Bump lodash from 4.17.23 to 4.18.1 — thanks dependabot
- #7383 Improved module resolution for better platform compatibility. — thanks MatissJanis
- #7393 Improve post-checkout hook to automatically install dependencies for newly created git worktrees. — thanks MatissJanis
- #7397 Add documentation for configuring Docker health checks with self-signed certificates using
NODE_EXTRA_CA_CERTS. — thanks Kennedy242 - #7398 Bump vite from 8.0.0 to 8.0.5 — thanks dependabot
- #7406 Consolidate all GitHub actions into the main repository — thanks matt-fidd
- #7407 Improve release note actions — thanks matt-fidd
- #7408 Improve release automation to generate docs pages directly from release notes — thanks matt-fidd
- #7411 Fix redirect to login page after signing out of a server — thanks matt-fidd
- #7412 Moving View styles into the component library — thanks MikesGlitch
- #7417 Migrate svg add-attribute plugin to typescript — thanks JSkinnerUK
- #7418 Change release automation to stop us from requiring a merge freeze every month — thanks matt-fidd
- #7429 Migrate loot-core internal imports to use Node.js subpath imports (
#server/*,#shared/*, etc.) — thanks MatissJanis - #7430 Pin check-spelling GitHub Actions to commit SHAs in docs-spelling workflow — thanks MatissJanis
- #7431 Update browserslist caniuse-lite database — thanks MatissJanis
- #7433 Fix script injection patterns in GitHub Actions workflows — thanks actualbudget
- #7445 Update Docs to the latest Docusaurus — thanks MikesGlitch
- #7446 Standardise module imports in desktop-client — thanks MatissJanis
- #7448 Add input validation for release notes and refactor credential handling in GitHub workflows. — thanks MatissJanis
- #7461 Update pre-commit hook configuration so it auto-executes. — thanks MatissJanis
- #7462 Standardise module imports across all packages — thanks MatissJanis
- #7463 Upgrade oxlint, oxfmt, and oxlint-tsgolint to latest versions. — thanks MatissJanis
- #7465 Add GitHub Actions check step via
zizmor— thanks jfdoming - #7466 Refactor browser mode configuration to use
--mode=browserinstead of an environment variable. — thanks MatissJanis - #7467 Add ESLint rule to enforce architectural boundaries and prevent import violations. — thanks MatissJanis
- #7469 Add publishConfig.imports sync validator with pre-commit integration — thanks MatissJanis
- #7480 Clean up installed dependencies — thanks MatissJanis
- #7484 Add desktop app test to check sync server status — thanks MikesGlitch
- #7490 Fix the Electron Playwright VRT setup — thanks MikesGlitch
- #7493 Update sync error message — thanks youngcw
- #7494 Added desktop app tests to ensure budget export saves to disk — thanks MikesGlitch
- #7497 Add scoped error boundaries to prevent feature-level crashes from taking down the entire app — thanks tempiz
- #7499 Remove duplicate exclusion of package.json and package-lock.json from documentation spelling checks. — thanks MatissJanis
- #7503 Optimize CI e2e tests by using pre-built bundles, reducing build time. — thanks MatissJanis
- #7506 Bump various dependencies — thanks matt-fidd
- #7507 Bump GitHub actions — thanks matt-fidd
- #7508 Upgrade eslint to v10 and improve lint plugin performance — thanks matt-fidd
- #7520 Clean up some GitHub code quality findings — thanks matt-fidd
- #7523 Fix potentially inconsistent state updates — thanks matt-fidd
- #7527 Consolidate the internal naming patterns used for budget types — thanks matt-fidd
- #7528 Remove unused dependencies — thanks matt-fidd
- #7529 Remove some dependencies that can now be replaced by Node.js builtins — thanks matt-fidd
- #7533 Run
zizmorauto-fix tool — thanks jfdoming - #7534 crdt: typecheck test files; fix lint issues — thanks MatissJanis
- #7536 Update storybook logo and fonts to match the docs site — thanks MikesGlitch
- #7537 Migrate CRDT package build to Vite and generate bundle statistics for CI/CD. — thanks MatissJanis
- #7538 Disable bundle minification so production error messages and stack traces are human-readable — thanks actualbudget
- #7541 Server: consume latest version of crdt package — thanks MatissJanis
- #7547 Disable fail-fast in Electron build workflows to allow all matrix jobs to complete independently. — thanks MatissJanis
- #7548 docs: AI usage policy for contributors — thanks MatissJanis
- #7551 Share the CI dependency install across
check.ymlandbuild.ymljobs via a single upstreamsetupjob to cut redundantyarn installruns on cache-cold workflow runs. — thanks actualbudget - #7553 Remove guidance on redundant inline type imports from TypeScript code style documentation. — thanks MatissJanis
- #7555 Reduce permissions in
staleworkflow — thanks jfdoming - #7556 Enable Trusted Publishing for nightly
npmpackages — thanks jfdoming - #7566 Custom Themes: nightly scan to catch broken themes — thanks MatissJanis
- #7574 Fix trusted publishing by installing npm version 11.5.1 — thanks jfdoming
- #7577 Update nightly package publishing workflow to use Node.js 24 — thanks jfdoming
- #7578 Add repository details to package.json files — thanks matt-fidd
- #7579 Enable trusted publishing for release
npmpackages — thanks jfdoming - #7583 Consolidate release and nightly npm publishing workflow — thanks jfdoming
- #7587 Switch from tsgo development channel to beta — thanks matt-fidd
- #7595 Notify Discord when the nightly custom theme catalog scan fails. — thanks MatissJanis
- #7606 Migrate file service to TypeScript — thanks jfdoming
- #7609 Enable stricter electron build options — thanks jfdoming
- #7613 Bump postcss from 8.5.8 to 8.5.10 — thanks jfdoming
- #7620 Increase test coverage for budget templates — thanks matt-fidd
- #7635 Fix release note generation script failing when conflicting changes are present — thanks matt-fidd
- #7640 Make release note generation script respect cherry picked commits — thanks matt-fidd
