Actual Budget 25.9.0 版本解析:移动端规则管理、Pluggy.ai 银行连接与自动化后端落地
【免费下载链接】actualA local-first personal finance app项目地址: https://gitcode.com/GitHub_Trending/ac/actual
Actual 25.9.0 是 Actual Budget(本地优先的个人理财应用)在 2025 年 9 月发布的稳定版本,核心围绕三大能力展开:为移动端补齐规则(Rules)页面并提供独立编辑页、在报表中显示实验性预算货币、正式发布实验性的 Pluggy.ai 银行连接器。本文基于 官方 25.9.0 发布说明 展开,并结合仓库源码(desktop-client、loot-core、sync-server)逐项剖析新特性、增强与修复的底层实现,帮助读者理解每个功能的落地位置与使用方式。
版本概览与升级方式
本版本对应的 Docker 标签为25.9.0,发布说明明确该版本包含若干新功能与大量修复。升级时按仓库根目录的 Dockerfile 与 docker-compose.yml 构建或拉取25.9.0镜像即可;自托管用户也可直接使用actualbudget/actual-server:25.9.0镜像(在 sync-server 目录下同样提供了 docker-compose.yml 与 Ubuntu/Alpine 两套 Dockerfile)。
核心新特性
1. 移动端规则页面:查看、管理、编辑一体化
自 25.9.0 起,Actual 在移动端正式提供了规则(Rules)页面,用户可以在手机上查看、筛选、创建、编辑和删除规则。这一系列改动由多个 PR 组成:
- #5390:新增移动端规则页面,用于在移动设备上查看和管理规则;
- #5516:将移动端规则编辑抽取为独立页面,优化导航体验;
- #5556:移动端规则编辑支持通过确认弹窗删除规则;
- #5587:移动端新建规则的默认阶段由
pre改为default。
从源码看,移动端规则列表页面位于 packages/desktop-client/src/components/mobile/rules/MobileRulesPage.tsx,其核心流程为:
- 通过
send('rules-get')拉取全部规则,并监听undo-event在撤销后自动刷新列表; - 支持按文本过滤(内部使用
getNormalisedString归一化后匹配ruleToString生成的描述文本); - 列表会过滤掉已完成(
completed)的排期关联规则; - 点击规则跳转到
/rules/{rule.id}编辑页(MobileRuleEditPage.tsx); - 删除规则调用
rule-delete-all,若规则与排期关联导致删除失败,会弹出 warning 通知;成功删除则展示可撤销(Undo)提示。
配套的 UI 组件还包括 AddRuleButton.tsx、RulesList.tsx 与 RulesListItem.tsx。
在桌面端,#5543),为移动端独立编辑页提供了组件基础。
2. 报表页面显示实验性预算货币
#5283 为报表(Reports)页面增加了货币显示能力,使实验性预算(experimental budget)中的货币得以展示。该功能与实验性功能开关联动,用户需先在设置中启用相关实验选项,报表才会体现对应的货币单位。
3. 正式发布实验性 Pluggy.ai 银行连接器
#5628 将 Pluggy.ai 银行同步集成正式纳入实验性发布。Pluggy.ai 是面向拉丁美洲金融市场的银行连接服务,作为 GoCardless 之外的又一银行数据源选项。
从 sync-server 源码可以看到完整的服务端接入:
- 路由挂载于
/pluggyai,见 sync-server/src/app.ts(app.use('/pluggyai', pluggai.handlers)); - 处理器实现位于 app-pluggyai/app-pluggyai.js,提供三个接口:
POST /pluggyai/status:返回当前凭据来源(per-budget-file/global/ 未配置);POST /pluggyai/accounts:按 itemId 拉取账户列表;POST /pluggyai/transactions:按账户与起始日期拉取交易,区分已入账(booked)与待处理(pending)交易,并计算起始余额。
- SDK 封装位于 pluggyai-service.js,基于
pluggy-sdk的PluggyClient实现,凭据通过 secrets-service.js 存储,支持"全局"与"按预算文件"两种凭据作用域。
代码中还有若干细节值得注意:
- 信用卡(
CREDIT)账户的金额会做符号反转(trans.amount *= -1),起始余额同样取负; - 信用卡分期(installment)交易会通过
addMonthsClamped按分期期数修正交易日期,避免 31 日加月跳月的边界问题; - Pluggy 沙箱数据(账户 owner 为
John Doe)会将起始日期强制设为2000-01-01以便拉取全部历史数据。
需要说明的是,Pluggy.ai 连接器目前仍为实验性功能,其可用性、机构覆盖范围与稳定程度以官方后续发布为准;在使用前请确认你的银行机构是否在 Pluggy 覆盖范围内。
4. 自动化的后端基础与 UI 连接
25.9.0 还为预算自动化(Automations)功能埋下了地基:
- #5532 增加支持自动化 UI 的后端逻辑;
- #5533 将自动化 UI 与后端打通。
从源码看,loot-core 侧暴露了budget/get-category-automations与budget/set-category-automations两个方法(见 loot-core/src/server/budget/app.ts),分别对应goalActions.getTemplatesForCategory与goalActions.storeTemplates;桌面端则在 BudgetAutomationsModal 目录下实现了完整的自动化编辑界面(AutomationEditorPane、AutomationListRow、CleanupListRow、ConflictBanner 等),并配套 BudgetAutomationsModal.test.ts 测试。该功能同样属于实验性范畴,需在设置中开启后使用。
增强项解读
25.9.0 包含多项面向使用体验的增强:
- 报表时间范围:#5419,通过
getLiveRange以priorYearToDate模式计算范围,与已有的 "Year to date"、"Last month"、"Current quarter" 等预设并列展示在报表日期范围选择器中。 - 排期相关:#5482 在即将到来的交易(upcoming transactions)备注中显示排期名称;#5580 将其限定为仅在即将到来的交易中展示。
- 对账体验:#5521 对账窗口同时展示绝对日期(如
08/08/2025)与相对日期(如3 days ago);#5528 修复了对账窗口中的数学计算错误(Bug #5527)。 - 余额历史图开关:#5452 为侧边栏账户悬停提示中的余额历史图新增显隐开关。
- 银行同步细节:#5458 银行同步页面对最近一次同步时间提供更详细的悬停提示;#5479 新增瑞典银行 Länsförsäkringar(有限历史)的 GoCardless 解析支持;#5383 为慕尼黑 Stadtsparkasse 的 GoCardless 交易解析补充了交易信息到备注。
- 货币扩展:新增卡塔尔里亚尔(#5456)、波兰兹罗提(#5472)、瑞典克朗与土耳其里拉(#5477)、印度卢比(#5483)、菲律宾比索(#5507)。
- 导入:#5461 支持从 nYNAB 导入分类备注。
- 移动端:#5605 预算横幅显示未分类/超支总额;#5607 移动端友好的 DateSelect 组件;#5604 子交易支持 "Make Transfer" 菜单;#5574 提升标签(tags)可读性。
- 工具提示:#5475 为 Tooltip 组件增加可配置的关闭延迟。
重要修复一览
发布说明列出了数十项 Bug 修复,按主题归纳如下:
移动端:
- #5072 修复多账户视图中预览交易不加载、未分类拆分交易不加载的问题;
- #5415 修复移动端交易钩子与交易加载体验;
- #5126 通过 AutoTextSize 增强移动预算表格的响应式文本缩放;
- #5589 移动端未分类交易视图隐藏转账交易;
- #5429 修复移动导航的响应式布局以适配更长文本/翻译。
规则与排期:
- #5529 修复 "link schedules" 条件的显示;
- #5600 补充规则页面对排期的描述条件;
- #5406 排期日期选择中 "add specific days" 换行并动态调整数字输入宽度;
- #5519 修复日期失焦导致其他按钮全部禁用的问题。
报表与预算:
- #5520 修复汇总报表中负数显示;
- #5495 修复实时报表日期模式不支持两个月窗口的问题;
- #5573 修复日历报表卡片渲染循环;
- #5608 修复按金额过滤时崩溃;
- #5526 修复交易表中偶尔选中隐藏分类的问题;
- #5496 当 "to budget" 为负时隐藏 "hold for next month" 选项;
- #5594 修复部分堆叠模板条件下 by template 计算不正确的问题;
- #5541 修复 SpendingCard 崩溃。
账户与交易:
- #5462 阻止账户关闭到自身;
- #5438 允许基于已关闭账户的转账收款人进行过滤;
- #5485 与 #5523 修复合并时旧收款人名称显示;
- #5460 自定义映射字段缺失时收款人回退到默认值;
- #5418 收款人列超长名称用省略号截断防溢出;
- #5464 移除批量前置/追加备注时自动添加的空格,与规则动作保持一致。
翻译与本地化(主要贡献者 milanalexandre):#5396、#5411、#5421、#5471、#5486、#5514、#5549、#5565、#5634 等,补齐了规则、报表、排期状态、关闭账户、导入交易弹窗等界面文本的多语言支持。
其他:
- #5457 修复系统默认浅色主题下标签颜色异常;
- #5398 标签颜色默认改为 null(回退到主题色),并加强标签校验;
- #5579 相同 redux action 已 pending 时避免重复调用数据库;
- #5623 修复 sync server 在 arm64 Mac 上启动失败;
- #5631 修复 Docker 健康检查脚本;
- #5643 支持 webRoot 位于隐藏目录(如
.cache); - #5659 修复收入弹窗余额不显示。
维护与工程化进展
- #5379);
- #5566、#5567 移除未使用的依赖包 reselect、sourcemap、process;
- Redux 状态重构(contributor: joel-jeremy):#5581 账户状态迁入 accountsSlice、#5592 收款人状态迁入 payeesSlice、#5593 分类状态迁入 budgetSlice、#5597 标签状态迁入 tagsSlice、#5598 queriesSlice 更名为 transactionsSlice;
- #5576 修复 AutoTextSize 警告;#5591 为 Command bar 增加视觉回归测试(VRT);
- #5544 文件,为仓库目录分配维护负责人;
- #5404 允许 fork 仓库通过 workflow dispatch 触发 Docker edge 镜像构建;#5480 合并自动包版本号 workflow;#5497 升级 sync-server 依赖。
小结与升级建议
25.9.0 是 Actual 在移动端体验、银行连接生态与自动化功能储备上的一个关键版本:移动端规则页让手机端也具备完整的规则管理能力;Pluggy.ai 连接器为拉美用户提供了新的银行同步选项;自动化后端与 UI 的打通则为后续版本的完整自动化功能铺路。升级前建议先备份预算文件(可参考 backup-restore 文档),并在实际银行环境验证 Pluggy.ai 的可用性后再启用相关实验性开关。
【免费下载链接】actualA local-first personal finance app项目地址: https://gitcode.com/GitHub_Trending/ac/actual
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考