Skip to content

Fat binoc: bundle format packs, pause per-plugin publishing, add ABI canary (v0.2.0)#122

Merged
jcushman merged 4 commits into
mainfrom
fat-binoc-distribution
Jul 1, 2026
Merged

Fat binoc: bundle format packs, pause per-plugin publishing, add ABI canary (v0.2.0)#122
jcushman merged 4 commits into
mainfrom
fat-binoc-distribution

Conversation

@jcushman

@jcushman jcushman commented Jul 1, 2026

Copy link
Copy Markdown
Collaborator

This preps binoc for a 0.2.0 release, based on the recent major refactor.

As part of this, we are pausing active plugins for now and bundling the whole tree into the main pip install binoc.

This also adds a test that ensure the arms-length ABI plugin approach continues to work, whenever we're ready to move back to proper plugins.

The reason for this is the ABI is still in flux, and I don't want to ship a bunch of separate pypi packages that have to be in lockstep with the main package anyway.

See docs/adr/2026-06-30-fat_binoc_distribution_and_abi_canary.md for the full rationale.

jcushman added 4 commits July 1, 2026 13:44
Ship one fat `binoc` wheel that compiles the first-party format packs in-process, defer per-plugin PyPI publishing until the rule-family ABI graduates, and keep a real cdylib renderer loaded over the C ABI in CI as the anti-cheat canary. Grounded in the finding that natively-loaded plugins can only contribute renderers today, so separately-published rule packs are non-functional.
Both now ship in-process via the fat `binoc` wheel, so separate wheels are redundant and re-introduce the plugin-vs-core ABI compatibility matrix the fat wheel exists to avoid. Removes their jobs + tag triggers from publish.yml and drops them from `just release`. Crates and features remain for opt-in use.
… canary

Compile the first-party format packs (Excel, Parquet, Avro, DBF, XML,
Shapefile, binformats, stat-binary, row-reorder) into the `binoc` wheel,
registered in-process through the shared `register_bundled_correspondence_rules`
seam so `binoc.diff`/`extract` and the CLI are equally fat. Each pack is behind
a default-on cargo feature aggregated by `bundled`, so a slim wheel remains
available via `--no-default-features`. SQLite is excluded from the default set
(its bundled rusqlite C build is paused).

Adds the `binoc-abi-canary` crate: a real renderer exported via `export_plugin!`
and built as a cdylib, whose test builds that cdylib and loads it over the C ABI
(libloading) to prove description + render round-trip. This keeps the renderer
ABI boundary compiler/linker-enforced even though format packs are linked in
statically.
Set the binoc wheel version to 0.2.0 (`just set-version binoc 0.2.0`). The
workspace uv.lock relock also syncs the stale binoc-stat-binary dev-dependency
entry to its committed pyproject specifiers.
@jcushman jcushman force-pushed the fat-binoc-distribution branch from cab295f to fabaf18 Compare July 1, 2026 17:45
@jcushman jcushman merged commit bc9a611 into main Jul 1, 2026
10 checks passed
@jcushman jcushman deleted the fat-binoc-distribution branch July 1, 2026 17:53
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant