Fidelity

Measured against an oracle, not a feature list.

Every fixture renders through the CPU backend and is diffed against LibreOffice. Page counts, collision gates, and geometry are CI-enforced; regressions fail the build.

3/5
Exact page-count parity
±1
Worst-case page delta
7 ms
Incremental page repaint
100%
Unedited byte-identical export
OpenDoc render CPU raster · 150 dpi
Comparison images are produced locally by tools/opendoc-fidelity
A page rasterized by the OpenDoc CPU backend.
Oracle diff LibreOffice, same page
The corpus documents are not redistributable, so no image ships here
Pixel difference against the LibreOffice-rendered oracle page.
Document
Pages
Δ oracle
Round-trip
Known gap
Sample Document
26
0
Semantic
Class notes
1
0
Semantic
Rich producer demo
8
0
Byte-identical
Chinese SDS
17
+1
Semantic
Final-page column balancing
Medical form
3
−1
Semantic
Document-grid row heights

Page counts are this engine's output against a LibreOffice oracle on the five-document review corpus (tools/opendoc-fidelity); the documents themselves are not redistributable, so only the measurements are published. Numbers move with every fidelity PR. They are evidence, not a Word-grade claim.

Per-construct support

Support by construct family

The oracle numbers above summarize whole documents; this is the granular breakdown behind them. Support is tracked per DOCX construct family across four stages — modeled, rendered, editable, and round-trips on export. A construct can be fully modeled and round-tripped while still not being editable or fully painted yet, and this table never claims support a stage does not actually have.

Last reviewed: 2026‑08‑09 Source of truth: docs/18 support matrix, execution tracker, disposition taxonomy
Support by construct family and stage. “Round-trips” means import → edit → export → reopen preserves the construct.
Construct family Modeled Rendered Editable Round-trips

Notes, placeholders, and explicit non-support

  • Editing is a developer test harness, not a product. The Editable column reflects what the current in-browser editor can actually change today, not a supported product surface.
  • Every editable surface takes every editing operation. Body, header, footer, footnote/endnote body, text box, and a box inside a shape group each accept typing, selection, character and paragraph formatting, cut/copy/paste, find and replace, comments, and tracked changes. This is pinned by an operation × surface matrix in CI, not by sampling.
  • Not authorable yet: shape rotation and flip (they render and round-trip, but there is no handle or control to set them), custom shape geometry, replacing an existing picture's bytes in place, text-box body properties (internal margins, vertical anchor, autofit), inserting or splitting a section, and creating or updating a named style.
  • Math (OMML) is fully typed and round-trips; the common constructs typeset inline. Box/border-box rules and full Word-parity math typesetting are partial, and math is not editable — there is no equation editor.
  • Charts and SmartArt are modeled as first-class references and preserved byte-for-byte on export, but are not painted as live charts/diagrams — an embedded preview image shows if the file provides one, otherwise a text placeholder (⊟).
  • Non-PNG/JPEG images (EMF/WMF, SVG on the browser build), undecodable images, and w:altChunk paint a visible placeholder that reserves layout space, so nothing silently vanishes (▢).
  • Color fonts and color emoji are not supported. Emoji render, but through a monochrome face — the CPU rasterizer paints glyph outlines and has no color glyph-table (COLR/CBDT/sbix) path.
  • No PDF export. The design is written (docs/98, ADR-031) but not implemented; printing goes through the browser from engine-rendered pages.
  • Text wrap around floats reserves shared flow for top-and-bottom and square wrapping, including inside table cells, headers and footers. Tight and through contour wrapping, and page-coupled reflow, remain partial.
  • .docm macro-enabled files are rejected at open. Strip-and-open versus explicit non-support is an undecided policy question, not an oversight.
  • Round-trips means a semantic fixed point (import → export → reopen yields an equal model), not a byte-identical file. Byte-exact preservation applies to the retention/no-edit floor.
  • No silent data loss: anything not modeled is preserved verbatim via the retention floor and reported, per the disposition taxonomy.