npm / @tiptap/markdown
@tiptap/markdown
What changed in @tiptap/markdown 3, from its official release notes, upgrade guides and advisories. Sources checked 2026-10-19.
1 breaking1 behavior and defaults27 fixes and other
See which of these apply to your code, ranked, in your agent:
npx @unstale/cli init@tiptap/markdown 329 changes
Breaking changes 1
The parser splits mixed bullet and task lists into separate bulletList and taskList nodes.
Behavior and default changes 1
Code detection for skipping encoding uses the extension spec’s
code: trueproperty instead of hardcoded type names, supporting custom code extensions.
Fixes and other changes 27
Markdown containing an unclosed inline HTML tag such as <b> no longer produces an invalid document; the tag is dropped and its text is kept.
Parsing markdown now preserves blank lines after block elements such as headings and tables, preventing content from losing a blank line on each parse/serialize cycle.
Unrecognized HTML detection works without window.DOMParser or HTMLUnknownElement, preserving angle-bracket placeholders as literal text in SSR and Node environments.
Parsing with injected Marked instances now respects custom markdown tokenizers registered via marked.use(...).
Parsing a backslash-escaped Markdown character now produces a literal text node instead of silently dropping the character.
Serialization now backslash-escapes Markdown inline syntax characters in non-code text nodes so reparsing the output does not misinterpret them as formatting delimiters.
Text inside unknown HTML-like tags is preserved as literal text during markdown parsing instead of being silently swallowed, preventing downstream contentMatchAt errors with complex schemas.
Fixes extra mark tokens appearing after inline atom nodes during Markdown serialization.
Prevents adjacent marks of the same type with different attributes from being merged during Markdown serialization.
Fixes peer dependency resolution conflicts when installing dependencies after package updates.
Markdown parsing decodes HTML entities to literal characters, and serialization re-encodes <, >, and & while preserving double quotes; code content remains literal.
Custom markdown tokenizer helper lexing now uses Marked's active lexer, preventing ordered list parsing from breaking inline tokenization in following paragraphs.
Fixed serialization and round-tripping of overlapping bold and italic markdown.
Empty paragraphs now serialize with natural blank-line spacing for the first paragraph in a run and markers for subsequent empty paragraphs at the same level; parsing preserves them when converting markdown back to JSON.
Fixed getMarkdown() returning instead of an empty string when the editor is empty.
When adjacent to alphanumeric text, **)** requires whitespace under the CommonMark specification.
Fixed markdown HTML parsing when the window object is unavailable in server-side environments.
Fixed parsing collapsing multiple blank lines.
Fixed serialization doubling newlines.
Fixed ordered list numbering when a list has a non-default start value.
Fixes incorrect Markdown output when underline is mixed with bold or italic whose ranges do not fully overlap.
Fixed handling of trailing and leading whitespace when serializing inline marks to Markdown.
Fixed CommonJS compatibility by downgrading the marked dependency from v16 to v15.
Marks no longer incorrectly continue after hard breaks in markdown output.
Marks are resolved in the correct order so nested marks render correctly in markdown.
Fixes parsing of mixed inline HTML within Markdown content so inline HTML fragments are parsed correctly.
Editors no longer throw an error when content is an empty string and contentType is markdown.