Repository navigation
v15.0.0
Docxodus 15.0.0 aligns document text coordinates and expands rendering and export coverage; see the full changelog.
Highlights
- Read-only anchor locations expose canonical IDs, package part URIs and element XPaths across .NET, WASM, npm/worker, Python and MCP, without saving or stamping the document.
- Session text, search, markdown projection and browser editing now agree on tabs and other visible run atoms. Paragraph rewrites preserve unchanged inline content controls, and projection includes supported textbox and grouped-shape text.
- HTML and PDF export handle more long paragraphs, table cells, merged grids, bordered footnotes and overflowing comments. Continuous-section margins, right tabs, inline frames, linked textboxes and oversized pictures retain their layout and source ownership across pages.
- Rendering supports legacy form-field metadata, selected document-property and running-style fields, ruby annotations, bounded TIFF images and supported simple WMF graphics. Comparison preserves textbox geometry, inline bookmark changes, and positions around tabs and equations.
- Package reads and edits enforce XML depth limits before recursive processing. Export verification distinguishes supported authored clipping from newly lost content, while retaining diagnostics and strict-policy refusals.
Breaking changes
- Text offsets change by default. A run tab (
w:tab) and positional tab (w:ptab) each occupy one\t; line breaks (w:br/w:cr) each occupy one\n; special hyphens and valid symbol codes contribute their displayed characters. Search results, spans, previews and other text readers use these coordinates, and moved-from text is excluded consistently. Markdown prints a tab as a tab instead of four spaces. Recompute persisted offsets from the new visible text before applying edits. There is no legacy-counting option. To retain the previous behavior, pin the browser/.NET/CLI package to 14.3.0 and Python todocx-scalpel==0.9.1; browser/export installations should retain an already published matching 14.x pair. - Deeply nested XML is refused by default. Story and definition parts are limited to 128 nested elements; other reachable parts to 256. Inputs beyond the applicable limits now fail with
xml_depth_limit_exceededinstead of entering recursive processing. Edits that would exceed the limit returnValidationFailedwithout changing the document, version or undo history. There is no compatibility switch; simplify the input or retain the previous release when its input behavior is required.
The coordinated Python release is docx-scalpel 0.10.0, bundling the core host from the same commit. Both docxodus 15.0.0 and @docxodus/export 15.0.0 are published, with an exact matching peer dependency. The embed bundles are available on jsDelivr.