mirror of
https://github.com/actualbudget/actual.git
synced 2026-05-06 07:01:45 -05:00
Open
opened 2026-04-30 11:49:09 -05:00 by GiteaMirror
·
48 comments
No Branch/Tag Specified
master
claude/hide-default-categories-1cwBZ
matiss/crdt-source-loading
youngcw/unlock-duplicates
matiss/crdt-protobuf
release/26.5.0
claude/update-issue-template-ykMNn
claude/fix-issue-7667-DPXi3
cursor/formula-feedback-improvements-4223
cursor/resolve-pr-7449-ee11
claude/fix-typescript-build-error-JPtZ5
jfdoming/api-tokens-part-3
jfdoming/api-tokens-part-2
jfdoming/api-tokens-part-1
claude/speed-up-vrt-workflow-ZAyI5
claude/crdt-version-auto-publish-Ph1BH
copilot/add-repository-configs-to-packages
worktree-compressed-drifting-ritchie
worktree-mellow-strolling-dawn
matiss/browser-api
claude/api-consumer-verification-kfz1K
feature/enable-banking
cursor/transaction-table-rewrite-f077
pr-7454
claude/fix-issue-7410-LLLQ4
release/v100.0.0
revert-7350-trim-deps
revert-7220-sankey-report
revert-7242-fix/split-parent-update-corruption
revert-7281-generate-icons
claude/electron-to-tauri-migration-LjBN8
worktree-remotion
release/vv26.4.0-pre
claude/browser-compatible-api-QbhHh
claude/improve-cli-transactions-waTUY
claude/publish-react-native-ios-j8qoT
js-proxy
claude/fix-flaky-ci-job-5gDdz
react-query-rules
react-query-useSchedules
claude/nightly-theme-validation-scan-DzOGD
claude/debug-simplefin-error-ZuKzB
matiss/desktop-client-subpath-imports
claude/fix-simplefin-ssrf-T31gX
claude/release-notes-validation-X7rvR
add-claude-github-actions-1772738270730
cursor/sync-performance-notification-9899
react-query-prefs
matiss/chunked-sync-and-progress-ux
v26.2.1
copilot/sub-pr-6880
fix-react-query-clear-on-close-budget
copilot/sub-pr-6140
feat/auto-note
feat/scoped-bank-sync
cursor/desktop-transactions-react-table-1d0c
fix-exhaustive-deps-App
copilot/fix-find-replace-bug
release/v26.2.0-pre
matiss/browser-tests
mobile-fix-drag-and-drop-across-groups
budget-table-v2
PayeeAutocomplete2
pglite
bugfix/plugins/fix-plugins-sw
feat/plugins/plugins-core-package
prerelease
matiss/unicode-minus-fix
cursor/fix-actual-github-issue-6206-gemini-3-pro-preview-9c37
TransactionFormPage
cursor/implement-mortgage-and-loan-account-type-78ca
tests-update-fill-with-pressSequentially
mobile/link-modal
deps/25.11
cursor/fix-update-vrt-apply-ci-job-dispatch-b324
sync-server-plugins
cursor/propose-patch-for-github-issue-5680-2a18
fix/compiler-preserve-inner-dollar-escapes
cursor/analyze-actual-budget-issue-and-propose-fix-5b70
coderabbitai/docstrings/0c070e5
cursor/add-wip-prefix-and-comment-to-prs-d78d
jfdoming/08-21-auto-focus-on-navigate-in-all-browsers
show-totals-on-mobile-budget-banners
allow-child-transactions-make-transfer
mobile-calculator-keyboard
payee-geolocation
enhance/restore_scroll_position
dm-fix-second-click-on-mobile-new-transaction-2
scrollToLocationBudget
alert-autofix-38
tsconfig-composite
mobile-fix-uncategorized-transactions-on-tracking-budgets
server-budget-handlers
fix-sql-injection-in-cleanup-template
non-chrome-draggable-workaround
mobile-budget-page-swipe-navigation
ts-db-all
stable
dark-theme-with-brand-colors
fix-mobile-delete-group
ts-db-select
UnderKoen/reconcile-context-menu
master-before-server-merge
v25.2.1
ts-runQuery
rename-redux-hooks
UnderKoen/3557-persist-state-in-history
remove-redux-CLOSE_BUDGET
fix-exhaustive-deps-errors-FinancesApp
redux-toolkit-createSlice-backup
accounts-function-component
ts-useSplitsExpanded
loot-core-server-package
useTransactios-in-TransactionEdit
react-aria-input
move-redux-to-desktop-client
QueryState-type
fix-themes-applied-late
mobile-vrts
revert-3295-spendingCardFix
react-aria-button-4
split-payee-on-mobile
twk3/pin-apis-crdt
notes-tag-autocomplete
ts-LoadBackup
dnd-kit
package-upgrades
v26.5.0
v26.4.0
v26.3.0
v26.2.1
v26.2.0
v26.1.0
v25.12.0
v25.11.0
v25.10.0
v25.9.0
v25.8.0
v25.7.1
v25.7.0
v25.6.1
v25.6.0
v25.5.0
v25.4.0
v25.3.1
v25.3.0
v25.2.1
v25.2.0
v25.1.0
v24.12.0
v24.11.0
v24.10.1
v24.10.0
v24.9.0
v24.8.0
v24.7.0
v24.6.0
v24.5.0
v24.4.0
v24.3.0
v24.2.0
v24.1.0
v23.12.0
v23.11.0
v23.10.0
v23.9.0
v23.8.1
v23.8.0
v23.7.2
v23.7.1
v23.7.0
v23.6.0
v23.5.0
v23.4.2
v23.4.1
v23.4.0
v23.3.2
v23.3.0
v23.2.9
v23.2.5
v23.1.12
v22.12.9
Labels
Clear labels
AI generated
API
bank sync
budgeting
bug
can’t replicate
dependencies
docker
documentation
electron
experimental feature
feature
feedback
goal templates
good first issue
help wanted
importers
maintenance
needs info
needs testing
needs triage
needs votes
openid
payees
pull-request
regression
reports
responsive
rules
schedules
server
✨ merged
split transactions
tech debt
theme
transaction import
transaction reconciliation
transactions
translations
upstream
user interface
✅ approved
wontfix
Mirrored from GitHub Pull Request
Milestone
No items
No Milestone
Projects
Clear projects
No project
No Assignees
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: github-starred/actual#49859
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @shaankhosla on GitHub (Nov 16, 2023).
Original GitHub issue: https://github.com/actualbudget/actual/issues/1919
The Sankey chart in Actual Budget has been requested multiple times in the last couple of years and was re-released as an experimental feature in version 2026.5.0.
Please see this comment below for an overview of currently known bugs and requests for enhancements due to be implemented.
Feel free to add any feedback, bug reports or ideas for improvements.
@carkom commented on GitHub (Nov 17, 2023):
This is a cool graph, I love the idea!
It needs to add theme colors and privacy blocks to enable those features for this chart. Needs done on chart page as well as overview card. Cheers!
@shaankhosla commented on GitHub (Nov 17, 2023):
Great points, agreed. I'll add those above.
@Redbox3070 commented on GitHub (Nov 18, 2023):
Sick chart!
I would like to have percentage % on Budget instead of the absolute value in labels. Absolute value could be shown on hover.
I think the choice of displaying <1k was due to space constraints but is not that useful if most of your categories are below 1k. This one is a great example of more meaningful labels https://i.redd.it/x4xib51xxsv21.png
@Akellade commented on GitHub (Nov 21, 2023):
It would be neat if there was a bit more control of the level of detail shown, For instance toggling showing the final categories
right now it's shown as :
Income categories > Budget > Outgoing Groups > Outgoing categories.
It's quite a good graph for hiding the outgoing categories or even income categories to just show how the budget was used at a higher level.
@MatissJanis commented on GitHub (Nov 27, 2023):
Nice to haves:
@MatissJanis commented on GitHub (Nov 27, 2023):
Bug (possibly applicable to other reports too):
payees not showing up when filtering
https://github.com/actualbudget/actual/assets/886567/6ccd29c5-a7f0-47d9-9475-a1def6b8d32a
@Teprifer commented on GitHub (Dec 2, 2023):
Looks nifty, thanks for working on this.
My 2 cents:
Bigger font for the labels, both category/sources and for the actual amount
Percentages beside label(or amount)
I notice the right side of budget the output doesn't extend the full way down, is this money added to the budget but not spent? If so I'd create a ghost category or a label to indicate this, as otherwise it looks like something is missing.
Ditto for indicating un-budgeted funds.
@Teprifer commented on GitHub (Dec 3, 2023):
Feature request, option to end the graph at Category Group level. This will allow better scaling and a nice high level view.
@leouzz commented on GitHub (Jan 5, 2024):
All the incoms should flow insider a container "income". Then incombe + residual budget (previous periodo) = budget... Then add 1 output "remaining budget" (not spent)
@MatissJanis commented on GitHub (Jan 20, 2024):
@shaankhosla what's the plan with the sankey graph? If we can't get it in as a stable feature I'd be inclined to cut it. Experimental features aren't meant to live around forever.
@youngcw commented on GitHub (Jan 21, 2024):
I think the only thing that needs an update would be the dark mode colors. Everything else seems to be just nice to have additions.
@shaankhosla commented on GitHub (Jan 22, 2024):
Yep I agree, theme colors and the privacy blocks are critical. I'll work on adding those.
@egelmex commented on GitHub (Jan 23, 2024):
Enjoying the sankey report, it's really handy to see if my catagories are roughly sane, if one gets too big like I am throwing things in general I can see at a glance that it might need splitting. Came here to say privacy bloicks are not working, but looks like that's already known. Wanted to show off the feature but not the values .
@Redbox3070 commented on GitHub (Jan 25, 2024):
I have an issue, the income from my employer (payee "employer inc") goes to 2 different accounts ("account a", "account b") every month. Unfortunately on the sankey it only shows income that flows to "account b". My workaround is to set 2 different payees.
I also believe that showing "<1k" makes the category breakdown cluttered and meaningless. The easiest solution would be to add decimal, "0.9k" uses the same space but is way more meaningful. Percentages would work well too.
@jamescostian commented on GitHub (Feb 9, 2024):
I'm wondering if there's a small bug in how the expense categories are sorted. I have 2 expense groups and when it branches off of them to show the individual expense categories in the pic above, they mostly are sorted like "categories from the first group first (sorted by amount descending), then categories from the second group (sorted by amount descending)". However, the top red arrow shows a time when this trend is broken, making it seem like the real rule is "categories are sorted by amount spent, descending, with no care given to group". But looking at my next red arrow, we see 2 more lines that very clearly should be moved up by that logic.
But the bigger concern I have is missing data - I have 15 expense categories, yet the above sankey chart only shows 14. I'm not sure why. The missing category is a bit on the smaller side but there are smaller ones in its same expense group.
After some manual testing, I've found a way to get the 15th category to reveal itself - the final month dropdown cannot be set to this month or the month before, but the one before (December) or earlier, and the initial month dropdown has the same behavior but in reverse (my first entry is in May 2021, I must set the initial date to July 2021 or later). Using these settings allowed me to get this output (the category that was missing is the one the tip of the arrow just barely touches):
You also might notice another interesting artifact in the above screenshot - that previously missing category is actually a bit larger than the category above it. You can see it visually in this screenshot, and the numbers on the far right of the sankey chart confirm it. Yet, it is somehow sorted to be lower. Not sure how relevant this is, but fwiw, there are a non-trivial amount of deposits in that category in addition to expenses in it - perhaps it's getting confused there?
@niko123456000 commented on GitHub (Feb 16, 2024):
I would like all the "income" to come from the Income category, instead of from the Payee. The reason is because my payee names are often different and it's a hassle trying to standardise the payee name of deposits just so it appears properly in the Sankey diagram. I think using the Category is a better way. Does anyone agree or have another suggestion?
@Teprifer commented on GitHub (Feb 16, 2024):
I think it's a good idea, but needing to keep in mind some people may want to know the proportion of their income sources. Maybe a 'group income sources' toggle?/ed/ Actually in hindsight for my comment, it doesn't make sense they aren't grouped by category in the first place given the rest is by category. If people want to represent different sources, they likely already have different categories.
@MatissJanis commented on GitHub (Feb 25, 2024):
👋 This feature hasn't been worked on in a very long time. As per the new experimental feature flag policy - we'll be removing it soon unless someone picks it up again.
@sandu-c commented on GitHub (Apr 7, 2024):
very sorry to hear that, this was an awesome report chart
@SamRodkey commented on GitHub (Jun 1, 2024):
I miss this feature! I feel like it was the first report that actually helped me get a handle on the big picture!
@aChrisYouKnow commented on GitHub (Jun 3, 2024):
Fingers crossed someone can bring it back
@Treawlony commented on GitHub (Nov 26, 2024):
For what it worth, I'd like to bump it too.
@CrO2Cl2 commented on GitHub (Dec 8, 2024):
Bumping this feature up, this is such a great chart
@dkhalife commented on GitHub (Dec 12, 2024):
I'm ramping up on the codebase and a big fan of this type of chart. I intend to reimplement this feature once I've learned enough about the codebase
@matt-fidd commented on GitHub (Apr 8, 2026):
@emiltb just in case you weren't following this issue already :)
it would be great if I could filter like normal, eg to take out transactions with certain tags, or from certain payees.
@emiltb commented on GitHub (Apr 8, 2026):
@matt-fidd Thank you, I made sure to subscribe to this, when I saw your comment on the PR yesterday.
I agree with regards to filtering transactions. There is a bit thinking that has to go into how to best present it to the user, as the applicable filters for transaction and budget are different, i.e. the budget does not have tags or payees. I removed a lot of filtering options initially, to make the options similar for Spent and Budgeted.
What is the preferred workflow for adapting to comments in here? Should I just make several smaller PRs with improvements, as feedback comes in? Or should I collect things into a larger PR, that we merge towards the end of the month?
@matt-fidd commented on GitHub (Apr 8, 2026):
Makes sense, thanks for your work on this already, it's looking good!
We're easy either way. Smaller PRs are generally easier to review and test, so will get merged faster. Larger PRs move a bit slower, especially towards the end of the month.
@JTT900 commented on GitHub (Apr 11, 2026):
Could not find option to show values as percentages and keep absolute values on mouseover as mentioned in an earlier suggestion here.
@emiltb commented on GitHub (Apr 11, 2026):
I could see the usefulness of that. Note that the comment you are referencing is >2 years old from a previous PR.
I think there could be suggestions for more boolean toggles, but don't want to clutter the UI. I'm considering implementing a menu like the Options menu in Custom reports (obviously not the same options, but just to illustrate the concept).
A toggle to view percentages instead of absolute values would fit well into that.
Another suggestion I saw somewhere, was to also include an income layer. If we do that, I think it needs to be implemented in two ways:
However, I think that showing the income layer should also be for the user to toggle. For me personally, 99% of the money i spend come from the same on-budget account, so showing that as part of the graph just takes up unnecessary space
@expeditus303 commented on GitHub (Apr 15, 2026):
For the Sankey chart to work well, it's essential to visualize the income flow as well.
Not just expenses. Without income as the starting node, the diagram loses much of its value as a cash flow visualization tool.
@emiltb commented on GitHub (Apr 16, 2026):
@expeditus303 Can you elaborate a bit about how you would like to see it implemented? Your comment is a bit vague in the context of the data available in Actual. I added some thoughts on it in a comment above, but I'm not sure if the suggested approaches are the best, or some other way would be more informative.
@aChrisYouKnow commented on GitHub (Apr 16, 2026):
+1 to @expeditus303's comment on visualizing the income flow. The real value of Sankey charts for personal finance is having enough flexibility to define both the inputs and the outputs are for a given view.
For example, one view might show all income sources (salaries, investment proceeds, other income) flowing into broad buckets like taxes, retirement, healthcare, and discretionary spending, etc. A second chart might take just the discretionary spending bucket as the input (maybe in this case, a category group), and break it down into the individual categories (restaurants, groceries, subscriptions, etc). Or, maybe another chart would go directly from detailed input categories to detailed output categories and skip category groups.
This kind of drill down flexibility, combined with the filtering @matt-fidd mentioned above is what makes the Sankey chart feature super useful. Easy timeframe switching is also important; being able to see how the story changes when looking at last month's data, vs last years, vs all time, etc.
I've been wanting to switch away from Monarch to ActualBudget, but the Sankey charts were the main thing holding me back. Excited to see activity on this issue! Would be happy to test / provide feedback.
@emiltb commented on GitHub (Apr 16, 2026):
@aChrisYouKnow I agree with many of the points you are making. I'm not sure all the things you mention can be done with how data is structured in Actual, but let's see how close we can come.
The filtering mentioned has already been implemented.
I could imagine allowing the users to select which of four layers they want to see:
Income flows into accounts and out from them, so I'm not sure a view of the flow directly from income category to spent category group makes sense. But that might also not be what you mean.
Again, money flows through accounts, so I'm not sure it makes sense to skip that layer.
If you could post some screenshots of examples from the app you mentioned, that would be helpful.
Are you missing anything in this regard in the current implementation? It has exactly the same period selection options as other reports.
Note that you can view the most recent edition in the deployment preview from the last branch related to this, if you don't have the possibility of spinning up an edge image: https://deploy-preview-7476.demo.actualbudget.org/
Edit: I just had an idea for how to structure the data in order to achieve the flexibility you request. I will try something out in the weekend.
@aChrisYouKnow commented on GitHub (Apr 16, 2026):
I started drafting this before I caught your updated edit @emiltb, however, here are some examples I put together. I didn't use screenshots from Monarch for privacy reasons, but I had AI generate some arbitrary example data.
Below are four sankey charts. You can paste the text into the 'inputs' box of https://sankeymatic.com/build/ and hit 'show' to visualize them.
The first contains only category groups. Each of these category groups could be subdivided into their individual categories.
Chart 1 Data:
Salary [58000] Annual Income
Other Deposits [1000] Annual Income
Investment income [3000] Annual Income
Side hustle [3000] Annual Income
Bank interest [2000] Annual Income
Annual Income [12300] Taxes
Annual Income [6000] Healthcare
Annual Income [24000] Living Expenses
Annual Income [5200] Retirement
Annual Income [6500] Food and Drink
Annual Income [1600] Shopping
Annual Income [3500] Transportation
Annual Income [1100] Charitable giving
Annual Income [1100] Entertainment
Annual Income [2700] Tech related
Annual Income [3000] Savings
Chart 1 Example output:
The next shows what happens if you plot just the categories that make up Salary.
Chart 2 Data:
Take-home Salary [30500] Salary
Federal Tax [7500] Salary
State Tax [4800] Salary
Social Security [5000] Salary
Medicare [1200] Salary
HSA Contributions [2800] Salary
Retirement Fund [4800] Salary
Benefits [1400] Salary
Chart 2 Example output:
Next is if you show the categories that makes up Transportation
Chart 3 Data:
Transportation [1500] Gas
Transportation [900] Vehicle Lease
Transportation [400] Vehicle Maintenance
Transportation [300] Parking
Transportation [240] Flights
Transportation [160] Tolls
Chart 3 Example output:
These can all be combined into one, but it starts to get messy.
It getting messy is why it is important to be able to choose your inputs and outputs, and use filtering, to only see what you want to see
Chart 4 Data:
// ── Layer 1: Components flowing INTO Salary ──
Take-home Salary [30500] Salary
Federal Tax [7500] Salary
State Tax [4800] Salary
Social Security [5000] Salary
Medicare [1200] Salary
HSA Contributions [2800] Salary
Retirement Fund [4800] Salary
Benefits [1400] Salary
// ── Layer 2: Income sources flowing INTO Annual Income ──
Salary [58000] Annual Income
Other Deposits [1000] Annual Income
Investment income [3000] Annual Income
Side hustle [3000] Annual Income
Bank interest [2000] Annual Income
// ── Layer 3: Category groups flowing OUT of Annual Income ──
Annual Income [12300] Taxes
Annual Income [6000] Healthcare
Annual Income [24000] Living Expenses
Annual Income [5200] Retirement
Annual Income [6500] Food and Drink
Annual Income [1600] Shopping
Annual Income [3500] Transportation
Annual Income [1100] Charitable giving
Annual Income [1100] Entertainment
Annual Income [2700] Tech related
Annual Income [3000] Savings
// ── Layer 4: Transportation splitting into subcategories ──
Transportation [1500] Gas
Transportation [1000] Vehicle Lease
Transportation [500] Vehicle Maintenance
Transportation [300] Parking
Transportation [100] Flights
Transportation [100] Tolls
Chart 4 Example output:
Lastly being able to use filters to choose both the input side of the Sankey Chart, as well as the output side, and see if the amounts match up is a great double check of your transaction data. For example, all of the tax withholdings from my paycheck going in, should match all my tax payments plus any refunds on the outgoing side. These data show up in separate places, and should match. Any discrepancy in the input and output data of the Sankey Chart would ideally go into an "other" category that makes it easy to see what dollar amount of imbalance there is.
Let me know if that type of usage makes sense, or if any further examples would be helpful.
Thanks for the tip on the deployment preview option, I wasn't aware of that. I look forward to playing around with that more.
@aChrisYouKnow commented on GitHub (Apr 17, 2026):
I should add that SankeyMATIC is open source as well, if anyone wanted to see how that implementation works: https://github.com/nowthis/sankeymatic
@emiltb commented on GitHub (Apr 17, 2026):
@aChrisYouKnow I see the points you are making. Thanks for the figures, that was helpful for inspiration. I'm working on restructuring the data to make it easier to work with different layers/node types. This should make it easier to include the entire flow from payees/income to categories.
I have something working right now, but it is not quite polished enough yet, to be put online :-)
The 'Spent' view can show the entire flow: Income payees > Income categories > Accounts > Category Groups > Categories.

