What is the difference between ATX and Setext headings?
ATX headings use # prefix (# H1, ## H2, up to ###### H6) and are the modern convention used by GitHub, GitLab, and most static site generators. Setext headings use underlines (=== for H1, --- for H2) but only support two levels and require knowing the line above. Prettier and most markdownlint configs prefer ATX. The formatter normalises everything to ATX.
Should I use - or * for bullet lists?
Both are valid CommonMark. The dominant convention in 2026 is - (hyphen) — used by Prettier, the GitHub style guide, and most open-source READMEs. * (asterisk) is also common, especially in older Markdown. + (plus) is rare. Pick one style and stay consistent within a document; the formatter does not change your bullet character but fixes spacing after it.
How are blank lines between blocks normalised?
Markdown requires exactly one blank line between block elements (paragraphs, lists, headings, code blocks). Multiple consecutive blank lines render as a single blank in every CommonMark parser, but they bloat the source and create noisy diffs. The formatter collapses 3+ blank lines to exactly one — a Prettier and markdownlint convention.
How are tables formatted?
GitHub Flavored Markdown tables use pipes and a separator row (| --- |). Prettier and most formatters align column widths so each cell pads to the longest entry, and the separator row matches the column count. Alignment markers (:---, :---:, ---:) for left/center/right alignment are preserved. The formatter ensures one space inside each pipe.
Are fenced code blocks preserved exactly?
Yes. The interior of a fenced code block (between ``` and ```) is preserved byte-for-byte — that is essential because code samples cannot tolerate reformatting. The formatter only ensures a blank line before and after the fence, and that the language tag stays on the opening fence (```javascript not ``` javascript).
Does formatting Markdown change how it renders?
No. CommonMark and GFM are whitespace-tolerant: extra spaces after # in a heading, multiple blank lines, and inconsistent list spacing all render identically. Formatting only normalises the source so diffs are clean and the file is easier to maintain. The rendered HTML is byte-identical.
Does it handle MDX (Markdown with JSX)?
Partially. The formatter normalises Markdown-level constructs (headings, lists, tables, code fences) inside MDX files. JSX components (<MyComponent />, ESM imports) are left as-is — formatting JSX requires a JS parser. For full MDX formatting, use Prettier with the MDX plugin.
Is the Markdown I paste sent to your servers?
No. Formatting runs entirely in your browser using JavaScript. Documentation containing internal API names, draft content, or unreleased feature notes never leaves your device. Open DevTools → Network and click Format to verify.