Actual Budget 26.6.0 版本解析:跨界点报告、自定义主题稳定化与预算自动化 UI
【免费下载链接】actualA local-first personal finance app项目地址: https://gitcode.com/GitHub_Trending/ac/actual
Actual Budget(本项目仓库根目录)是一个本地优先的个人财务应用,其 26.6.0 版本(Docker 标签26.6.0)是一个里程碑式的功能发布:将 Crossover(跨界点)报告与自定义主题从实验性功能升级为一等公民(first-party),全面重设计了银行同步配置与账户关联流程,同时以实验性形态引入了预算自动化 UI(目标模板)、Enable Banking 银行同步提供方和 Balance Forecast 余额预测报告。本文基于 packages/docs/blog/2026-06-01-release-26-6-0.md 展开,结合仓库内的功能文档与源码,逐项拆解本次发布的新功能、弃用公告与升级注意点,帮助你在升级前充分评估、升级后快速上手。
版本总览与升级前必读
本次发布的核心内容可归纳为四条主线:
- 功能转正(Stable):Crossover 报告与自定义主题正式成为 first-party 功能,不再需要开启实验性开关。
- 体验重构:围绕新的 Bank Sync 页面重新设计了银行同步配置与账户关联流程;交易备注支持 Tag 自动补全(桌面端与移动端均可直接创建标签)。
- 实验性新功能:预算自动化 UI(目标模板)、Enable Banking 银行同步提供方、Balance Forecast 报告。
- 两项重要公告:规则操作模板化(Rule Action Templating)正式弃用;Docker 预发布镜像标签
edge更名为nightly。
弃用公告:规则操作模板化
自本版本起,规则操作模板化(rule action templating)被标记为已弃用(deprecated),将在未来版本中移除。官方建议新规则改用 规则公式(Rule formulae),它使用更强大的 Excel 风格语法覆盖了模板化的同类用例;已有使用模板化的规则请尽快迁移。
被弃用的模板化能力包括:基于交易数据在规则内动态设置notes、date、amount、payee(名称)、cleared等字段,底层使用 Handlebars 模板引擎处理,并提供add/sub/div/mul/mod等数学函数、regex/replace/replaceAll/concat等文本函数、addDays/subDays/addMonths/format等日期函数以及debug调试函数,可用变量包括today、amount(无小数存储,如 152 元存为 15200,可用{{div amount 100}}还原)、imported_payee、payee_name、is_child/is_parent等。具体语法见 Rule Action Templating,迁移目标见 Rule formulae。
Docker 公告:edge更名为nightly
如果您在跟进预发布镜像,请注意 Docker 配置需要更新:edge标签已更名为nightly,即拉取:nightly或:nightly-alpine(对应仓库维护工作见 #7898、#7901)。所有实验性功能的文档均建议使用nightly镜像获取最新实现。
Crossover 报告:财务独立时点测算(转正)
Crossover Point 报告源自《Your Money or Your Life》方法论,用于可视化"被动收入何时足以覆盖预计支出"这一财务独立时点。本次作为 first-party 功能正式发布(#7804),并在此次发布周期内修复了若干报告缺陷(#7803)。
四项核心输入
该报告需要四个关键输入来生成预测,完整参数见 报告索引:
| 参数 | 说明 |
|---|---|
| 支出类别(Expense Categories) | 指定哪些预算类别是退休后仍会持续的支出,用于将支出外推至未来。应排除不会延续到财务独立后的类别(如退休储蓄、工作相关支出) |
| 收入账户(Income Accounts) | 计算被动收入时纳入的账户,如 401k、IRA 等退休账户与投资账户。应排除非退休资金账户(如子女教育账户) |
| 安全提款率(Safe Withdrawal Rate) | 每年从投资组合中提取用于生活支出的百分比,默认 4%(源自 1998 年 Trinity Study 的"4% 法则"),可依风险偏好与资产配置调整 |
| 支出预测类型(Expense Projection Type) | 由历史数据外推未来支出的方法:Hampel Filtered Median(先用 Hampel 检验剔除异常月支出,再对剩余月份取中位数外推)、Median(历史月支出中位数,无异常过滤)、Mean(全部历史月支出的平均值) |
| 预期收益率(Estimated Return,可选) | 收入账户的预期年化回报率。不填时按收入账户余额随时间的变动计算历史回报(注意:该历史计算包含投入资金,可能抬高回报率) |
工作原理
报告基于所选支出类别与预测类型将支出外推至未来;同时基于所选收入账户、预期收益率与安全提款率将被动收入外推至未来。当被动收入曲线超越预计支出曲线的那一刻,即为财务独立时点——两条曲线的"跨界点"。报告配置会被保存,可挂载到仪表盘(dashboard)作为小组件持续跟踪。
自定义主题:正式稳定发布
自定义主题允许你通过安装自定义配色方案来个性化 Actual 的界面外观,可以从社区主题目录选择,也可以粘贴自定义 CSS 创建自己的主题。本次发布将其作为 first-party 功能转正(#7775)。
主题格式与校验规则
自定义主题必须以:root选择器 + CSS 自定义属性(变量)的形式编写,核心规则(详见 Custom Themes 文档):
- CSS 必须恰好包含一个
:root { ... }块,不允许块外内容; - 只允许以
--开头的自定义属性(Actual 使用--color-*变量体系); - 值可以是字面量(颜色、长度等),也可以是
var(--custom-property-name)引用形式(不支持带 fallback 的var(--name, value)形式); - 不允许其他选择器、at-rules(
@import、@media、@keyframes等)或嵌套块; - 允许注释,校验时会剥离。
:root { --color-pageBackground: #1a1a1a; --color-pageText: #ffffff; /* 复用其他变量 */ --color-buttonPrimaryBackground: var(--color-pageTextLink); }可覆盖的变量体系
主题可覆盖基座主题中定义的全部 CSS 变量。在仓库源码中,内置主题从 TypeScript 模块逐步迁移为纯 CSS 文件(见 #7851),当前定义位于 component-library 主题目录(light.css、dark.css、midnight.css、palette.css)。常用变量分组包括:
- 页面颜色:
--color-pageBackground、--color-pageText、--color-pageTextSubdued、--color-pageTextPositive、--color-pageTextLink - 表格颜色:
--color-tableBackground、--color-tableText、--color-tableBorder、--color-tableRowBackgroundHover - 按钮颜色:
--color-buttonPrimaryBackground、--color-buttonPrimaryText、--color-buttonNormalBackground、--color-buttonNormalText - 侧边栏颜色:
--color-sidebarBackground、--color-sidebarItemText、--color-sidebarItemTextSelected - 图表配色:
--color-chartQual1至--color-chartQual9,影响自定义报告所有图表变体(柱状、折线、环形等)的系列颜色
安装与发布
安装有两种方式:在Settings → Themes → Custom theme中从目录选择(主题托管于 GitHub,选中即自动拉取,带 6 色 3×2 调色板预览),或直接粘贴 CSS 到文本区点击Apply(会先校验,出错会在文本框下方显示错误信息)。
若要发布主题:创建 GitHub 仓库,在根目录(main分支)放一个actual.css,以owner/repo格式提交到官方目录。主题目录由仓库中的 customThemeCatalog.json 维护,每条目包含name、repo、colors(6 个十六进制代表色,用于调色板预览)。开发期建议先用"粘贴 CSS"功能快速迭代,再决定是否托管。
重新设计的银行同步配置与账户关联流程
本次发布对银行同步的配置与账户关联流程做了整体重构(#7449),将其统一到新的Bank Sync 页面上,移动端的银行同步状态指示也调整到文本右侧(#7611)。同时银行同步的底层实现有大量配套改进:
- GoCardless 同步服务器代码迁移至 TypeScript(#7904),并清理了银行工厂加载流程(#7809);
- 使用 GoCardless 提供的标记识别有特殊持续访问要求的银行(#7890);
- 修复 Enable Banking 同步 91 天而非上限 90 天的差一错误(#7930);
- OpenID 模式下将 sync-server 的 secrets API 限制为仅管理员可见,非管理员用户无法再枚举已配置的银行同步集成(#7862)。
实验性功能一:Balance Forecast 余额预测报告
Balance Forecast 报告从已入账交易历史、未来预定交易(schedules)或 Tracking Budget 计划出发,预测未来余额,帮助你提前发现可能的资金缺口、比较不同日期区间,并观察计划中的收入与支出如何随时间影响余额。完整说明见 Balance Forecast Report。
预测机制
报告首先解析所选账户、过滤器与预测日期范围,从预测开始前的已入账交易计算起始余额。默认情况下,Actual 会将预定交易展开为直到预测结束日期的模拟发生事件,对这些模拟交易应用排程规则;当转移计划(transfer schedules)双方都能归入所选账户时,还会生成对应的转账腿。
对每个预测日,Actual 用当天的已入账交易加上当天的模拟预定交易更新滚动余额;月度粒度则按月展示同样的滚动余额。此外,Tracking Budget 文件还可以选择Tracking budget作为预测来源:该模式从当前预算内(on-budget)余额出发,按月累加预算内收入、扣减预算内支出,不使用排程、账户过滤器或报告过滤器,且始终使用月度粒度。
展示选项与排查
- Start / End:选择预测日期范围;Quick ranges:报告头部提供未来快捷预设;Granularity:月度/日度切换;Forecast source:预定交易或 Tracking Budget(仅 Tracking Budget 文件);Filters:过滤纳入预测的交易与排程(Tracking Budget 模式下忽略);Save widget:把当前设置存回仪表盘小组件。
- 常见排查:预测"看起来太平"——检查范围过长或余额变化相对账户总额过小;排程缺失——确认排程处于激活状态且账户信息完整;余额异常——检查账户过滤器、报告过滤器、转移排程及未来交易是否已排程。
该报告在本周期内经历了多轮修复:修复 All future 范围(#7849)、按零余额穿越点为预测线着色(#7850)、修复已入账拆分交易被重复计数(#7955)。
实验性功能二:预算自动化 UI(目标模板)
预算自动化让你每月只需一次点击即可自动填充整个预算:根据已添加的自动化规则填满各预算类别,月末再一键清理盈余。典型用法包括:每月固定预算 $100、每两周预算 $50、月初将类别回填到 $300、把全部剩余资金投入储蓄类别、按收入的 10% 储蓄、按过去 6 个月平均支出预算,以及让 Actual 为多年后的远期大额采购动态计算每月应存金额。完整指南见 Budget Automation。
笔记模板与 UI 的迁移
每个类别只有一个自动化事实来源:UI 或笔记,二者不可并存。若你已有笔记模板,首次打开 UI(悬停类别名出现的饼图图标)时会呈现迁移表单,可对比查看原始笔记模板,修改后Save即完成迁移(之后笔记可删除,再往笔记里添加新自动化将不再生效;如需回退,在 UI 弹窗左下角执行 "Unmigrate")。
自动化类型与优先级
从表单可添加:普通预算自动化、长期目标(long-term goal)、月末清理(month-end cleanup)。表单右上角会实时显示该类别预计将被预算的金额。
优先级(Priorities):大多数自动化带优先级字段,决定执行顺序(从小到大):
- 不允许负优先级;优先级 0 最先执行,之后依次是 1、2、30、36……
- 相同优先级的自动化按数据库顺序执行;若希望精确控制填充顺序,请给每个自动化分配不同优先级编号;
- 警告:优先级 0 的自动化即使To Budget资金不足也会照常预算,可能导致To Budget为负;非 0 优先级则不会预算超过可用资金;同一类别中多个Cover schedule或Save by date自动化的优先级必须一致;
- 建议初始间隔 10 个编号,为日后插入留出空间。
自动化类型:
- Fixed Amount(固定金额):按选定节奏(周/天/月等)与起始日期预算固定金额。按周或按天时,整月预算基于该月包含的周/天数计算(例如起始日为周六,2026 年 5 月有 5 个周六,则周预算 50 会投影出 250)。
- Save by Date(按期储蓄):为在指定月份凑足目标金额而动态计算每月应存额;中途增删资金会自动重算剩余月供。选项含Repeat(周期性目标如季付、年付账单)与Allow early spending(允许提前支出而不重算,适合旅行、婚礼等提前数月花钱的场景)。
- Cover Schedule(覆盖排程):基于已有排程预算,两种模式:为下一次发生存钱(每月分摊到足额)或仅在排程发生当月全额预算。编辑排程后自动化自动同步。
- From History(历史数据):可复制某一前月预算,或取前 N 个已完成月份的平均支出(只用完成月份以保证反映真实支出行为);支持调整功能。
- % of Income(收入百分比):按本月/上月全部收入、本月可用资金(优先级 0 及更早自动化运行后的剩余),或指定单一收入类别计算百分比。
- Refill to Cap(回填至上限):需搭配Balance cap,将类别回填到上限。
- Whatever is Left(剩余资金):其余自动化运行后,按权重分配To Budget剩余资金,公式为
budgeted_amount = available_funds / sum_of_weights * category_weight;有余额上限的类别先填到上限、从可用资金中扣除后再进行下一轮分配(示例:剩余 $100,Snack Fund 权重 3 上限 $40 → 第 1 轮得 $40、To Budget 余 $60;第 2 轮 Vacation 权重 1 得 $20、Investment 权重 2 得 $40)。
调整(Adjustments)
针对Cover schedule与From history自动化,可附加Fixed amount或Percentage调整(均可增可减,固定金额默认增、点+切换方向),用于应对保险、房产税等逐年上涨的支出,或逐步压减超支类别的预算。
余额上限(Balance cap)
设置类别资金上限:超过上限后自动化不再注入资金;若类别余额已超上限,下次运行自动化时会移除超额部分。开启Retain existing funds over the cap可保留超额资金。同一类别所有自动化均受上限约束(文档中以周六晚餐+工作日午餐共用类别为例演示了按"周一"计周计算 6/7/8/10 月的不同投影预算)。
长期目标与预算指示器
自动化运行后,类别余额文字颜色即预算指示器:绿=已达预计预算、橙=未达、红=负余额,悬停可查看详情 tooltip。长期目标改变指示逻辑:着色反映距目标的进度,即使当月预算已满足、但未达长期目标仍显示橙色,达标转绿,撤资后回落橙色。注意:长期目标本身不会自动加钱或停钱(停钱请加余额上限),也可以只设长期目标、手动向目标预算。
运行自动化
- 月度层面(预算页头部菜单):Check templates仅测试全部自动化;Apply budget template只在预算为 0 的类别运行自动化(保留已有预算额);Overwrite with budget template用自动化覆盖所有预算单元格(推荐在使用非 0 优先级时使用)。
- 按需应用:单类别可用预算格下拉菜单 "Overwrite with template";单类别组可用组下拉菜单 "Overwrite with templates"(多月度视图下应用于最左侧月份)。
月末清理(End of month cleanup)
从预算头部主菜单运行,按序执行:先运行所有命名池(named pools)(把源类别盈余收进池 → 优先填补池内超支类别 → 剩余按权重分配;若池内无接收类别则余款归To Budget);再运行全局清理(Send leftover源类别收归 To Budget → 覆盖超支类别,资金不足时尽量覆盖,启用 Rollover Overspending 的类别被忽略 → 按权重向Receive leftover类别分配剩余)。权重公式:distributed_amount = available_funds / sum_of_weights * category_weight(示例:权重 1/1/2/2/4,和 10,则各得 10%/10%/20%/20%/40%)。注意清理不遵守余额上限(可用Retain existing funds over the cap保留超额,否则下次运行自动化时被移除)。命名池支持 "+ Add to a pool" 创建任意数量的命名池以精细化控制;"Only enough to cover any overspending" 可限制类别仅接收覆盖超支所需资金。
本次版本的自动化 UI 演进
发布周期内 UI 持续打磨:视觉重构(#7597)、dry run 仅作用于单个类别(#7790)、增加一次性设置选项区(#7791)、长期目标功能(#7792)、"按日期储蓄"可不重复(#7810)、打开弹窗自动选中首个自动化(#7811)、月末清理功能(#7815)、spend from 功能(#7823)、历史与排程模板增减能力(#7881)、每个自动化独立备注与预算页 tooltip(#7906)、Automations UI 中排程按字母排序(#7913)、月末清理模板持久化到数据库(#7794)、百分比输入一致性(#7905)与字体颜色可读性调整(#7819)等。
实验性功能三:Enable Banking 银行同步提供方
Enable Banking 作为新的银行同步提供方接入(#7345)。设置流程(见 Enable Banking Setup):
- 在 enablebanking.com 注册并登录,创建Production应用,确保重定向 URL 使用
https与你的域名,例如:应用名Actualbudget、重定向https://actualbudget.example.com/enablebanking/auth_callback; - 注册后在 Enable Banking 界面中关联所需账户,复制 Application ID(形如
12345678-1234-1234-1234-123456789012); - 回到 Actual:More → Bank Sync,选择Set up Enable Banking,粘贴 App ID 并上传凭据文件;
- 在具体账户中选择Link account → Enable Banking,选择国家与银行,按提示完成账户关联。
该功能目前为实验性状态,使用前需在 实验性功能 中开启,并使用nightly镜像获取最新实现。
标记(Tag)自动补全与交易体验改进
- 在交易备注中输入
#时,桌面端与移动端都会弹出标签下拉(#7654),且可直接通过该补全创建新标签(#7882); - 修复 "Notes > has tags" 交易过滤器在缺少
#时误返回所有交易的问题——现在改为匹配不到任何结果(#7808)。
交易相关的其它改进:新增R键盘快捷键执行"Make transfer"(选中两笔关联交易时,#7750);合并(merge)现在优先处理转账且仅允许同账户交易(#7600);转账不再要求日期相同(#7722);重复交易会被标记为未清算(uncleared)且解锁(#7723);移动端交易表单增加图标、占位符与下拉箭头并保持金额字段高度一致(#7638、#7639);移动端用户输入实时值跟踪(#7774);CSV 导出时防止被 Excel/LibreOffice/Google Sheets 误解释为公式(#7859);导入时校验交易金额为整数(#7891);QIF 导入保留类别(#7869);CSV 导入预览在映射类别不存在时不再误报更新(#7878)。
API 与 CLI 增强
- 公开 API:
@actual-app/api新增getNote与updateNote(见 methods.ts),无需内部 API 即可程序化读写类别备注(模板、目标等),对应测试见 methods.test.ts。Tracking Budget 的预算/收入/余额/结转字段也补充进 API(#7526)。 - CLI 缓存:CLI 命令现在会短暂缓存已下载的预算,新增
actual sync命令用于刷新、查看或清除本地缓存(见 cli 命令目录 与 cache.ts);CLI 列表命令默认隐藏隐藏类别(#7786)。
其他值得关注的修复与工程改进
- 排程:确保自动每日排程每天执行,停用支付的 2 天回溯(#7299);规则改动日期后移动端排程可见性修复(#7691);排程名称重新显示在即将到来的交易备注中(#7902)。
- Sankey 图:大规模数据集处理、更好的颜色映射与大量缺陷修复(#7682),含无 payee 时收入被误显示为支出(#7632)、负预算与正支出的处理(#7903)。
- 报告:Spending 报告保留已保存日期范围(#7672);"Last month" 实时区间仪表盘小组件不再还原为静态(#7768);自定义报告实时日期区间在打开过滤交易时保持(#7889);Budgeted 自定义报告的类别组过滤修复(#7629)。
- 稳定性与安全:CORS 代理可被绕过的安全问题修复(#7788);后端初始化失败时显示自定义错误屏(#7761);modal 增加 ErrorBoundary(#7560);移除 modal 遮罩上不必要的
will-change: transform修复偶发文字模糊(#7760);Docker healthcheck 脚本修复并保持向后兼容(#7840)。 - 工程维护:CRDT 从
google-protobuf迁移到@bufbuild/protobuf并发布 v3.0.0(#7535、#7818);Docker 镜像命名edge→nightly(#7898、#7901);内置主题从 TS 模块转为纯 CSS 文件(#7851);GoCardless 代码 TypeScript 化(#7904);同步服务器测试串行执行避免共享库竞态(#7847);Alpine 基础镜像升级至 3.23.4(#7939)。
升级建议与使用提示
- 跟随预发布版本的用户:立即把 Docker 配置从
:edge/:edge-alpine改为:nightly/:nightly-alpine;稳定版用户直接拉取26.6.0。 - 使用规则模板化的用户:计划迁移至 Rule formulae,在新版本移除前完成过渡。
- 尝鲜实验性功能:在 实验性功能开关 中分别开启 Balance Forecast 报告、预算自动化 UI 与 Enable Banking,并配合
nightly镜像使用。 - 银行同步用户:熟悉新的 Bank Sync 页面流程;自托管 sync-server 的 OpenID 部署下,非管理员将无法再查看已配置的银行集成信息(预期内的权限收紧)。
- 想换肤的用户:自定义主题已转正,可直接在Settings → Themes中安装目录主题或粘贴 CSS,参照 Custom Themes 中的变量表与校验规则即可快速上手。
【免费下载链接】actualA local-first personal finance app项目地址: https://gitcode.com/GitHub_Trending/ac/actual
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考