Hi all,
I'd like to share a project I'm working on: A from-scratch implementation of
Beancount that is fast and independent of the Python ecosystem.
Why?I love Beancount, but as my journal has grown, processing takes a considerable
amount of time. I came across the
Beancount Vnext: Goals & Design document
which talks about how to address this with re-implementing the core in C++. And
since Martin has so little time working on Beancount these days, I thought why
not work on this evolved version of Beancount myself? I added some of my own
design ideas to the mix and the result is TurboBean.
PhilosophyMy vision is to have this very minimalist and fast core Beancount
implementation that is not tied to any language or ecosystem. It has some
essentials included (in particular the LSP) to get started quickly but then
mainly just interfaces with other languages via Protobuf.
- Single binary, zero dependencies. You download one small binary and it just
works — no Python environment, no pip, no virtualenvs.
- Instant processing. Even large journals are parsed and processed in
milliseconds.
- Plugins in Lua. Extend and customize processing without the overhead of
a full Python runtime.
- Interop with other languages. Just use templating to generate .bean files.
Pipe the output of processed transactions into any other language via
Protobufs.
- LSP and formatter built in. Every editor gets first-class support out of the
box — jump to account definitions, hover for balances, auto-completion and
renaming for accounts/tags/links.
- Practical Web UI included. A built-in web server gives you basic journal,
balance sheet, and income statement views to get started quickly. Similar to
Fava.
CompatibilityTurboBean aims to be as compatible with existing .bean files as possible. Most
files should work without changes. Where breaking changes exist, they stem from
the redesigned booking system inspired by Vnext. The key changes are described
in
this document.
Current StatusThe project is at a point where I use the LSP for editing all my .bean files
and the Web UI for basic reports.
I plan to work next on Lua plugins, the formatter as well as Protobuf output.
The project is definitely still exploratory so it would be great to have people
play with it, and get feedback on design decisions since that's always the
toughest part.
Best,
Moritz