● Private preview — one core · two targets

A document in, the same document out — every line proven.

Three planes, one file: the bytes you trust, the layout we prove, the page you get. Scroll to collapse the stack — losslessness is the distance between them being zero.

三層紙、一個檔案:你信任的位元組、我們證明的版面、你看到的頁面。 向下捲動把紙堆壓平——無損,就是三者之間的距離為零。

bytes · untouched ZIP entries
model · KP break points
quire / specimen

無損不是承諾,而是結構:引擎未觸碰的每一個位元組,都會在寫回時原樣出現。

The browser tab and the desktop share one layout core — same advances, same breaks, same display list.

¶ every break proven, never guessed

Everything you see is a rendering target: display lists out, pixels in.

display list · your page
scroll to press the sheet

The pipeline.

Three stages, one Rust core, compiled twice. Nothing is approximated twice — so browser and desktop cannot disagree.

Stage 01 · parse

The container opens, nothing is thrown away

OPC is unzipped entry by entry. Every part — even ones Quire has never seen — is claimed, content-addressed, held for write-back. Unknown is not the same as absent.

.docx zip document.xml ✓ styles.xml ✓ customXml/ ✓ untouched held byte-for-bytefor write-back
Stage 02 · shape + break

Real metrics, Knuth–Plass optimum

Shaped advances against real fonts; breaks chosen jointly per paragraph to minimise total badness. UAX#14 decides legality — KP decides what is right.

breakbreak greedy per-line vs KP per-paragraph
Stage 03 · paginate

One keystroke ≠ re-paginate the chapter

Paragraph caches reflow only the dirty interval; breaks settle in background passes. p95 incremental reflow under 8 ms. Output: a display list both renderers draw from.

cachedcached dirty → reflow display list: {text, rect, line} → native renderer · → wasm canvas

The line-break theatre — scroll to set the type

One paragraph, proven optimal.

Evidence, not promises

399/399 real-world corpus files round-trip byte-identical in CI — ZIP64 and unknown extensions included
2 × 2 CI matrix: ubuntu / Windows × native + wasm32-unknown-unknown
< 54 KB gzipped first wasm payload — CRDT collaboration code lives in a deferred chunk

Reflow lab — drag it.

The same justification model the engine uses, live in your browser. 拉動滑桿,版面即時重排。

無損不是承諾,而是結構:一個 Office 檔案是數千個宣告的容器,引擎未觸碰的每一個宣告、每一條 ZIP entry、每一個位元組,都會在寫回時原樣出現。瀏覽器分頁與桌面共用同一個排版核心:相同的整形 advance、相同的最佳化斷點、相同的 display list。沒有任何計算被近似兩次,因此也不可能出現分歧——你現在看到的這一行,與原生端渲染的是同一個答案。

One lossless core, three document formats

DOCXNow

Flow

Lossless round-trip plus the line-breaking and pagination pipeline — what the private preview runs on.

XLSXNext

Grid

Sibling format crate on the same OPC/lossless core: workbook model, formula engine, sheet render list.

PPTXThen

Canvas

Slide and shape model reusing the layout and shaping crates; its own presentation render list.

Shared: OPC container, OOXML part machinery, lossless discipline. Not shared: the layout model — each format typesets the way its format says it should.

Principles the build enforces

Lossless by construction

Untouched ZIP entries are copied byte-for-byte on write-back; roundtrip --check plus a 400-file corpus gate it on every commit across two OSes.

One core, two targets

The engine compiles to native and wasm32-unknown-unknown. The browser shell is a thin platform adapter, not a second implementation.

Layering, machine-checked

Format crates never import shells; shells enter through one engine API. A CI script enforces the boundary instead of a code review convention.

Real typesetting

Shaped advances against real font metrics, Knuth-Plass optimal breaks, incremental pagination with p95 reflow under 8 ms.

Opening soon

The engine is in private preview while the foundations — XLSX groundwork and the collaborative layer — hold. When the site opens, this section becomes a one-field waitlist; until then, write to [email protected] if you want early access to the playground build.