@dprint/markdown
- 0.26.0 is the latest, published 3 October 2026.
- No known security advisory.
- 0.x: 55 releases since 19 June 2021, 7 in the last 90 days.
Releases in the last 90 days
Feed of releases and advisoriesEvery stable release, newest first. Notes are quoted as the maintainers published them.
0.26.0
3 October 2026Support range formatting
Changes
feat: support range formatting
Install
Then in your project's dprint configuration file:
Specify the plugin url in the
"plugins"array or rundprint config add markdown.Add a
"markdown"configuration property if desired.{ // ...etc... "markdown": { // markdown config goes here }, "plugins": [ "npm:@dprint/markdown@0.26.0" ] }
JS Formatting API
JS Formatter - Browser/Deno and Node
0.25.0
2 October 2026Add table.minColumnWidth config option
Changes
feat: add
table.minColumnWidthconfig option
Install
Then in your project's dprint configuration file:
Specify the plugin url in the
"plugins"array or rundprint config add markdown.Add a
"markdown"configuration property if desired.{ // ...etc... "markdown": { // markdown config goes here }, "plugins": [ "npm:@dprint/markdown@0.25.0" ] }
JS Formatting API
JS Formatter - Browser/Deno and Node
0.24.0
10 September 2026Add wrapCodeSpans config option, on by default
Changes
feat: add
wrapCodeSpansconfig option, on by default
Install
Then in your project's dprint configuration file:
Specify the plugin url in the
"plugins"array or rundprint config add markdown.Add a
"markdown"configuration property if desired.{ // ...etc... "markdown": { // markdown config goes here }, "plugins": [ "npm:@dprint/markdown@0.24.0" ] }
JS Formatting API
JS Formatter - Browser/Deno and Node
0.23.3
3 September 2026Bound the search for an emphasis opener by where a closer was rather than its index
Changes
fix: bound the search for an emphasis opener by where a closer was rather than its index
fix: don't write three bullets of one character alone on a line, which read as a thematic break
fix: end a raw text html block at the close tag of any raw text element
fix: escape a backslash written before the whitespace that ends a line
fix: keep a line that only reads as text because of where it is from being moved where it starts a block
fix: only read a destination whose parentheses are balanced
fix: read a setext underline as one before taking it as the destination of a definition
fix: read the decorations of a block back out of what it is written as
fix: write a code span with backticks that no run written before it would pair with
fix: write a decoration read out of a longer delimiter run with the configured kind
fix: write emphasis around strong as one run of the configured character
Install
Then in your project's dprint configuration file:
Specify the plugin url in the
"plugins"array or rundprint config add markdown.Add a
"markdown"configuration property if desired.{ // ...etc... "markdown": { // markdown config goes here }, "plugins": [ "npm:@dprint/markdown@0.23.3" ] }
JS Formatting API
JS Formatter - Browser/Deno and Node
0.23.2
29 August 2026Only write an opening delimiter run that reads one way
Changes
fix: only write an opening delimiter run that reads one way
fix: read a continued line without the indentation it is written with
Install
Then in your project's dprint configuration file:
Specify the plugin url in the
"plugins"array or rundprint config add markdown.Add a
"markdown"configuration property if desired.{ // ...etc... "markdown": { // markdown config goes here }, "plugins": [ "npm:@dprint/markdown@0.23.2" ] }
JS Formatting API
JS Formatter - Browser/Deno and Node
0.23.1
27 August 2026Keep _ emphasis beside punctuation that is not ascii
Changes
fix: keep
_emphasis beside punctuation that is not ascii
Install
Then in your project's dprint configuration file:
Specify the plugin url in the
"plugins"array or rundprint config add markdown.Add a
"markdown"configuration property if desired.{ // ...etc... "markdown": { // markdown config goes here }, "plugins": [ "npm:@dprint/markdown@0.23.1" ] }
JS Formatting API
JS Formatter - Browser/Deno and Node
0.23.0
26 August 2026A markdown parser written for formatting (#224, #260). The plugin no longer goes through pulldown-cmark. The new parser keeps what a formatter needs and a renderer throws away — exact delimiters, indentation, line breaks, link reference definitions — which is what makes most of the fixes below possible.
Changes
A markdown parser written for formatting (#224, #260). The plugin no longer goes through
pulldown-cmark. The new parser keeps what a formatter needs and a renderer throws away — exact delimiters, indentation, line breaks, link reference definitions — which is what makes most of the fixes below possible.Html is formatted now (#255, #257, #260). Tags, attributes, and their content get laid out rather than passed through untouched, with a set of
html.*options to control it, includinghtml.skipFormatto turn it back off.Definition lists are supported (#211).
Options moved under namespaces —
heading.,list.,codeBlock., andtable.(#225, #250, #260).
Performance
Measured over a corpus of 3,532 real-world markdown files (21.8 MB), code block formatting disabled, best of three runs on the same machine:
0.22.1 0.23.0 Time 964 ms 347 ms 2.8x faster Allocations 10.4M 1.2M 8.7x fewer Bytes allocated 6.5 GB 0.8 GB 8.4x less Throughput 23 MB/s 63 MB/s That is with 0.23.0 doing strictly more work, since it also parses and formats every piece of html in those files, which 0.22.1 didn't do at all. 0.22.1 also failed outright on 22 of the 3,532 files; 0.23.0 formats all of them (#254).
Breaking changes
Options moved under namespaces
The old names still work, and
dprint config updatewill now rewrite them for you (#225, #250, #260):Old New headingKindheading.kindunorderedListKindlist.unorderedMarkerlistIndentKindlist.indentKindThe old names will continue to work for the foreseeable future.
Html
html.skipFormat(defaultfalse) — leave the html written in the file as it was rather than laying out its tags and their content (#255).html.useTabs(default: the globaluseTabs, elsefalse) andhtml.indentWidth(default: the globalindentWidth, else2) — how the html inside the file is indented (#255).html.selfClosingSpace(defaulttrue) — whether to write a space before the/>of a self-closing tag, so<br />rather than<br/>(#255).html.preferSingleLine(defaultfalse) — whether to pull an element's content, or a tag's attributes, onto one line when they fit. Off by default, so content written across lines stays across lines and is only reindented (#259).The indentation of an html block's first line is maintained (#218), and an html block that formatting would otherwise cut short is kept whole (#257).
New configuration
Text wrapping
textWrap: "sentence"(#239) — one sentence per line, ignoring the line width. This is the mechanical half of semantic line breaks: a break goes where a sentence ends and nowhere else, so a diff stays scoped to the sentences you actually edited.textWrap: "maintainAndWrap"(#251) — keeps the line breaks that were written but breaks up any line running past the line width. No line is ever pulled up into the one above it.wrapUnspacedScripts(defaultfalse) — whether to break a line between the characters of a script written without spaces between its words, such as Chinese or Japanese. Off by default, because Chromium and WebKit render such a break as a space (Firefox doesn't), so a break the formatter wrote would show up in the rendered text for most readers (#231, #258).
Blank lines
maxBlankLines(default1) — the maximum number of consecutive blank lines to keep between blocks (#236).heading.blankLinesAbove(default: unset) — the number of blank lines to write above a heading, written even wheremaxBlankLinesis lower. A heading drawn up against the block above it inside a list is left there, which keeps the list tight (#249).
Hard breaks
hardBreakKind(default"backslash") — write hard line breaks as a trailing backslash or as two trailing spaces ("doubleSpace"). Note that plenty of tools strip trailing whitespace, which would silently delete double-space breaks. Those two spaces don't count toward the line width (#217, #229).
Quality and security signals
What npm and deps.dev say about the latest release. Signals, not a verdict.
Reading npm and deps.dev…
Registry facts last checked 15 October 2026. Releases and advisories last read 15 October 2026.
Know when your own dependencies move
Inlinr tracks your coding time automatically. Switch dependency tracking on for a project and it reads that repository's manifest to show what is behind and what has been deprecated — off by default, one project at a time.