2.2.0 (2026-06-06)
Highlights:
- Book & chapter export levels (#73) — new export_level config: pages (default), books, or chapters. Books/chapters export as one combined file per node, in a folder-per-node layout.
- Asset localization for book/chapter exports — modify_links now rewrites image and attachment URLs to local relative paths in combined markdown and HTML exports (previously page-level only).
- Slimmer HTML exports — inline base64 image src blobs are replaced with references to the already-downloaded asset file when the wrapping anchor points at a localized asset, shrinking exported HTML.
assets.export_images/export_attachments /modify_linksapply at all export levels. For book/chapter,modify_linkslocalizes assets in markdown exports and HTML - follows existing supported export formats formodify_links` behavior.
Fixes
- Hardened the export pipeline: empty books/chapters are skipped, and the run exits cleanly with a warning when nothing was archived instead of failing on a missing archive.
Maintenance
- Releases migrated to release-please.
- Type hints modernized to PEP 585 (list/dict builtins).
- GitHub Actions dependency updates.
Commits
Features
- add export_level for book and chapter exports (#73) (e639991)
- add export_level for book and chapter exports (#73) (58dde6b)
- descendant-page name map for book/chapter nodes (0803e07)
- enable modify_links for books/chapters export levels (68eaaac)
- folder-per-node layout for books/chapters export (f9779ab)
- lift asset download into NodeArchiver base (1dedb3f)
- localize html img-src for pages and book/chapter exports (40851a1)
- localize images/attachments in book/chapter markdown (4128c03)
- move asset config into NodeArchiver base (72b1273)
- slim inline base64 img-src by reusing downloaded anchor asset (09dc01b)
Bug Fixes
- add archive timestamp-suffix format test (0e2315a)
- clarify check_var required semantics and return type (2e9f4ec)
- code review remediation (bug fixes, DRY, tests) (33c8d12)
- deduplicate asset page-grouping logic (f470062)
- invoke minio config validator in is_valid (0524472)
- modernize type hints to PEP 585 via pyupgrade (a23903c)
- normalize trailing slashes with rstrip (01870a1)
- raise on unknown asset type in get_asset_bytes (65f7035)
- remove broken verify_ssl property from PageArchiver (f24f4f1)
- remove commented-out dead code (dac95eb)
- remove unreachable run call in entrypoint loop (c1fcf8b)
- resolve pre-existing test lint findings (f0b9c3a)
- reuse a single requests Session in HttpHelper (3d8afb0)
- stop API Session echoing BookStack session cookie (8cbe16a)
- trim trailing newlines in page_archiver (aa93486)
- use dict.update for node map merges (a56a07b)
Documentation
- address counter-review (chapter walk blocker, dead-state warn, fixture tests) (ac0ba8a)
- correct modify_links html behavior for scaled + base64 img-src (f3373e8)
- correct modify_links html behavior for scaled + base64 img-src (f62c6cb)
- drop superseded planning docs (handoff plan is source of truth) (421e991)
- extend modify_links scope to html (remote src/href survive combined html) (2056dfa)
- implementation plan for modify_links book/chapter (d4f9c7d)
- modify_links + folder layout for books/chapters (0c07407)
- spec modify_links for book/chapter markdown + folder layout (4a8c309)