# Word editor — a Theseus community extension Opens, edits and saves Word documents (`.docx`) in a full Theseus tab, and exports them as PDF. Saving comes in three shapes. **Save** drops a copy in your downloads until the document has a home; **Save as…** opens a real file dialog where the extension you type — `.docx` or `.pdf` — decides the format, and from then on Save writes straight to that file; **PDF** is the one-click export. PDFs are rendered by Chromium's own print pipeline from `lib/doc-css.js`, the same stylesheet the editor displays, on the paper size the document itself specifies — so the export matches the preview rather than being a second opinion about it. This is **not** a bundled add-on. It isn't in `bundled-addons/`, it isn't in the installer's `extraResources`, and a fresh Theseus profile doesn't have it. Users get it the same way they'd get anyone else's extension: from **Settings › Extensions › Community**, which lists whatever is in the catalogue at theseus.x/extensions. Living outside the browser build is the point. A .docx editor is a big dependency — a megabyte of vendored library — and nobody should carry it because they wanted a browser. ## The icon `icon.svg` is the one drawing. `npm run icons` rasterises it to `icon-16/32/48/128/256.png` and writes a minified copy into `addon.json`'s `icon` field, which is what the dock button and the catalogue card read — so there is never a second version to keep in step. It is deliberately not Microsoft's Word icon. That mark, and the blue sheet with a white W it belongs to, are Microsoft's trademarks; dressing our extension up as theirs would be both a legal problem and a dishonest one. The mark here says "text document" in its own words: a page with a turned corner, a heading rule, body lines, and a pilcrow badge in Silent Mode green. ## Building The vendored libraries (mammoth, ProseMirror, docx, JSZip) are bundled by a build step that lives outside this folder, because mammoth needs local patches before it can carry everything the editor edits: cd ../../addon-build/docx-editor npm install npm run build # writes vendor/docx-vendor.js here npm run pack # writes out/docx-editor-.tar.gz `vendor/docx-vendor.js` is committed, so the extension is installable straight from a checkout; re-run `npm run build` after touching anything under `addon-build/`. ## Publishing `npm run pack` produces the tarball and its sha256. Uploading it is a separate step, and this repo can't do it: a community extension is signed by the **owner of a BNS name**, using that name's wallet. The straightforward route is the publish page at **theseus.x/extensions/publish** — it unlocks a wallet in the browser, checks that the name is yours, then signs and `PUT`s the tarball to `/api/ext//docx-editor/`. The gateway verifies both signatures against the name's current owner, stores the tarball on Sia and updates `catalog.json`, which is what Settings and the site both read. Version numbers must increase, and the id `docx-editor` belongs to whichever name publishes it first. ## Testing Three levels, all re-runnable, all from `../../addon-build/docx-editor`: node test/roundtrip.mjs # the built-in fixture node test/corpus.mjs # real documents node ../../../scratchpad/verify-docx-editor/drive.mjs # a real Theseus, over CDP The last one installs this folder into a throwaway profile the way the community channel would, and is the only one that catches browser-only breakage. What survives a round trip, and what doesn't, is written up in [ROUND-TRIP.md](ROUND-TRIP.md). Read that before promising anyone a Word feature.