Check which DOCX features you can edit, display, and preserve on save, and the layout limits of each.
Use this page to check which DOCX features you can edit, display, and preserve when you save. The feature matrix gives the status and limits of each feature. The tables after it list layout rules that depend on document settings.
Right-to-left scripts and Chinese, Japanese, and Korean text work in the editing surface, the automation API, collaboration, and PDF export. The interface mirrors for Arabic and Hebrew.
| Language group | Support | Details |
|---|
| Arabic, Hebrew, Persian, and Urdu | Right-to-left text: Arabic, Hebrew, Persian, and UrduFull | Shaping and joining, mixed-direction order, right-to-left paragraphs, lists, tables, and columns. See Right-to-left text. |
| Chinese, Japanese, and Korean | Chinese, Japanese, and Korean textFull | Input-method typing, East Asian font selection, line-breaking rules, and fallback fonts. See Chinese, Japanese, and Korean text. |
| East Asian typography | East Asian typographyPreserved | Inter-script spacing, punctuation compression, and punctuation overflow. See East Asian text. |
| Thai, Lao, Khmer, and Myanmar | Thai, Lao, Khmer, and Myanmar line breakingPreserved | Line breaks at character clusters. See Complex-script line breaks. |
| Interface languages | Editor UI in 14 languagesFull | Translated controls. See @docx-editor.dev/i18n. |
Before you deploy, test your target browsers and input methods. Start composition in an empty paragraph, in a table cell, and beside an inline picture.
The matrix reports editing, rendering, and round-trip support separately. A feature can display without editing controls, or survive save without displaying.
| Axis | Question |
|---|
| Editing | Can a user or the API change the feature? |
| Rendering | Does the feature display as the OOXML specification and document settings define? |
| Round-trip | Does it survive open, edit, save, and reopen? |
| Status | Meaning |
|---|
| Full | Supports the feature within the scope of its note. |
| Partial | Works with the limits in its note. |
| Render only | Displays correctly but is not editable. |
| Preserved | Remains as inert content through editing and save. |
| No | Is not supported. |
111 features trackedFull32 editingPartial38 editingPreserved2 editingNo39 editing
| Feature | Editing | Rendering | Round-trip | Notes |
|---|
| Bold, italic, underline, strikethrough | Full | Full | Full | Apply formatting to selected text or the word at the caret. At a word boundary or in an empty paragraph, formatting applies to the next text you type. |
| Input-method composition | Partial | Partial | Full | Type with your operating system input method, including in empty paragraphs and beside inline pictures. Committed text supports undo, collaboration, and saving. Candidate-window placement depends on the browser and operating system. |
| Format painter | Partial | Full | Full | Copy character formatting, plus paragraph formatting when your selection includes the paragraph mark. The target keeps its paragraph borders and character styles. |
| Subscript & superscript | Full | Full | Full | Raised and lowered text increases automatic and minimum line heights to fit. Exact line spacing keeps its specified height. |
| Font family & size | Full | Full | Full | Choose fonts and sizes from the picker, or configure custom, packaged, and Google Fonts sources. Accurate line wrapping requires font files; substitute fonts can change line breaks. Fonts can load in the background, but export waits for them. |
| Embedded fonts | Partial | Full | Preserved | The editor loads embedded fonts without configuration or network requests and uses them to measure text. Saving preserves the font files. You cannot embed additional fonts through the editor. |
| Text color (RGB + theme colors) | Full | Full | Full | Apply RGB colors or document theme colors to text. Saving preserves theme references so colors can follow the document theme. |
| Highlight & shading | Full | Full | Full | Apply standard highlight colors or custom shading fills. Shading patterns display as solid colors that approximate their average tone. |
| Right-to-left text: Arabic, Hebrew, Persian, and Urdu | Full | Full | Full | Edit Arabic, Hebrew, Persian, and Urdu text with mixed-direction paragraphs, lists, tables, and columns. Arabic letters join across supported formatting changes, but kerning across those changes remains unsupported. Some characters have no separate caret position. |
| Chinese, Japanese, and Korean text | Full | Full | Full | Type and format Chinese, Japanese, and Korean text with your operating system input method. Configure regional fonts through googleFonts({ cjk: true }) or @docx-editor.dev/fonts-cjk. Vertical text displays only in table cells. |
| Text effects (outline, shadow, emboss, emphasis mark) | No | Partial | Full | Solid, opaque RGB text outlines display. Other outlines, shadows, embossing, and emphasis marks remain saved but do not display. The editor has no text-effect controls. |
| Fit text (w:fitText) | No | Partial | Full | Existing fit-text groups expand or compress to their specified width and wrap as one unit. Text typed inside a group joins it. You cannot apply fit text through the editor controls. |
| Hidden text (vanish) | No | Full | Full | Hidden text occupies no space and remains in the saved document. Supported hidden paragraph marks join visible text into one flow; other paragraphs stay separate. The editor has no option to show hidden text. |
| Math equations (OMML) | Partial | Partial | Full | View inline and display equations, and edit supported fractions, radicals, scripts, and operators through the equation popover. Unsupported equations show text instead, and edits that cannot preserve their properties are unavailable. Saving preserves unedited equation markup. |
| Symbol characters (w:sym) | Partial | Full | Full | Insert and delete symbols as single characters. Symbols without a Unicode equivalent require their original font, and Find does not match symbols. You cannot edit existing symbol formatting. |
- Raised and lowered text, including inherited
w:position with subscript or superscript, adds to automatic and minimum line heights. Exact line spacing keeps its height.
- For equation limits, see Equations.
| Feature | Editing | Rendering | Round-trip | Notes |
|---|
| Alignment & justification | Full | Full | Full | Apply left, center, right, justified, or distributed alignment. Justified paragraphs keep natural spacing on their final line; distributed paragraphs stretch it. Document compatibility settings affect spacing around tabs, breaks, and floating objects. |
| East Asian typography | Preserved | Partial | Full | Document settings control spacing between scripts, punctuation compression, and punctuation at line ends. Behavior depends on document fonts, language, and compatibility settings. The editor has no typography controls or vertical Japanese composition. |
| Thai, Lao, Khmer, and Myanmar line breaking | Preserved | Partial | Full | Thai, Lao, Khmer, and Myanmar text wraps at character clusters, without dictionary-based word breaks. Insert a zero-width space (U+200B) to mark a word boundary. Table AutoFit keeps unspaced text together. |
| Line & paragraph spacing | Full | Full | Full | Set paragraph spacing and single, multiple, exact, or minimum line spacing. Contextual spacing removes gaps between adjacent paragraphs with the same style. Document grids and compatibility settings affect spacing and page breaks. |
| Keep with next, keep lines, widow/orphan control | Full | Full | Full | Set keep-with-next, keep-lines, widow control, and page-break-before options in the Paragraph dialog. These settings control paragraph and table placement across pages. Explicit page breaks and section boundaries end keep-with-next groups. |
| Indentation (incl. hanging indents) | Full | Full | Full | Set left, right, first-line, and hanging indents. Indent controls change the level of list items. Tab and Shift+Tab adjust paragraph indents, but move between cells inside tables. |
| Paragraph styles (Heading 1, Quote, custom styles) | Full | Full | Full | Apply document paragraph styles, including custom styles with numbering and indents. Enter starts the next paragraph with the following style specified by the current style. You cannot define styles through the editor controls. |
| Paragraph borders & fills | Partial | Full | Full | Edit paragraph shading and display existing paragraph borders. Common line borders display; decorative and three-dimensional borders use approximations. Saving preserves borders, but you cannot add, change, or remove them through the editor. |
| Tab stops & leaders | Partial | Full | Full | Set and clear tab stops in the Paragraph dialog, including stops inherited from styles. Existing alignment tabs and dot, hyphen, or underscore leaders display. Bar tabs remain saved but do not display and cannot be edited. |
| Drop caps & text frames (framePr) | No | Partial | Full | Supported text frames display in single-column sections, including single-line left-to-right drop caps. Unsupported frame layouts use ordinary paragraph flow, and exact-height frames can clip text. Text stays editable, but you cannot create, move, or resize frames. |
| Automatic hyphenation | No | No | Preserved | The editor preserves document hyphenation settings but does not hyphenate automatically. An optional hyphen permits a line break and appears at that line end. U+00AD displays as a hyphen without permitting a break. |
w:keepNext paragraphs form one group, of any length. Explicit page breaks and section boundaries end the group.
- With widow control, a following three-line paragraph stays whole.
w:keepLines keeps the whole following paragraph with the group when the group fits.
- In left-to-right text, an opening word wraps within the space after leading left tabs, without a blank line.
- Distributed paragraphs (
w:jc="distribute") stretch their last line, also in cells and beside floating objects.
- For text frames, see Text frames. For East Asian spacing, see East Asian text.
| Feature | Editing | Rendering | Round-trip | Notes |
|---|
| Bullet lists (multi-level) | Full | Full | Full | Create bulleted lists, continue existing lists, and change levels with Tab or the indent controls. Switching between bullets and numbers preserves item indents. List changes support tracked changes. |
| Numbered lists (decimal, roman, letters) | Full | Full | Full | Create numbered lists with decimal, Roman numeral, letter, and supported script-specific formats. Unsupported script-specific formats use decimal numbers. Document settings control marker spacing and indents. |
| Custom numbering definitions & style-linked numbering | Full | Full | Full | Apply styles with custom numbering definitions. Numbering follows the document style rules. |
| List continuation & restart | Full | Full | Full | Lists that share a numbering definition count together. A start override restarts the shared count at its specified level. Headers and footers share a separate count from the body. |
| Picture bullets (numPicBullet) | No | Partial | Preserved | Existing picture bullets display in the editor and PDF export. Missing or unsupported images use the bullet text instead. Saving preserves picture bullet definitions, but you cannot choose or change them through the editor. |
- Lists that share one
w:abstractNum count on one number per level.
- A
w:startOverride restarts that number once, at the first item of its list, on the overridden level only. Other lists continue from the restarted number. When the same w:lvlOverride replaces the level, its w:start takes precedence.
- Header and footer lists share one count that the body and notes do not join. The count runs over each section's referenced parts, in order. Hidden parts still count, and each explicit reference counts again. An inherited part reuses the earlier section's numbers.
| Feature | Editing | Rendering | Round-trip | Notes |
|---|
| Table insertion & cell editing | Full | Full | Full | Insert tables and edit cell text with fixed or automatic column widths. Document settings control widths, indents, and cell spacing. Compatibility modes can change alignment and sizing. |
| Visually right-to-left tables | Partial | Full | Full | Existing right-to-left tables display and support cell editing, including merged cells and repeated headers. Selection and column controls follow the displayed cell order. You cannot change table direction or resize the outer right edge. |
| Row/column insert, delete, resize | Full | Full | Full | Both adapters let you insert, delete, and resize rows and columns. Some merged cells limit resizing and automated row insertion. Suggesting mode does not support moving or deleting a whole table. |
| Table and cell borders & shading | Partial | Partial | Full | Both adapters let you edit cell borders and fill. Diagonal borders display, but you cannot edit or copy them through HTML. Direct table shading stays saved but does not display; use cell shading instead. |
| Merged cells (horizontal & vertical) | Partial | Full | Full | Merge rectangular cell selections or split cells into rows and columns. Suggesting mode permits these operations only inside your own pending table insertion. Concurrent merging can discard text that another participant types into a previously empty cell. |
| Tables split across pages | Full | Full | Full | Tables continue across pages with repeated headers and row splitting. Row heights, merged cells, and compatibility settings affect page breaks. Some oversized rows in older compatibility modes extend beyond the page or split differently. |
| Nested tables | Partial | Full | Full | Edit and resize nested tables without changing their outer tables. Nested tables can continue across pages. Header rows and merged cells affect where they split. |
| Table styles & conditional formatting (header row, banding) | Partial | Full | Full | Table styles control borders, cell shading, and text formatting, including header rows and banding. Conditional cell margins and whole-table conditional shading do not apply. The editor has no table-style picker. |
| Floating tables (tblpPr anchored position) | No | Partial | Full | Text wraps around floating tables at their saved positions. Page breaks depend on the anchor, available space, and document compatibility settings. You cannot edit floating-table positions from the interface. |
| Vertical cell text (textDirection) | No | Partial | Full | Existing top-to-bottom and bottom-to-top cell text displays and survives saving. Bottom-to-top text can clip at the cell edge. You cannot change cell text direction from the interface. |
- For table placement, row splits, and merged cells, see Table layout and Floating tables.
- Press Tab or Shift+Tab to select the next or previous cell. In the last cell, Tab adds a row when the document permits it.
- To insert a tab character in a cell, press Option+Tab or Ctrl+Tab. Browsers can reserve Ctrl+Tab.
- A multi-column section balances its final page before a continuous section. Earlier pages keep their distribution.
- The following continuous section starts below the tallest column.
- For
w:noColumnBalance, see Compatibility mode differences.
| Feature | Editing | Rendering | Round-trip | Notes |
|---|
| Inline images (paste, drag-drop, resize) | Partial | Full | Full | Both adapters let you insert, paste, and resize PNG, JPEG, and GIF images. Inserted images shrink proportionally when they exceed the available space. Place the caret in text before inserting another picture. |
| Floating images & wrap modes (square, topAndBottom...) | Partial | Full | Full | Both adapters support dragging, resizing, and nine text wrap modes for floating images. Text follows the saved wrap distances and image positions. Compatibility settings can change wrapping and page placement. |
| BMP and WebP images | No | Full | Full | Existing BMP and WebP images display at their saved size. You cannot insert these formats through the image controls. |
| SVG images | No | Full | Full | Embedded SVG images display at their saved size. Scripts and external references inside the SVG stay inactive. You cannot insert SVG images through the image controls. |
| WMF / EMF legacy vector images | No | Partial | Full | WMF and EMF images display as raster images in the editor and as vectors in PDF export. Failed conversions show a placeholder in the editor; PDF export omits them and reports a diagnostic. Saving preserves the original image bytes. |
| TIFF images | No | Partial | Full | Supported TIFF images display in the editor and PDF export; multi-page files show only their first page. Unsupported formats show a placeholder. You cannot insert TIFF images through the image controls. |
| Tracked image changes | Partial | Full | Full | Suggesting mode tracks image insertion and deletion; review actions require the EigenPal Pro License. Image property edits apply directly without tracked changes, and suggesting mode refuses picture replacement. Opening and saving existing image revisions require no review module. |
| Text boxes | Partial | Partial | Preserved | Edit text in supported upright text boxes in the body, headers, and footers, including during collaboration. Tables and rotated text remain read-only. Nested boxes, linked boxes, and automatic text shrinking can clip or show a placeholder. |
| Drawing shapes & geometry | No | Partial | Preserved | Preset shapes and supported custom shapes display with fills, outlines, and outer shadows. Shapes and grouped text remain read-only; additional effects require the drawing module. Unsupported shapes or groups show a placeholder and retain their text wrap area. |
| Legacy VML pictures & annotation groups | No | Partial | Preserved | Supported legacy VML pictures, simple shapes, and annotation groups display without changing their saved source. Unsupported rotation, clipping, or group members prevent the whole group from displaying. |
| Picture cropping (srcRect) | Partial | Full | Full | Both adapters let you edit picture cropping as percentages. Existing crop settings display and survive saving. |
| Picture adjustments (brightness, contrast, recolor) | No | Partial | Full | The editor displays brightness, contrast, grayscale, and black-and-white adjustments. PDF export applies fixed image opacity but reports unsupported color adjustments. Saving preserves the original adjustment settings. |
| Picture frames and outer shadows | No | Partial | Preserved | Pictures display supported outlines, outer shadows, and preset shapes in the editor and PDF export. Rotated pictures omit outlines and shadows; additional effects require the drawing module. You cannot edit effects, but saving preserves their settings. |
| Shape and picture effects (glow, inner shadow, reflection, soft edge, bevel rim) | No | Partial | Preserved | The drawing module displays glow, inner shadows, soft edges, supported reflections, and dark bevel rims. It requires the EigenPal Pro License; PDF export includes the module. Effects remain read-only, and unsupported reflections and 3-D materials do not display. |
| VML text paths | No | Partial | Preserved | The drawing module displays supported VML text paths with fills, outlines, shadows, and rotation. It requires the EigenPal Pro License; PDF export includes the module. Unsupported gradients, perspective extrusion, and missing shape definitions do not display. |
| Charts (DrawingML) | No | Partial | Preserved | The drawing module displays supported charts read-only from saved values and requires the EigenPal Pro License. Unsupported charts use a saved fallback or show a placeholder; PDF export reports omitted charts. Chart editing, clipboard transfer, and external data loading are unavailable. |
| Waterfall, funnel, histogram, Pareto, and box and whisker charts | No | Partial | Preserved | The drawing module displays waterfall, funnel, histogram, Pareto, and box and whisker charts read-only from saved values. It requires the EigenPal Pro License; some labels and layouts can differ. Treemap, sunburst, and map charts use saved fallbacks or show a placeholder. |
| DrawingML diagrams | No | Partial | Preserved | DrawingML diagrams display read-only from their saved drawing, including in PDF export. Diagrams without a saved drawing require the drawing module and EigenPal Pro License. Unsupported content shows a placeholder; changed diagram layouts do not recalculate. |
| Ink annotations (w:ink) | No | No | Preserved | Ink annotations do not display and cannot be edited. Saving preserves their markup. |
| Feature | Rendering and editing | Round-trip |
|---|
| Anchored text boxes | Insert and edit text boxes in the body, headers, and footers, with collaboration support. Boxes with tables are read-only. Linked boxes, automatic sizing, and rotation can clip content or show a placeholder. | Preserved |
| Drawing shapes | Display supported shapes with fills, outlines, and shadows. Additional effects require the drawing module; unsupported shapes show a placeholder. Shapes are read-only. | Preserved |
| WMF and EMF | Display as images in the editor and as vectors in PDF with the drawing module. Failed conversions show placeholders; PDF export omits them and reports an error. These images are read-only. | Full |
| Charts | Display read-only charts in the editor and PDF with the drawing module. Unsupported charts use their saved preview. Without a usable preview, the editor shows a placeholder and strict PDF export fails. | Preserved |
| DrawingML diagrams | Renders the saved diagram drawing. A diagram without its drawing needs the drawing module. Not editable. | Full |
| VML text paths | Renders with the drawing module. Without it, an inline text path shows a placeholder and a floating text path does not show. | Full |
- Groups with unsupported effects or 3D properties keep their unsupported behavior as a whole. The editor does not render only their supported members.
w14:textOutline renders when it is an opaque solid RGB outline. PDF export does not paint text outlines.
- Picture commands refuse charts. Deleting a chart removes its fallback too.
- A right-to-left line beside a floating object fills the passage to the right of the object first. Text never reorders across the object.
| Feature | Editing | Rendering | Round-trip | Notes |
|---|
| True pagination (font-metric pages) | Full | Full | Full | Page breaks, paragraph rules, fonts, and section settings determine pagination. You can insert manual page breaks and display their formatting marks. Manual page breaks inside table cells stay saved but do not start new pages. |
| Sections (margins, size, orientation, per-section headers) | Partial | Full | Full | Set page size, orientation, and margins for one section or the whole document. Insert next-page or continuous section breaks. Existing odd-page and even-page breaks display, but you cannot insert them. |
| Headers and footers (edit in place) | Partial | Full | Full | Both adapters let you edit headers and footers, including tables, pictures, page numbers, and tracked changes. Set first-page variants or link a section to the previous section. Selection and comment highlights display only in the body. |
| Watermarks (text & image) | Partial | Full | Full | Insert text or picture watermarks across the whole document. Watermarks display in the editor and PDF export. Separate watermarks for individual sections are unavailable. |
| Footnotes and endnotes | Partial | Partial | Full | Both adapters let you insert, edit, delete, and convert footnotes and endnotes. Notes continue across pages according to their placement and paragraph settings. The automation API edits existing notes but cannot create them; notes in headers and footers are unsupported. |
| Multi-column layout | No | Partial | Full | Existing sections display equal or unequal text columns, gaps, and separators. Continuous sections balance their final page unless older compatibility settings disable balancing. The editor has no column editing controls. |
| Page borders | No | Partial | Full | Existing page borders display with their saved offsets and first-page settings. Art borders do not display. You cannot edit page borders from the interface. |
| Line numbers (lnNumType) | No | No | Full | Line number settings survive saving. Line numbers do not display in the margin. |
| Different even & odd headers | Partial | Full | Full | Both adapters let you edit separate first-page, even-page, and default headers and footers. Displayed page numbers determine which even or default variant appears. Opening an even variant enables different even and odd pages. |
| Section vertical alignment (vAlign) | No | Partial | Full | Supported sections align body text at the center or bottom, or distribute space between paragraphs. Pages with multiple sections, columns, notes, or floating content stay top-aligned. Justified pages with tables also stay top-aligned. |
| Page background color/image (w:background) | No | No | Preserved | Page background colors and images do not display and cannot be edited. Saving preserves their markup and relationships. |
| Page number format (pgNumType) | No | Partial | Full | Page fields use the saved section numbering start and format unless the field specifies another format. Total-page fields use decimal numbers unless the field specifies another format. The editor has no section numbering controls. |
See Pages and sections for page break and section rules.
| Feature | Editing | Rendering | Round-trip | Notes |
|---|
| Tracked changes (insert, delete, format) | Full | Full | Full | Suggest and review text, formatting, and supported table edits with the EigenPal Pro License. Unsupported edits and some collaborative replacements are refused. Compare documents records differences as tracked changes outside collaboration. |
| Accept / reject changes (UI + API) | Full | Full | Full | Accept or reject individual changes or filtered groups through the interface or API with the EigenPal Pro License. Hidden authors and unsupported changes remain pending. Opening and saving existing changes requires no review module. |
| Comments (threads, replies, resolve) | Full | Full | Full | Add comments, replies, and resolutions with the EigenPal Pro License. Comments can target body text, headers, footers, and supported text boxes. Opening and saving existing comments requires no review module. |
| Programmatic redlining (code-proposed tracked changes) | Full | Full | Full | Propose native tracked changes through the document API on a server or in an open editor. Read accepted or rejected text and target word ranges for edits. The automation object model requires the EigenPal Pro License. |
| Tracked moves (move from/to) | Partial | Full | Full | Existing tracked moves survive save and reopen. Display and review controls require the review module and the EigenPal Pro License. Direct creation of move revisions is unsupported. |
| Tracked table cell shading | Partial | Partial | Full | Set colors for inserted, deleted, merged, and split cells through viewer preferences. Existing cell revisions and tracked rows determine the shading. Creating arbitrary cell merge and split revisions is unsupported. |
| Feature | Editing | Rendering | Round-trip | Notes |
|---|
| Hyperlinks (external) | Full | Full | Full | Insert, edit, and remove links with the toolbar, context menu, or Ctrl+K and Cmd+K. Links open only after user action and permit http, https, mailto, tel, and ftp targets. Field-based links work but remain read-only in the link panel. |
| Bookmarks & internal links | Partial | Full | Full | Add, find, navigate to, and delete bookmarks through the interface or document API. Internal links move the caret to their bookmark. Protected bookmarks and bookmarks inside data-bound controls refuse changes. |
| PAGE / NUMPAGES / SECTIONPAGES fields | Partial | Partial | Full | Page fields calculate page numbers and totals in the body, headers, and footers. Supported number formats follow section settings or field switches. Unsupported switches keep saved results, and wider calculated values do not move following text. |
| Table of contents | Partial | Full | Full | Insert a table of contents and refresh its entries or page numbers from headings and entry fields. Generated entries provide read-only navigation links. Unsupported source switches prevent refresh, and suggesting mode prevents removal. |
| REF and NOTEREF cross-references | Partial | Partial | Full | REF and NOTEREF resolve supported bookmark text, paragraph numbers, and note numbers in the body and notes. Unsupported switches and targets keep saved results. Header, footer, and text-box references also keep saved results. |
| AUTONUM field numbers | No | Partial | Full | AUTONUM, AUTONUMLGL, and AUTONUMOUT generate separate numbering sequences with supported number formats. They do not restart at headings, and unsupported switches produce no generated value. Saving preserves the source fields without adding results. |
| LISTNUM field numbers | No | Partial | Full | LISTNUM fields calculate numbers from document lists in the main text. Level and start switches control the number. Fields in headers, footers, notes, and text boxes keep saved results. |
| Style header references | No | Partial | Preserved | Header STYLEREF fields display text from supported character or paragraph styles by name. Unsupported switches and missing matches keep saved results. References in the body and footers also keep saved results. |
| Other field codes (DATE, SEQ, MERGEFIELD...) | Partial | Partial | Preserved | Most fields display saved results without recalculation; supported symbol and metadata fields display their values. You can enable editing for selected field results outside collaboration. The editor never executes macros or external field instructions. |
| Citations & bibliography | No | No | Preserved | The editor preserves citation fields, bibliography fields, and their source data. It does not calculate or edit citations. |
| Legacy form fields (FORMTEXT, FORMCHECKBOX, FORMDROPDOWN) | Partial | Full | Preserved | Fill supported text, number, and date fields, toggle checkboxes, and select dropdown entries, including under forms protection. Unsupported formats and fields with complex results remain preserved without filling. Disabled fields, viewing mode, and suggesting mode restrict changes. |
LISTNUM fields count on the counters of their list's numbered paragraphs. The number replaces any saved result.
- Saved results of fields nested in another field's instruction add no text, breaks, or links.
STYLEREF headers resolve supported display-name references. See Fields and cross-references.
| Feature | Editing | Rendering | Round-trip | Notes |
|---|
| Content controls (SDT): block, inline | Partial | Full | Full | Find, create, fill, and remove content controls through the interface or API. Control locks restrict edits, and data-bound text remains read-only. Supported value changes can become tracked changes, except in temporary controls or block controls with multiple paragraphs. |
| Repeating section controls | No | Full | Full | The editor displays and preserves repeating sections. Adding or removing items and changing section settings are unsupported. |
| Dropdown, checkbox, date, picture & gallery controls | Full | Full | Full | Fill dropdown, checkbox, date, picture, and gallery controls through controls that validate each value. Gallery choices support self-contained document blocks, but external templates and blocks with external dependencies are unsupported. Tracked text and date control creation works outside collaboration. |
| Custom XML parts & data binding | No | No | Preserved | The editor preserves custom XML parts and data-binding markup when you save. It does not evaluate general custom XML bindings. |
| Breaks outside runs (w:br, w:cr) | Partial | Partial | Full | The editor preserves breaks placed outside text runs without starting a line or page. Surrounding text remains visible and editable. Deleting text across these breaks keeps them. |
| Out-of-order and repeated markup | Full | Partial | Full | The editor recovers editable text from supported repeated or misplaced markup. Saving writes recovered content in schema order. Unsupported structures remain hidden and unchanged. |
| VBA macros | No | No | Preserved | The editor never executes macros. It preserves the vbaProject part when you open and save the document. |
| OLE & embedded objects | No | Partial | Preserved | The editor preserves embedded objects and shows supported inline preview pictures as read-only content. It never executes, loads, or updates embedded objects. Floating and linked objects show no preview, and clipboard operations refuse object content. |
| Document protection & editing restrictions | Partial | No | Preserved | Protection settings restrict editing, comments, or form filling according to the document mode. The editor cannot set or verify passwords, and permission exception ranges do not grant access. Remote collaboration updates bypass local protection checks. |
| Feature | Editing | Rendering | Round-trip | Notes |
|---|
| Real-time collaboration | Partial | Partial | Preserved | Yjs synchronizes supported document edits, participant cursors, and selections, with separate undo history for each participant. Offline edits merge after reconnection. Formatting can be lost when another participant moves the same text to another paragraph. |
| Find & replace | Partial | Full | Full | Search body text, tables, headers, footers, notes, and saved field results. Find also searches text boxes outside notes; selecting a match selects the drawing. Search highlights stay local and do not appear in saved files. |
| Scroll to and highlight paragraph references | Partial | Partial | Preserved | Scroll to paragraphs by ID without changing selection, focus, or undo history. Highlight body paragraphs, table cells, and block content controls. Text boxes and invalid or ambiguous references are unsupported. |
| Rich copy/paste (HTML clipboard) | Partial | Full | Full | Rich paste restores supported formatting, tables, images, notes, equations, fields, and tracked changes from compatible clipboard content. Sections, headers, footers, and comments do not transfer. Paste outside the body uses plain text. |
| Undo / redo | Full | Full | Full | Undo and redo restore edits and their selections. Typing groups end after a 1-second pause or 2 seconds of continuous input. Caret movement and other edits start separate steps, including during collaboration. |
| Detached editors, pop-out windows, and iframes | Full | Full | Full | Move an editor between same-origin windows without losing its document, selection, undo history, or collaboration session. Detached editors still save, run commands, and receive remote edits. Cross-origin windows are unsupported. |
| Editor UI in 14 languages | Full | Full | Full | Use @docx-editor.dev/i18n to translate editor controls into 14 languages. Arabic and Hebrew interfaces use right-to-left layouts. LocaleProvider also accepts an explicit direction for other languages. |
| Automatic fit / responsive zoom | Full | Full | Full | Automatic zoom fits the page width between 50% and 100%. Hosts can choose fixed zoom, uncapped width fitting, or smaller pages beside the review pane. Navigation and review panels adjust the available page width. |
| Refresh from server updates | Partial | Partial | Full | Load server-generated DOCX updates without replacing the editor instance, with optional change highlights. Updates preserve scroll but reset selection and undo history. Local edits, stale results, and collaborative sessions prevent replacement; this API does not compare or merge files. |
| Document automation object model | Full | Full | Full | Automate documents on a server or in an open editor with a documented subset of the Office.js document API. The automation object model requires the EigenPal Pro License. It includes no model integration, tool catalog, or MCP transport. |
The compatibility mode in w:compat changes clipping, page counts, table placement, and visible content. A valid mode directly under the settings element applies when w:compat has no valid mode. In this table, "Legacy" means mode 14 or earlier, or no declared mode.
| Behavior | Mode 15 and later | Legacy |
|---|
w:noColumnBalance | No effect. Sections balance. | Each column fills before the next. |
| Layout in table cell turned off | No effect. The object stays in its cell. | The object is placed against the page, unless it is positioned against its character or line. Wrapped rows move below it. |
| Square wrap on the largest side, equal sides | Text keeps the left side. | Text keeps the right side. |
| Header or footer text beside a floating table or wrapping object in the same part | Wraps beside it or moves below it. The part grows with that text. | Ignores the object. |
| Page- or margin-anchored floating table past the bottom | The first part ends at the bottom margin. | Breaks only past the page edge, and can reach that edge. |
| No-overlap floating table | Can move left or right of an earlier table. | Moves right only, then below. |
| Right-aligned floating table in the body | Keeps its position. | Moves right by its right cell margin. |
| Percentage-width tables | A percentage excludes the outer side rules. | Top-level tables measure against the text column plus outer cell margins, and align content with the text edge. |
| Right-to-left table | Moves left by half the mean width of its outer side rules. | No shift. |
| First-line indent in AutoFit minimum | Included. | Excluded. A word too wide for the indented first line breaks there. |
| Fixed tables, left-aligned, top-level | Keep their geometry. | First-cell content aligns with the table indent. |
| Last page of a table that leaves out its repeated header rows | Following content starts on the next page, even when it fits. | No forced page break. |
| First body row below a repeated header | Reserves the border it shares with the row above. | Reserves the wider of its top border and the header's bottom border. |
| Row that does not fit below repeated headers | The repeat is omitted. The row starts the page. | Headers stay. The row stays whole below them and runs past the bottom margin. |
| Unsplittable row taller than a page | Splits on a fresh page. Header rows repeat on the page after it. | Stays whole on a fresh page, past the bottom margin. Lines past the page edge do not show. Header rows repeat above it. |
| Line-end punctuation overflow | Hangs in justified and distributed paragraphs. | Hangs at every alignment, whatever the kinsoku switch. |
| Korean paragraph-final mark with punctuation compression | Marks other than 。 and 、 can hang. | Starts the next line. |
| Space shrink before a hanging mark | Justified and distributed lines shrink spaces first. | With punctuation compression and an East Asian default face, lines at any alignment shrink spaces to keep one more word. |
| Kana fitting in Traditional Chinese runs | Off. | On. |
| Distributed text with pair kerning | Kerned runs keep their letters together. | Kerned runs spread too. |
| Left-to-right justified text beside floating objects | Each passage compresses its own spaces. | No per-passage rule. |
The editor calculates layout from document fonts, themes, section geometry, and OOXML units. The layout result controls line and page breaks. Font bytes change measurement, wrapping, and pagination.
| Area | Behavior |
|---|
| Letters | Latin and Greek letters use mathematical italic from the math font, unless m:sty sets plain, bold, or bold italic. Run bold and italic do not change them. |
| Digits | ASCII digits in an authored text font use that font with the math style and run bold or italic. Bold math styles keep mathematical bold digits. |
| Mixed fonts | w:rFonts slots select faces by script, as in ordinary text. A run that needs two faces shows a text fallback. |
| Sizes | Each run uses its w:sz, from 1 through 9999 half-points. w:szCs alone does not set the size. Conflicting sizes show a text fallback. |
| Script and fraction text | 73 percent of the run size, rounded down to a half point. Nested scripts use 60 percent. |
| Display equations | m:oMathPara, or an m:oMath alone in its paragraph. No display style: they use inline fraction rules and part sizes. |
| N-ary operators | Inline: limits sit to the right, whatever m:limLoc says. Display: the operator enlarges and limits follow m:limLoc. |
| Operators | Take math spacing by class. A hyphen-minus draws as a minus sign. |
| Line height | Later runs add only their glyph height and math leading. Multiple and exact line spacing apply as for text. |
| Math settings | Document-wide limit defaults in m:mathPr are not read. |
| Save | Equations keep their OMML source. Unsupported properties keep the text fallback and stay unchanged. |
Compact equation replacement is disabled when it cannot keep the source. The equation popover shows the reason. This applies to:
- Integrals, because replacement writes only sums.
- Limit location
subSup.
- Mixed source sizes.
- Run formatting, bars, or control properties (
m:ctrlPr) other than one shared default: Cambria Math, italic, one size, and a language.
- Body frames support numeric and relative positions, fixed or column width, and
auto, atLeast, and exact heights. Exact heights clip content.
- Adjacent paragraphs with identical resolved
w:framePr share one frame.
- All
ST_Wrap values use a rectangular contour. none, notBeside, and vertical inline move text below the frame.
- Single-line left-to-right dropped caps are supported. Multiline and right-to-left dropped caps keep ordinary flow.
- Support covers single-column sections only. Frames with unsupported drawings, notes, or revisions keep ordinary flow.
- Header frames support page-anchored numeric positions. Headers with fields or revisions, and frames with exact heights or negative positions, keep ordinary flow.
- You cannot create, move, or resize frames. Save keeps every frame property.
| Area | Behavior |
|---|
| Width over 100% | A percentage up to 655.34% extends the table past the text column. Larger fiftieths values wrap at 65536. |
| AutoFit minimum | A column widens for its widest unbroken word, with indents and cell margins. East Asian text breaks at legal line breaks. |
w:noWrap | Keeps the column at least as wide as the cell's preferred width. Text still wraps. |
| Wide minimums | Columns shrink in proportion to their minimums. A top-level AutoFit table with an absolute width wider than the column can pass the page edge. |
| Fixed tables without a width | Positive one-column cell widths can replace a wider grid. Hidden revision rows prevent this. |
| Nested fixed tables | Paint no wider than their cell. |
| Cell spacing | Applies on each side of each cell, out of the table width. |
| Revisions | AutoFit keeps the minimum width of each revision view. |
| Manual page breaks in cells | Add no line or page. They stay in the document. |
| Bottom-to-top text | Does not make the row taller. The cell width clips overflow. |
| Fixed-height rows | Show lines that start in the content box. Text below it does not continue. |
| Exact height taller than a page | Starts a fresh page, does not split, and stops at the bottom margin. |
| Fixed-height row at a page end | The bottom rule sits outside the authored height. Applies to collapsed, equal single rules up to 12pt. Eighth-point widths, including 0.625pt, keep their size. |
| Row minimum height | A row starts only where its minimum height and closing rule fit. A split row keeps its minimum on the next page. |
| Keep-with-next tables | Measure at most 256 kept rows and the next row. |
| Vertical merges | Shared rows count once. Content that does not fit is clipped at the last row. |
| Merges clipped at the first row | Nested or overlapping merges, a shorter merge starting in the same row, and a two-row span across a page. |
| Legacy unsplittable row taller than a page, with a nested table | Splits, although it should stay whole. This is a known difference. |
| Legacy unsplittable row taller than a page, with footnotes | The page keeps the first line of the first footnote. The rest continues on the next page. |
- Only WordprocessingML properties control placement. Foreign XML extensions stay saved.
- Text does not wrap into gaps of 0.25 inches or less beside a table.
- Text-anchored tables with numeric vertical offsets follow their next paragraph onto its page and column.
- A table that pushes its own anchor past the page bottom stays. Only the anchor moves.
- When the anchor has a page break before it, a text-anchored table that fits the space left stays on the current page. Only the anchor starts the next page.
- Two tables with identical positions and no paragraph between them stack into one table.
- A text-anchored table breaks across pages when the space left holds its opening: the header rows and the first line of each cell in the first body row.
- A text-anchored table stays whole when it has a text distance above, a negative offset, more than one section column, or
w:doNotBreakWrappedTables. A table taller than a page still breaks.
- A header or footer table wraps body text on every page that shows that part.
- You cannot edit floating-table properties. Save keeps them.
| Area | Behavior |
|---|
| Page break at paragraph start | Moves the following text to the next page, with its space before, number, and top border. |
| Page break exceptions | A paragraph with only one break, or with hidden content after it, keeps the ordinary rule. So does a paragraph that anchors a floating object. |
| Page break and line break | A page break directly followed by a line break starts no page. |
| Column break at paragraph start | The following content starts in the next column, or on the next page after the last column. |
| Continuous section | Shares the previous page when page size and orientation match. Its header and footer start on the next page. |
| Odd-page and even-page sections | Can insert an empty sheet. NUMPAGES counts it; SECTIONPAGES does not. |
| Empty paragraph that ends a section | Ignores its own page break before and adds no blank page. Text, a tab, hidden text, or a field turns this off. |
| Line grids | Automatic body lines snap to whole grid steps. Table cells snap only with w:adjustLineHeightInTable. Headers, footers, and text boxes do not snap. |
| Paragraph spacing | Adjacent spacing uses the larger value. w:doNotUseHTMLParagraphAutoSpacing adds the values and turns off automatic spacing. |
| Empty paragraph marks | A named character style sets their font. Direct mark properties override it. |
- Each section numbers its notes from its own
w:footnotePr and w:endnotePr: format, start value, restart rule, and footnote position.
- Unset values default to decimal footnotes, lowercase Roman endnotes, start 1, continuous numbering, and footnotes at the page bottom.
- Note properties in
settings.xml do not apply. The endnote position is the exception: it comes from settings.xml only, for the whole document.
- A note number is the section start value plus the note's index in its domain: the document, section, or page. For example, a section that starts at 10 after two earlier notes numbers its notes 12 and 13.
- For placement and continuation, see Footnotes and endnotes.
- Supply font bytes for accurate measurement. See Fonts and measurement.
- The font resolver also receives faces of SYMBOL fields and numbering markers.
- Symbol and Wingdings bullets use a Unicode fallback when the font is missing. Layout keeps the symbol font metrics.
- No-break spaces and word joiners keep their break behavior across runs.
- Paragraph
w:bidi controls alignment and group order. Run w:rtl controls direction within a group.
w:themeFontLang selects theme fonts for Latin, East Asian, and complex-script tokens.
- Thai, Lao, Khmer, and Myanmar text wraps at any character cluster that fits, not at dictionary words.
- Insert a zero-width space (U+200B) to mark a word boundary.
- Line breaks never split a cluster. A Khmer coeng or Myanmar virama keeps its stacked consonant.
- Table AutoFit keeps an unspaced run of these scripts whole.
- In every script, a dash between letters is a break position across runs.
East Asian spacing and punctuation rules depend on w:rPrDefault in the styles part:
w:rPrDefault | East Asian rules |
|---|
| Omitted | Apply |
| Names an East Asian font | Apply |
| Names a known Latin font, such as Arial | Off for justified East Asian spacing and automatic spacing |
| Any other value, including an empty element | Off for justified East Asian spacing and automatic spacing |
| Setting | Behavior |
|---|
w:autoSpaceDE, w:autoSpaceDN | Add space between East Asian text and Latin letters or digits. An authored false turns it off. |
w:kinsoku, w:noLineBreaksBefore | Keep prohibited characters off line starts. Kept units move to the next line together. |
w:overflowPunct | Lets a line-end mark hang past the margin. See Compatibility mode differences. |
w:characterSpacingControl | compressPunctuationAndJapaneseKana lets kana compress by up to 1/16 em to fit a prohibited character on a full line. |
w:kern | At the font size in both runs, adjacent full-width punctuation shares a half-cell bearing. Kana and ideographs keep their advances. |
w:noPunctuationKerning | Turns off punctuation pair compression. |
Font hints (w:hint="eastAsia") | Select the East Asian face for punctuation, symbols, Greek, and Cyrillic. Missing glyphs keep the Latin face. |
- Kana otherwise keep their natural advances and authored spacing. Korean runs never fit kana.
- Without East Asian defaults, only distributed paragraphs hang marks.
- A single-spaced line in a CJK face is 1.3 times the face's ascent plus descent.
- Localized family names, such as
メイリオ, resolve to the face of the English name.
- Table AutoFit uses compressed punctuation pairs for the minimum width.
- Vertical Japanese layout is not supported.
A DOCX file is a ZIP package with XML parts and binary payloads. The editor preserves structure, not bytes.
| Content | Save behavior |
|---|
| Modeled OOXML | Serializes from typed document nodes. |
| Unmodeled XML elements and attributes | Re-emits generic nodes in place. |
| Legacy VML, custom XML, and add-in markup | Preserves structural content. |
| Media, VBA projects, embedded fonts, and OLE binaries | Copies package payloads unchanged. |
| Relationship IDs, bookmark names, style IDs, and numbering definitions | Keeps references intact. |
| Tracked changes | Writes w:ins and w:del revisions. |
| Theme colors | Keeps theme references. |
- Rewritten XML parts have no byte-identity guarantee.
- Unsupported content can survive save without displaying or staying editable.
w:br and w:cr outside runs keep their position and start no line or page.
- A
w:tab or w:t outside a run makes its paragraph unknown content. The paragraph is saved but does not render and is not editable.
- Continuous integration checks real documents with a canonical tree fingerprint and a save-and-reopen semantic digest.
If untouched content is lost or changed, report a round-trip issue with the source document. For other support, contact docx-editor@eigenpal.com.
| Concern | Behavior |
|---|
| Browser uploads | The editor does not upload documents or call a conversion service. |
| Macros | VBA payloads are preserved and never run. |
| OLE | OLE payloads are preserved and never run. Supported inline objects show their cached preview. |
| Calculated fields | Supported fields update display text only. Macros, DDE, and external includes stay inert. |
| Hyperlinks | Allowlisted targets open only after a user gesture. |
| Server editing | Your host controls where DOCX data runs. |
| External models | @docx-editor.dev/editor-api includes no model integration or transport. |
Your application controls any data sent to another service or model.
| Package | License |
|---|
@docx-editor.dev/core, react, vue, and i18n | Apache 2.0 |
@docx-editor.dev/fonts | Apache-2.0 AND OFL-1.1 AND LicenseRef-GUST-Font-License |
@docx-editor.dev/fonts-cjk | Apache-2.0 AND OFL-1.1 |
@docx-editor.dev/docx-to-pdf, editor-api, and pro | EigenPal Pro License |
Packages use Semantic Versioning in one fixed version group. Contributions require a Contributor License Agreement. For Pro terms, see the pricing page.