SuperDoc v1.0.0 — Breaking changes & migration guide
This document describes all breaking changes between SuperDocv0.x and v1.0.0. It is intended for customers upgrading to v1.
TL;DR
SuperDoc v1.0.0 is a major architectural release. Key impacts:- A new layout engine is now the default rendering system
- Pagination, lists, and paragraph formatting were reimplemented
- Several extensions, commands, and configuration options were removed
- Selection, comments, and tracked-changes behavior changed
1. Version & packaging
- Version jump:
0.35.3 → 1.0.0 - This release intentionally includes breaking API and behavior changes
- v0 will continue to be supported as a “long term support” (LTS) line for some time
Bundler requirements (ESM)
SuperDoc v1 introduces a new internal layout engine stack (packages under@superdoc/*). You do not need to install these directly—they are dependencies of superdoc.
Bundlers must support ESM modules (or be configured to transpile ESM dependencies from node_modules).
2. Layout engine is now default (CRITICAL)
paginationconfig optiontogglePagination()helper- Pagination toolbar controls
layoutEngineOptions to customize page size, margins, zoom, and other layout behavior.
3. Pagination extension removed
The v0Pagination extension was removed. If you were explicitly including it, remove it from your extensions list.
4. Lists reimplemented (HIGH IMPACT)
Removed extensions
BulletListOrderedListListItem
paragraphProperties.numberingProperties).
Why this changed: In Microsoft Word, lists are paragraph-level numbering properties (not separate list nodes). v1 adopts the same model so lists behave like Word and match DOCX semantics.
Removed commands
wrapInListsinkListItemliftListItemsplitListItemdeleteListItem
Replacement commands
5. Paragraph model changes (HIGH IMPACT)
Attribute location changed
Most paragraph formatting that previously lived onnode.attrs.* is now under node.attrs.paragraphProperties, including:
indent,spacing,borders,justifytabStops,keepLines,keepNextstyleId
New access pattern
6. Commands & formatting changes
Removed extensions
TextIndentLineHeight
Replacement commands
- Indent:
increaseTextIndent(),decreaseTextIndent(),setTextIndentation(points),unsetTextIndentation() - Line height:
setLineHeight(multiplier),unsetLineHeight()
7. TypeScript support
- Core editor code migrated to TypeScript
- Strongly typed commands, events, and schema
8. CSS & styling removals
Removed:- Pagination CSS
- List-item CSS
- Header/footer editor CSS
9. Ruler placement requires a container
The ruler now teleports into a host element instead of always rendering inline. Pass a container selector/element viarulerContainer and enable it with rulers: true:
rulerContainer is provided, the ruler renders inline, but providing a dedicated container is the supported path going forward.
10. DOM data attributes for lists changed
In v0, list<li> nodes emitted many data-* attributes (e.g., data-num-id, data-level, data-indent, data-num-fmt, data-font-size, data-font-family, data-marker-type, data-list-level). In v1, lists are paragraphs with numbering properties, and only these remain on list paragraphs:
data-marker-typedata-list-level(JSON)data-list-numbering-type
paragraphProperties.numberingProperties (not in data-*). If you scraped DOM attributes for integrations or overlays, read the paragraph attributes/resolved properties instead.
11. Stored document migration (JSON & Yjs)
Persisted documents created on v0 need migration to load cleanly in v1 because schema and layout defaults changed.Yjs collaboration docs (recommended flow)
- Add your own migration flag (e.g., a string in your document metadata) and check it before running.
- Export/import to force the v1 importer to rebuild structure:
- Export DOCX from the v0 document.
- Import that DOCX with the v1 editor (headless/Node) to produce a new YDoc.
- Validate the migrated doc.
- Persist the migration flag in your metadata so it doesn’t rerun.
- Keep a pre-migration snapshot for rollback.
- Store the migrated Yjs update
Plain JSON docs (non-collab)
If you store ProseMirror JSON, run an export/import pipeline to re-hydrate with the v1 importer:- Keep a v0 editor runtime (headless/Node). Load the stored v0 JSON into the v0 editor.
- Export DOCX from the v0 editor.
- Instantiate a v1 editor and import that DOCX.
- Export the new v1 JSON with editor.getJSON()
Why DOCX export/import?
Using DOCX as the source of truth is the best way to perform this migration. The DOCX data structure is stable and the import/export pipeline is the most reliable way to “upgrade” documents.12. Migration checklist
- Upgrade to
superdoc@^1.0.0 - Update TypeScript imports/types if you rely on editor typings
- Remove legacy pagination/list/header-footer CSS overrides you no longer need
- If you have custom extensions, verify they work correctly
- If you have customized any library styles, verify they work correctly
Final notes
- v1.0.0 is not a drop-in upgrade
- Most breaking changes are architectural and intentional
- The new layout engine enables accurate pagination, better performance, and long-term stability

