Release 3.2.1

174 views
Skip to first unread message

Martin Blais

unread,
Apr 28, 2026, 9:22:29 PMApr 28
to Beancount
Beancount 3.2.0 -> 3.2.1 summary
===================================

Scope: 241 files changed, mostly copyright/docstring/typo cleanup, generated
docs scaffolding, CI/build maintenance, and a few user-visible fixes.

User-visible fixes and behavior changes
---------------------------------------
- `bean-check` gained `--json`, emitting a single JSON object with an `errors`
  array of `{message, filename, lineno}` records. Normal stderr error logging is
  suppressed in this mode, while the exit code remains non-zero on errors.
- Printer fixes:
  - Balance directives now preserve and print an explicit zero tolerance
    (`~0`) instead of treating it as absent.
  - Note and document directives now print spaces between each tag/link token
    (for example `#tag ^link`) instead of concatenating them.
  - Costs with only a currency, but no numeric cost, now render the currency
    instead of omitting it.
- Display quantization now allows three more integral digits of precision
  before Decimal quantization, reducing failures with larger numbers.
- `bean-example` date handling was fixed so entries exactly on the generated
  maximum date are retained; this addressed a Jan 1 edge case.
- `treeify` now recognizes account components that begin with a digit after the
  account type, such as `Assets:401K`, in its default account regex.
- Date option parsing in `bean-example` now returns the parsed value correctly.

New library/experimental functionality
--------------------------------------
- Added `beancount.ops.find_prices.find_unpriced_currencies()`, which finds
  currencies that appear in balances without cost, conversion, or price history.
- Added an experimental DuckDB adapter under `experiments/duckdb/`:
  - Converts a Beancount ledger into DuckDB tables for postings, prices,
    accounts, and commodities.
  - Uses DuckDB structs/arrays/JSON for Amount, Cost, Position, tags, links, and
    metadata.
  - Adds optional DuckDB macros/UDFs such as `bnstr`, `bnpos`, `bninv`, `bnsum`,
    `bnj`, and `bnb`, plus a small interactive local CLI.

Build, packaging, and CI
------------------------
- Version bumped from 3.2.0 to 3.2.1.
- Python 3.14 test coverage was enabled, including reference-count test
  adjustments for Python 3.14 optimizations.
- Wheel building was updated to cibuildwheel 3.x, adds native Linux aarch64 and
  modern macOS runners, keeps Windows architectures, skips only musllinux, and
  limits PyPI upload to tag pushes.
- Build requirements now use PyPI-distributed flex/bison packages where
  applicable, reducing custom system setup in wheel builds.
- `pyproject.toml` now uses dependency groups for test/types/dev setup, adds
  pytest testpaths, and includes meson/meson-python in dev dependencies.
- Makefile workflows now default to `uv run python`, build into per-Python-tag
  Meson directories, ensure tests build first, and route pre-commit checks
  through `uvx pre-commit`.
- Pre-commit was restored/expanded in CI, with newer ruff hooks, mypy, and local
  checks for missing tests, filtered terms, and multi-imports.

Documentation and maintenance
-----------------------------
- Added a self-contained docs site scaffold under `docs/`, including Zensical
  config, custom CSS/JS, a logo, and a docs workflow.
- Added many `docs.md` index/overview files across packages, examples,
  experiments, and tools.
- Large non-functional cleanup updated copyright years, docstrings,
  Google-style Args/Returns sections, README wording, and assorted typos.

redst...@gmail.com

unread,
Apr 30, 2026, 3:24:31 AMApr 30
to Beancount

- Added an experimental DuckDB adapter under `experiments/duckdb/`:
  - Converts a Beancount ledger into DuckDB tables for postings, prices,
    accounts, and commodities.
  - Uses DuckDB structs/arrays/JSON for Amount, Cost, Position, tags, links, and
    metadata.
  - Adds optional DuckDB macros/UDFs such as `bnstr`, `bnpos`, `bninv`, `bnsum`,
    `bnj`, and `bnb`, plus a small interactive local CLI.

This is game changing, thank you. I just ran a ton of far more complex queries than I ever could’ve with BQL. I’ve been wanting to do these for a long time. And I didn’t have to write a single one as AI works wonderfully with DuckDB given the standard SQL syntax, and DuckDB being far more widely used than BQL.

For anyone else, see Martin’s examples to get started quickly (i.e, get your AI to read that page).

Brian Lalor

unread,
Apr 30, 2026, 7:13:47 AMApr 30
to bean...@googlegroups.com
Not sure how closely you follow the issues, Martin, but there are a bunch of wheels missing from PyPi: https://github.com/beancount/beancount/issues/1031
Maybe rerunning the failed GitHub Actions job would work, since the artifacts still exist…

Martin Blais

unread,
Apr 30, 2026, 8:53:36 AM (14 days ago) Apr 30
to Beancount
I spent a couple hours over the last few days trying to fix this - I just don't have those hours anymore - I have to build things.
Packaging always breaks.

On Thu, Apr 30, 2026, 07:13 Brian Lalor <bla...@bravo5.org> wrote:
Not sure how closely you follow the issues, Martin, but there are a bunch of wheels missing from PyPi: https://github.com/beancount/beancount/issues/1031
Maybe rerunning the failed GitHub Actions job would work, since the artifacts still exist…

--
You received this message because you are subscribed to the Google Groups "Beancount" group.
To unsubscribe from this group and stop receiving emails from it, send an email to beancount+...@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/beancount/112EF817-0C32-45D7-8EE9-151C0FF0EFD8%40bravo5.org.

Brian Lalor

unread,
Apr 30, 2026, 11:34:05 AM (14 days ago) Apr 30
to bean...@googlegroups.com
> On Apr 30, 2026, at 8:53 AM, Martin Blais <bl...@furius.ca> wrote:
>
> I spent a couple hours over the last few days trying to fix this - I just don't have those hours anymore - I have to build things.
> Packaging always breaks.

Is there someone you can delegate to? I’m happy to step in: I fight with GitHub Actions as part of my day job. Building things is great but of limited utility if people can’t use it.

Reply all
Reply to author
Forward
0 new messages