The 'Budgeted' view similarly shows: Income categories > Available income > Category Groups > Categories. It takes care of any money held from the month prior to the selected range or held for the month after the selected range and any overspent amounts, making sure that all income is accounted for in the graph for the selected period.

Next up is making sure that the user can then select a subset range of levels (i.e. Income categories > Accounts > Category Groups or Category Groups > Categories), to "zoom in" on the part they are interested in. I just need to figure out a good way to do that in the UI.
Regarding this comment, I don't really think that can be done. As you say, they show up in different places and I don't think the data is available in Actual to match it up automatically. Also - I need to create 'Other' nodes in order to group small categories, otherwise the graph becomes unreadable on when there are too many.
@emiltb commented on GitHub (Apr 21, 2026):
I have opened a PR #7582 now (still needs to pass CI and other checks before a real review). But it has a deploy preview ready, where you can test the new functionality I have implemented: https://deploy-preview-7582.demo.actualbudget.org/
I would be very happy to receive feedback on this, since it's basically a full rewrite of the underlying datamodel and everything that builds on that.
@calculuschild commented on GitHub (Apr 21, 2026):
Wild, I came searching for this functionality and see a PR was made literally minutes ago.
Hope this gets added!
@JTT900 commented on GitHub (Apr 24, 2026):
After playing around with the demo it is looking really great, amazing work!
Hopefully there is a way to get your set levels or range to show without going into the report itself
@x-rous commented on GitHub (Apr 26, 2026):
@emiltb does it support Category Group filtering?
Edit: I tested and it does, thanks a ton!
@emiltb commented on GitHub (Apr 26, 2026):
Yes, that will be fixed in the 2026.5 release, so the dashboard card will reflect the layers in the report.
@aChrisYouKnow commented on GitHub (Apr 26, 2026):
Sorry for the delay @emiltb. Spent some time playing with the update this weekend. I was trying to recreate this Sankey Chart:
To do so I created the following new income categories under Budget:
Take-home Salary
Federal Tax
State Tax
Social Security
Medicare
HSA Contributions
Retirement Fund
Benefits
Other Deposits
Investment income
Side hustle
Bank interest
I created the following category groups:
Taxes
Healthcare
Living Expenses
Retirement
Food and Drink
Shopping
Transportation
Charitable giving
Entertainment
Tech related
Savings
Under each category group, I still needed a category, so I kept the name the same and added a -General for now.
Under Transportation, I added the following categories:
Gas
Vehicle Lease
Vehicle Maintenance
Parking
Flights
Tolls
I added the following transactions into a new account called Test-Account-01, and they can be found below
Test-Account-01.csv
I deleted all other April 2026 transactions, so the Test-Account-01 transactions would be the only ones in the Sankey Chart when choosing the range April 2026 to April 2026.
I chose this Sankey Chart view (Income category to Category):
I expected to see a plot somewhat similar to the screenshot at the top of this comment. Instead I see this:
Why is account still being showed if "Income category" is selected and not "Account"?
Also, why is Transportation showing up as "Other" instead of "Transportation?
Below is the view for Income category to category group:

