paged.doc — Word documents
The Word plugin — .docx read into native frames and styles, placed into a layout or opened on its own, with byte-level save-back that keeps everything paged did not change.
In short paged.doc brings Word documents into paged. A .docx is read into
native content (paragraph and character styles, lists, tables, images, links,
notes) and either poured into a frame of a layout or opened as a document of its
own. Saving back writes a targeted patch into the original file, so whatever paged
did not touch stays exactly as Word wrote it.
What it does
- Reads the body, styles, lists, tables, images, hyperlinks and notes of a
.docxor.dotx, preserving every part it does not model verbatim. - Places a Word document into a frame as one undoable step, with an outline and styles panel over the imported structure.
- Saves edits back as byte-level patches (text, paragraph properties, table rows and columns); edits it cannot write are listed in the Problems panel rather than dropped silently.
- In development: opening a Word document on its own, a page per section, with Word's own pagination (line spacing, breaks and keeps).
How it's built
A Cargo workspace over a shared OOXML package layer (paged-ooxml) that lowers
DOCX into native content, plus a TS bundle (@paged-media/doc). An identity-based
alignment between the source and the edited document is what lets save-back patch
only what changed.
Capability state
● shipped & verified · ○ shipped, re-test pending · ◍ shipped, untested · ◐ partial · ✗ failing · · planned
Plugin · doc 17 features · 71% green
| Feature | Shell | Panel | Doc |
|---|---|---|---|
Atomic pour — the place path adopts Mutation::Batch for text steps (C-14)plugin-doc.atomic-pour | ● | ||
The wordDocument surface — objectType + editContext declaration (ADR-024)plugin-doc.edit-context | · | ● | |
Embedded placement — a .docx poured into a host frame via host mutationsplugin-doc.embedded-placement | ◐ | ● | |
File entry — the .docx/.dotx importer and the "Place Word document…" commandplugin-doc.file-entry | ◐ | ◐ | |
Identity-based LCS alignment — the preservation invariant under every derived editplugin-doc.identity-alignment | ◍ | ||
Depth-aware table locator — a nested table cannot misdirect an outer editplugin-doc.nested-table-locator | ◍ | ||
Object model — Word document, blocks, runs and merge fields addressable through host.objectsplugin-doc.object-model | ● | ||
OPC container + verbatim carry-through preservation (paged-ooxml)plugin-doc.opc-foundation | ● | ||
Outline/styles panel — the retained LoweredDoc surfaced in the editorplugin-doc.outline-panel | · | ● | |
DOCX read path — body, styles, lists, tables, images, hyperlinks, notesplugin-doc.read-path | ● | ||
Edited save-back — targeted byte-level patch of word/document.xmlplugin-doc.save-back | · | ● | |
Save-back refusal ledger — the patcher's skips reach the Problems panelplugin-doc.save-back-feedback | ● | ||
Paragraph-property save-back — a targeted `<w:pPr>` rewriteplugin-doc.save-back-paragraph-props | ◍ | ||
Table-structure save-back — rows and columns inserted/deleted in the source bytesplugin-doc.save-back-table-structure | ◍ | ||
Standalone open — a Word document becomes the whole document, a page per section that growsplugin-doc.standalone-open | ◐ | ||
Verbatim export — the zero-edit .docx exporter and its degrade pathplugin-doc.verbatim-export | ◐ | ● | |
Word pagination — line spacing, breaks and keeps as Word lays them outplugin-doc.word-pagination | ◐ |
Recent activity
- 2026-10-18README: moved to paged-media/paged (modules/doc) [skip ci]6049c94
- 2026-10-17Merge pull request #3 from paged-media/fix/zip-9e12353e
- 2026-10-17deny: ignore the zip extract() advisories for ooxmlsdk's zip 8 only1f7e6e0
- 2026-10-17zip 9: upgrade the OPC container and the IDML skeleton writereb5bb5c
- 2026-10-14Merge pull request #2 from paged-media/fix/wasm-size6ecd761
- 2026-10-14wasm: build the engine with a size profile and hold it to the manifest's maxBytes946db54
- 2026-10-12docx: doNotUseHTMLParagraphAutoSpacing — Word adds space after and before there1261da6
- 2026-10-11Merge pull request #1 from paged-media/fix/ui-text-internal-refs79d6cc0
paged.data — database publishing
The database-publishing plugin — a binding DSL, a sync engine, record-flow pagination, and batch automation over DuckDB-WASM, publishing datasets other plugins can consume.
paged.slide — presentations
The presentation plugin — PowerPoint decks opened as native pages with their masters, charts, tables and notes, reworked with layout tools and exported back to .pptx.