Changelog¶
All notable changes to this project are documented here. The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[Unreleased]¶
[0.1.2] - 2026-10-24¶
Added¶
- Documentation site at https://jmcmeen.github.io/imprenta/: the README, the
command line help rendered from the parser, the
Project/Catalog/TargetAPI from docstrings, and the changelog. Built with MkDocs Material (make docs,make docs-serve, dependency groupdocs) and published bydocs.ymlon pushes to main. Documentation-only changes skip CI and so cut no release. imprenta new --pinaccepts only a release number (X.YorX.Y.Z), since the value lands after==in the generatedpyproject.toml.
Fixed¶
- The starter written by
imprenta newno longer carries the old template repo's versioning rules in itsCLAUDE.mdand check workflow. imprenta newbuilds the project beside the destination and moves it into place when complete, so an interrupted run leaves nothing half-written, not even parent folders it created;imprenta new .fills an empty current directory; a destination that is a file or a symlink, or that something else filled meanwhile, is refused with a message instead of a traceback.- The starter Makefile quotes the goal it hands to
imprenta build.
[0.1.1] - 2026-10-24¶
Added¶
imprenta new DIR [--name NAME] [--pin VERSION]writes the starter project: a catalog, lorem ipsum content with term tables, a theme (leafletandvolume),scripts/fetch_fonts.py, the Makefile, the Node pin for pagedjs-cli and a check workflow, withpyproject.tomlpinned to the engine that wrote it. The starter ships inside the package (imprenta/data/starter/) and the test suite checks it, so it cannot drift from the engine. It replaces the separate imprenta-template repo. To see what a release changed in the starter, write it into a scratch folder with the new engine and diff.
[0.1.0] - 2026-10-23¶
Added¶
- The content arranger.
content/<name>.mdfiles are arranged into products bycatalog.<name>.yamlfiles:defaults,rendering(render variants),strings(labels),terms(glossary column aliases),groups,recipes(shapes with$namesubstitution) andproducts(an orderedpartslist, atheme, and the fieldsstatus,version,variants,tags). Nothing in the engine knows what the content is about or what language it is in. - Generated parts.
toc(positional: lists every heading placed after it, with page numbers resolved by Paged.js; settingsdepth,pages,title) andterms(a glossary built from the content's term tables, with a label column when the terms come from more than one labelled file). - Styled parts. Any content part may carry
{style: <name>, toc: false}; the build wraps every part in<div class="part part-<name> style-<style>">for the theme to style. A cover is a content file withstyle: cover. A content file that is only comments (a placeholder) is skipped, so it never costs a page. - Rendering. pandoc + pagedjs-cli (Paged.js in headless Chrome) for PDF variants,
pandoc EPUB 3 for
renderer: epubvariants, with size and palette css layers. Incremental builds keyed on file mtimes plus a stamp of the catalog rows and the imprenta version. - Targets.
(catalog, product, variant);imprenta buildtakes<catalog>,<product>,<catalog>/<product>, each optionally.<variant>, or nothing for everything;--tagnarrows to products carrying a tag.imprenta affected --sincemaps changed paths to targets for incremental CI. - Validation.
imprenta checkenforces the content rules (one leading H1, H2 sections, max H4, front matter) and the catalog rules (every name resolves, settings per part kind, recipes, themes, publishing fields, rendering layers). - Catalog editing.
imprenta.editwrites catalogs through ruamel.yaml's round-trip mode so comments survive. - The manager.
imprenta manager(extraimprenta[tui]): a Textual dashboard of every product with a product screen for sync-free publishing fields, variant subscriptions, builds and outputs. - API.
imprenta.Projectas the entry point: catalogs, targets, build, check.