Documents agents can write and read
Spreadsheets, decks and Word documents from plain JSON, in PHP, Node and Python, plus PDF in PHP. Every file can be read back into the same model.
- .xlsxHoly Sheet
- .pptxDark Slide
- .docxLast Word
- .pdfFinePrint
@particle-academy/last-wordDoc: Community garden: spring plan Blocks: 6 Kinds: 2 heading, 1 paragraph, 1 list, 1 table, 1 quote Words: 54
The markdown bridge
fromMarkdown / toMarkdownLast Word turns markdown into its document model and back. Convert this into the Word JSON above, or pull the current Word JSON out as markdown.
@particle-academy/holy-sheet) writes .xlsx the same way, and FinePrint is a PHP package, so neither runs in this demo.Edit the JSON on the left: validate, describe and lint run as you type. Download writes the file with the npm package in this page, then reads it back with that package's reader.
What it does
Four product families, one way of working: an agent emits JSON, the package checks it, writes the file and reads files back.
One Agent, plain JSON in
Each format is a JSON document an agent can emit, and each package exposes a static Agent: validate and validateAndRepair, a schema to register as a tool, guide() for what a professional file looks like, and toBytes. Last Word and Dark Slide describe() a document as text; Holy Sheet's describe() reads a file back into its schema instead, and FinePrint has no describe. Sheets, decks and PDFs add lint().
PHP, Node and Python mirrors
Holy Sheet, Dark Slide and Last Word each ship for PHP, Node / TypeScript and Python, on the same schema. The Node writers are universal, which is why the demo above runs in your browser. FinePrint is PHP.
Readers as well as writers
Files come back into the same model: Last Word reads .docx, legacy .doc, .odt and .rtf; Dark Slide reads .pptx, deterministically; Holy Sheet reads .xlsx and .ods; FinePrint reads PDF text in reading order.
Markdown bridges
Last Word converts between its document model and GitHub-flavoured markdown in both directions: headings, emphasis, links, nested lists, tables, code and quotes. It is lossy only where markdown has no syntax, such as underline, colour and page breaks.
Untrusted archives, read safely
The PHP and Node releases of 26 October 2026 bound every archive read before allocating: zip bombs, unsafe or duplicate member names, CRC and size mismatches and truncated files are refused with a typed ArchiveRefused, without echoing document content.
PDFs with a prompt-injection guard
FinePrint parses PDFs in pure PHP, reports active content such as scripts and launch actions without running it, and passes extracted text through a guard that can flag, redact or discard. It writes PDFs from Last Word's JSON model.
How it fits
Pick the package for the runtime you are in; the schema is the same in each. Holy Sheet, Dark Slide and Last Word each have a PHP, Node and Python mirror, and FinePrint is PHP.
Install a Node writer
Holy Sheet, Dark Slide and Last Word for Node. The demo above runs the last two; the PHP and Python mirrors are listed below.
npm install @particle-academy/holy-sheetnpm install @particle-academy/dark-slidenpm install @particle-academy/last-word
The packages
PHP 8.4+ xlsx writer for agentic document creation. Headless — top-level Agent write/describe/lint API, optional Laravel adapter.
Python port of holy-sheet -- xlsx writer/reader for agentic documents. Headless; no UI.
Node/TS port of holy-sheet — xlsx writer/reader + formula linter, isomorphic. Headless Agent API; no UI.
PHP 8.4+ pptx writer/reader for agentic deck creation — markdown headings, highlighted code, tables, gradients, high-fidelity reader. Sister to holy-sheet.
Python port of dark-slide -- pptx writer/reader for agentic documents. Headless; no UI.
Node/TS port of dark-slide — pptx writer/reader for agentic decks, isomorphic (browser or Node). Headless Agent API; no UI.
PHP 8.4+ docx writer/reader for agentic word-processing documents — a JSON Doc model (headings / styled runs / nested lists / tables / code / quotes / images), markdown bridges both ways, and Agent read/write/describe. Sister to holy-sheet (xlsx) and dark-slide (pptx).
Python port of last-word -- docx writer/reader for agentic documents, with markdown bridges. Headless; no UI.
Node/TS mirror of particle-academy/last-word — zero-dependency, isomorphic docx writer/reader with the same JSON Doc model + markdown bridges, so react-fancy Editor consumers round-trip Word files without a mammoth/turndown/docx converter sandwich. Headless; no UI.
Pure-PHP PDF reader, writer and page renderer for agents, with guarded reads, active-content reporting and bounded input handling. Optional Laravel routes serve private watermarked PNG pages behind the app's own authorisation.
Hand your agent a file format
Start with the format you need. Each package page has the install command for every language and the full schema.
