GraphCompose is solo-maintained. This roadmap is a direction, not a contract. Dates are intentionally omitted. Concrete work is tracked in issues and shipped work is recorded in CHANGELOG.md. For v1.6 phase-level detail, see docs/roadmaps/v1.6-roadmap.md.
In flight on 2.0-dev, preparing the 2.0.0 GA. The 2.0 line is about packaging and internal hygiene, not new authoring API — binary-breaking by design, with japicmp report-only for the cycle.
Scope frozen (2026-07). 2.0.0 ships exactly the set below; no further internal engineering is pulled in before GA — that work is the post-2.0 line (next section).
- Modular split — the single jar is split into
graph-compose-coreplusgraph-compose-render-pdf/graph-compose-render-docx/graph-compose-render-pptx/graph-compose-templates/graph-compose-testing, with render backends discovered through aServiceLoaderSPI.graph-composestays a drop-in wrapper (core + render-pdf) so existing PDF callers upgrade unchanged. See the 2.0 modules migration guide and ADR 0016. - Legacy removal — the dead Entity-Component-System execution layer and the deprecated (
forRemoval) public API are gone; the classic template presets are replaced by the layeredtemplates.*stack onBrandTheme. - Release & publishing pipeline — multi-module Maven Central publishing, the
core/-layout reactor (./mvnw clean verifyat the root builds everything), and the cut / tag / GA runbook. - Compatibility tests — the guard, snapshot, and visual-regression suites that prove the split left rendered output unchanged.
- Maintenance — the v1.9.x line (current stable) receives critical fixes only.
Further internal engineering — more layout-class decomposition, abstraction cleanup, streaming, optional performance work — is deferred to post-2.0 and does not gate GA.
Full detail in CHANGELOG.md under v2.0.0 — Planned.
Committed direction for after the 2.0 GA: internal refactors, scale work, and tooling that do not change the public authoring API. Tracked in docs/roadmaps/post-2.0-engineering.md.
- Decompose the layout hot files — split
LayoutCompilerandTextFlowSupportalong their natural seams into individually-tested collaborators, with layout output unchanged. - ArchUnit module-boundary guards — enforce the canonical / engine / render layering structurally, replacing the path-based greps that can pass vacuously after a move.
- Cross-module coverage aggregation — a dedicated non-published module that compile-depends on the tested modules so JaCoCo sees the
qasuites; report-only first, thresholds after a baseline read. - Per-module binary-compatibility baselines — once the 2.0 GA artifacts are published, switch
japicmpto per-module baselines in break-on-incompatible mode.
Not committed. Reflects current thinking; priorities may shift based on user feedback and adoption signals.
- DOCX visibility for unsupported nodes. Make currently-silent skips (
shape,line,ellipse,barcode) loud — minimum a warn log, ideally a strict-mode flag that fails instead of dropping content silently. - Block-level alignment for fixed-size flow children. Paths, images, layer stacks, shape containers and barcodes currently left-align in a flow; centring one means wrapping it in a full-width
ShapeContainerjust to use its CENTER anchor. Add a per-node horizontal align (left / centre / right — themargin: auto/align(center)analogue) so a fixed box can place itself in the flow directly. Surfaced by the v1.8 SVG icon-gallery and feature-catalog work. - Backend-neutral layout measurement. Decouple measurement from PDFBox-specific resources so non-PDF backends do not pull PDFBox into the dependency graph.
- DOCX maturity. Either expand DOCX coverage toward PDF parity, or move DOCX behind an explicitly experimental flag.
- Property-based testing. Random table spans, pagination edge cases, deeply nested layouts.
- Real PPTX export. Current state is a manifest skeleton. Will only be built out if there is concrete user demand.
- Public Javadoc site. Generated and hosted, kept in sync with releases.
- Hosted PDF rendering service.
- WYSIWYG editor.
- HTML / CSS input.
- Browser-side rendering.
See README — What GraphCompose is not.
Have a use case that should be on this list, or strong feelings about priority? Open a discussion issue or comment on the relevant tracked issue.