## Release notes v2.4
This release **removes** the legacy exporter and *adds* a [webhook API](https://example.com/docs/webhooks).
- Faster cold start
- New `--dry-run` flag
| Endpoint | Method |
|---|---|
| /v2/export | POST |
| /v2/status | GET |
```bash
curl -X POST https://api.example.com/v2/export \
-H "Authorization: Bearer $TOKEN"
```
Posted by the platform team
HTML to Markdown converter
Paste HTML or a copied web page, get clean Markdown. Semantic tags map to Markdown, inline styles are dropped, tables and code blocks survive. Free, in your browser.
Paste HTML
Paste raw HTML source, or select part of a web page, copy, and paste. The clipboard carries the HTML either way.
Check the Markdown
The right pane shows the exact .md output. Pick heading style, inline or reference links, and the fence character.
Download .md
Save the file or copy it into your notes, a README or a docs repo. Nothing was uploaded.
How HTML maps to Markdown
HTML has around a hundred elements. Markdown has a dozen constructs. An HTML to Markdown converter is really a set of decisions about which elements carry meaning, which carry only presentation, and what to do with the ones Markdown cannot express. MDtoDOCX makes those decisions in the open so the output is predictable.
Semantic tags become Markdown
<h1> to <h6> become # to ######. <strong> and <b> become **bold**; <em> and <i> become *italic*; <del> and <s> become ~~strikethrough~~. <a href> becomes [text](url), <img> becomes  with the alt attribute preserved. <ul>, <ol> and nested <li> become indented lists, with the start attribute respected. <blockquote> becomes > lines, <hr> becomes ---, and a <br> inside a paragraph becomes a hard line break. Loose lists, where each item is wrapped in <p>, stay loose so the blank lines between items are kept.
Inline styles are discarded on purpose
Colours, font sizes, margins and font-family have no Markdown equivalent, so style attributes are dropped along with class and id. Wrapper elements that carry no meaning, such as <div>, <span>, <font> and <center>, are unwrapped and their text flows into the surrounding block. There is one deliberate exception: a <span> whose only styling is font-weight: bold or font-style: italic is treated as <strong> or <em>, because that is exactly how Google Docs and Word emit emphasis when you copy from them. <script>, <style>, <nav>, <aside>, <head> and HTML comments are removed entirely, which is why pasting a whole article page usually gives you just the article.
Whitespace is normalised, except inside <pre>
Browsers collapse runs of spaces and newlines in ordinary HTML, so the converter does the same: any run of whitespace outside a preformatted block becomes a single space, and text nodes that are only whitespace between block elements are removed. Inside <pre> every character is kept. This is what stops indented HTML source from turning into indented, accidental code blocks in the Markdown.
Tables
A <table> with a <thead> or a first row of <th> becomes a pipe table with that header. If there is no header row, the first row is promoted so the table is valid GitHub Flavored Markdown. Column alignment is read from align attributes or text-align styles and written as :---, :---: or ---:. A pipe character inside a cell is escaped as \|. When a cell contains block content, a list, several paragraphs, or a nested table, or when any cell uses colspan or rowspan, a pipe table would lose information, so that table is emitted as HTML instead. Nothing disappears silently.
Code blocks and their language
<pre><code> becomes a fenced block. The language is taken from class="language-bash", lang-bash, or the highlight.js and Prism conventions, so the fence reads ```bash. The <span> elements that syntax highlighters wrap around tokens are stripped, entities such as < are decoded back to <, and if the code itself contains three backticks the fence is lengthened to four. Inline <code> becomes single backticks, doubled when the content contains a backtick.
Copying from a page versus pasting source
When you select part of a web page and copy, the browser puts the rendered HTML fragment on the clipboard, already free of scripts and site chrome. Pasting that fragment is usually the cleanest path. Pasting raw source works too, including a full document with <html> and <head>. Converting directly from a URL needs a server-side fetch, because browsers block cross-origin reads, so that option is part of Pro. Everything else here runs in your browser, and the HTML is never uploaded.
MDtoDOCX vs Pandoc vs copy-paste
| What matters | MDtoDOCX | Pandoc | Copy into a Markdown editor |
|---|---|---|---|
| Semantic tags to Markdown | Yes, h1–h6, lists, quotes, links, images | Yes | Plain text only |
| Inline styles | Dropped; bold and italic spans recognised | Dropped | Lost |
| Tables | Pipe table; HTML kept for spans | Pipe or grid table | Tabs |
| Code language from class | Yes | Partially | No |
| Scripts, nav, sidebars removed | Yes | Scripts only | Depends on selection |
| Paste a page fragment | Yes | No, file or URL | Yes |
| Install anything | No | Yes | No |
| Privacy | Local, nothing uploaded | Local | Local |