mirror of
https://github.com/actualbudget/actual.git
synced 2026-05-05 22:52:20 -05:00
Open
opened 2026-04-18 02:46:25 -05:00 by GiteaMirror
·
36 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#26531
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
Known issues:
Upcoming additions:
@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.