This release includes 1 breaking change for platform teams planning a safe upgrade.
✓ No known CVEs patched in this version
Topics
+12 more
Affected surfaces
Summary
AI summaryUpdates Links, What's verified, and theme across a mixed release.
Full changelog
For users
v1.6.0 — "expressive" — makes GraphCompose more expressive without breaking your engine code:
- Nested lists are now easier to compose —
ListBuilder.addItem(label, Consumer)opens a child scope, and a per-depth marker cascade (•→◦→▪→·) handles the visual hierarchy. Mixed flat / nested authoring preserves source order. - Table cells can hold any composable node —
DocumentTableCell.node(...)accepts paragraphs, nested lists, sub-tables, layer stacks. Two-pass measurement preserves the row-by-row pagination contract. - Canvas layers support pixel-precise
(x, y)placement —CanvasLayerNodeis the controlled free-canvas primitive for when you do need coordinates, withClipPolicy.CLIP_BOUNDSclipping and atomic pagination. - Templates v2 ships 14 CV presets and 14 paired cover-letter presets, theme-driven via
BusinessTheme, with one-linercreate(theme)factories. Inline markdown, active hyperlinks, slot-based multi-column layouts. The Templates v2 visual pipeline is hardened with pixel-diff parity checks against v1 reference renders to catch visual regressions on every build. - Architecture hardening —
@InternalAPI stability marker on engine internals, publicPdfFragmentRenderHandlerSPI for custom render handlers,DocumentRenderingExceptionwrapping the convenience render path sobuildPdf/writePdf/toPdfBytesno longer declarethrows Exception, documented thread-safety contract.
Engine source-compatibility with v1.5 is preserved for unmodified callers. Every public record that grew a new field ships back-compat constructors that default the new value, so v1.5 callers compile and behave unchanged.
Breaking change
Templates v2 replaces the legacy CV / cover-letter template classes. Legacy classes (CvTemplateV1, NordicCleanCvTemplate, MonogramSidebarCvTemplate, …) are deleted, not deprecated. Anyone constructing those classes must switch to the matching v2 preset's create(BusinessTheme) factory. The full v1 → v2 mapping (every old class → its v2 replacement, with before/after code) is documented in docs/migration-v1-5-to-v1-6.md.
Quick start
Maven:
<repositories>
<repository><id>jitpack.io</id><url>https://jitpack.io</url></repository>
</repositories>
<dependency>
<groupId>com.github.DemchaAV</groupId>
<artifactId>GraphCompose</artifactId>
<version>v1.6.0</version>
</dependency>
Gradle (Kotlin DSL):
repositories { maven("https://jitpack.io") }
dependencies { implementation("com.github.demchaav:GraphCompose:v1.6.0") }
Distribution status — currently published via JitPack. Maven Central is planned for v1.7 (tracking issue #7).
What's verified
- 819 / 0 / 0 / 0 — full canonical test suite green via
mvnw verify. - 26 runnable examples regenerate cleanly via
GenerateAllExamplesand ship as a CI artifact on every build. - 28 layout-snapshot baselines + 29 pixel-diff visual baselines cover every CV / cover-letter preset. The parity gate runs on every CI build with a calibrated
mismatchedPixelBudgetfor cross-platform PDFBox font drift.
Links
- Live showcase — install snippet, every example with a generated PDF preview, template gallery, feature examples.
- Templates v2 landing — preset gallery, four-layer architecture explanation, quick-start.
- Migration v1.5 → v1.6 — v1 → v2 template upgrade table.
- CHANGELOG.md — full technical changelog, including architecture-hardening details, package-level changes, and ADRs 0011-0014.
Author intent, not coordinates.
Breaking Changes
- Legacy CV and cover‑letter template classes (`CvTemplateV1`, `NordicCleanCvTemplate`, `MonogramSidebarCvTemplate`, …) are deleted; must use Templates v2 `create(BusinessTheme)` factories.
Weekly OSS security release digest.
The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.
No spam, unsubscribe anytime.
Share this release
About GraphCompose 2.0
All releases →Related context
Related tools
Earlier breaking changes
- v2.0.0 Package rename: layered template packages dropped `.v2` suffix; update imports.
- v2.0.0 Removed dormant ECS engine internals (EntityManager, SystemECS, Entity components, render pipeline).
- v2.0.0 Removed linkOptions() accessor; use linkTarget() and ExternalLinkTarget.options().
- v2.0.0 Removed PDF‑typed document‑chrome overloads on DocumentSession; use backend‑neutral metadata/watermark/protect/header/footer.
- v2.0.0 Removed DSL name-aliases DocumentSession.builder() and DocumentDsl.text(); use builder() and paragraph().
Beta — feedback welcome: [email protected]