Overall, it seems very close. I think if the income category option did show the income categories, it would have everything I had hoped for. The filtering appears to work great. I can tag transactions and filter in and out on those tags, filter in or out on category groups. I think the only confusing behavior is the income group display. Is it possible to change it so the income category groups get displayed instead of the account name?
Thanks for all of your work on this!
Edit: here is the full ActualBudget data export file if you want to import it and recreate what I was looking at:
2026-04-26-Test Budget.zip
@emiltb commented on GitHub (Apr 26, 2026):
@aChrisYouKnow Thanks for the test budget file. I just had a brief look, and something definitely looks wrong - I have not seen something like this in my testing. The Income Category group should appear to the left of the account, so the links would flow from income through the account and then to the categories that money are spent in. I don't know why the Income shows up as an output-node in your example and will need to do some digging. It should really show the income category towards the left, not the account.
Transportation shows up as Other, because you have a lot of categories and have selected "Show 15" in the settings on the top. If you hover your mouse over it, you can see which categories and amounts were collapsed into the single link.
Edit: The strange Spent graph you showed, occurred because the payee field is empty for all your transactions. Due to a bug in the code, the income transactions were treated as spent money instead of income in that case. I have submitted a fix, which makes sure that income is treated correctly, even if the payee field is blank.
@aChrisYouKnow commented on GitHub (Apr 27, 2026):
Thanks @emiltb, confirmed the fix works.
As it stands now, it works great. Really well done.
One piece of optional feedback, if there was a way to remove the accounts chunk in the middle when going from "Income category" to "Category" (or even toggle it on or off somehow), that could save a decent amount of space, and also make it far less busy if someone had a lot of accounts. The idea would be that all income categories would flow into an "Income" node, and then out to the category groups. No need to split it up by account in the middle section if someone didn't care which particular accounts the funds flowed through, but rather just wanted to see the visualization of the inputs and the outputs. The option to have the accounts in the middle is really nice, but if the account section could be toggled on and off without too much extra work, that would be ideal.
[Edit: maybe the GUI for the above looks like three drop down menus. The first with Payee, Income Category, Account, Category Group. The second dropdown has Account, Category Group, Category, Skip/Blank/Empty. The third dropdown has Account, Category Group. That way someone can select if they want the Account section between Income Category and Category.]
Lastly, changing the page zoom in or out does a great job at changing the look of the Sankey Chart. Below are screenshots from 3 different zoom levels. Changing the zoom on the browser window to get the look you find most useful might be worthy of a brief user tip at the bottom of the page in case someone doesn't think to try that.
@matt-fidd commented on GitHub (Apr 27, 2026):
I'd love that, and it would make the spent view far more useful for me. All money flows into my current accounts, but out of my credit cards so the graph does not flow as you might expect. That would be fixed by being able to hide the accounts in the middle or replace with a unified income node
@emiltb commented on GitHub (Apr 27, 2026):
Putting another toggle in the Options menu to group all accounts in a single Income node is not hard to do, and I can definitely see why that makes sense. I'll make sure to implement that.
Another thing that I am aware of, that needs more work is node layer placement (I mentioned it in one of the PR comments). Recharts Sankey graph does not support placing nodes at a fixed layer, so in some cases I add some extra, hidden nodes (i.e. to ensure that an account which has spending but no income ends up at the right layer). I'm pretty convinced that there are edge cases that are not covered right now, so if you have a budget which shows nodes that seem to be at the wrong layer or links that span between more than one layer, it will be very helpful if you can provide a test budget here.
Regarding the zoom level, I'm not sure what the best approach is. I thought about doing something with dynamic scaling and setting the Show N parameter, but would rather give the user full control on what they see. But I would like to find a solution which avoids the case in your first screenshot, @aChrisYouKnow, where the graph completes collapses and you can't see any nodes or links.
@aChrisYouKnow commented on GitHub (Apr 27, 2026):
@emiltb yea, the first screenshot is what I got to begin with, but changing the page zoom worked fine for me. A good enough solution in my book. I just wasn't sure if everyone would think to try that, so mentioning it in text at the bottom might be worthwhile.
@emiltb commented on GitHub (Apr 29, 2026):
Summary of feedback
Since I cannot edit the top post of this feedback thread, I'll use this comment to track progress on reported issues with the Sankey chart, until it is ready to move out of the experimental state.
Any bug reports and suggestions for improvements are very welcome. If possible, it is very helpful, if you can supply a test budget file, that covers the problem that you see along with a screenshot of the issue.
Known bugs
Enhancements
Miscellaneous