A GraphCompose-generated banner showing the engine's own architecture: DSL to document model to layout engine to LayoutGraph, feeding PDF and PPTX backends

One Document Language, Many Formats: Separating the Layout Engine from PDFBox and Apache POI

In an earlier post about GraphCompose I described how I borrowed ideas from unrelated corners of software development and tried to apply them to document generation: a declarative DSL, a separate layout pass, snapshot tests, and a bit of ECS thinking. Back then GraphCompose mostly looked like a PDF engine. That was fair. The only real backend was PDF, PDFBox did the work underneath, and support for other formats lived somewhere between the roadmap and the classic developer promise of yes, I’ll definitely get to that later. But I never set out to build another library that can only produce PDF. The original idea was different: ...

3 August 2026 · 15 min · Artem Demchyshyn
One document description resolving into a layout graph, then into a PDF page and an editable slide deck

GraphCompose 2.1: One Document, Two Real Outputs

My girlfriend is a senior marketing researcher, and last year she started building presentations with AI tools. The first result was usually fine. The layout was there, the content was placed, the slides looked finished. Then she needed to fix a typo. Not restructure the deck — fix one word. And because the tool owned the whole artifact, the only way to change one word was to ask for the whole deck again. It would fix the typo and move a box. Or rewrite a sentence that was already correct. Or quietly break a slide that had been fine. A thirty-second correction became a negotiation with a generator. ...

26 July 2026 · 9 min · Artem Demchyshyn