我从去年开始使用 beancount 搭配 fava 来记账,总体效果不错,但也遇到了一些问题。
上手难度大
- 安装不方便。需要下载 python 以及通过 pip 去安装 beancount 和 fava
- 使用难度大。因为 beancount 是基于文本的,所以其对记账内容的格式有严格要求
- 灵活性。这其实算是 beancount 的优点,但对于刚接触的用户来说,怎么组织文件夹结构,怎么定义账户都是一个需要不断摸索和重构的过程
便捷性不足
- 缺乏对移动端的支持
- 缺乏第三方账单导入
作为一名后端开发,本能地想到 接口即服务。于是着手把 beancount 的使用抽象为 API 接口。
beancount 提供了 bean-query 的命令,可以执行 BQL 语句(类似 SQL )输出结构化数据;我只需要把这些结构化的数据解析成 JSON 返回即可。于是我用 NodeJS 快速验证了这个想法( Github 地址:beancount-node-server)。
Node 虽然开发起来很便捷,但是它给使用者新增了强依赖(用户想要记账需要同时在电脑配置 Python 和 Node ),本着 如无必要,勿增实体 的原则,我又把这个项目用 Go 重构了一遍,在支持多平台的基础上,而无需新增依赖。
同时我也开发了一个前端界面(勉强兼容移动端)和对 docker 的支持。

最终成品如下:beancount-gs 在线体验
使用文档-完善中
API Github 地址:beancount-gs
前端 Github 地址:beancount-web
上面这些就是我对 beancount API 化的探索,如果大家对这个项目有兴趣,欢迎保持关注。
Love the world.