Markdown to Word

Paste Markdown and download an actual .docx file: headings, lists, tables and links are all real Word elements, not a pasted approximation.

0 characters

Or drop a .md/.txt file onto the box above.

Preview (what the .docx will contain)

The document preview appears here as you type.

How to use

  1. Paste the Markdown into the left box. The preview on the right shows headings, bold, lists, tables, code and links as you type.
  2. Click Download .docx (or press Ctrl+Enter in the input box).
  3. Open the downloaded file directly in Word, LibreOffice, or drag it into Google Docs / drive.google.com to open it there: no copy-paste step, no intermediate format.
  4. Need it on the clipboard instead of as a file? The companion Markdown to Google Docs tool pastes formatted text directly into an already-open document.

A file, not a paste

Most "Markdown to Word" tools on the web actually convert to HTML and rely on your browser's or Word's own paste-formatting to turn that into something Word-shaped once you paste it in, which works, but only inside a document you already have open. This tool builds the .docxfile itself: a ZIP archive of WordprocessingML XML, the exact format Word saves, assembled entirely in your browser with no external library and no server round trip.

Example

The sample Markdown below converts to a 17.7 KB .docx, 103 words,1 headings, 3 lists and 1 table across real Word styles and elements:

Deploy checklist

Run the full test suite before tagging a release: npm test takes about two minutes.

  1. Bump the version in package.json
  2. Update the changelog
    • Group entries under Added, Changed and Fixed
    • Link each entry to its pull request
  3. Tag and push: git tag v2.4.0 && git push --tags
EnvironmentURLOwner
Staginghttps://staging.example.comPriya
Productionhttps://example.comMarco

Production deploys happen only between 09:00 and 16:00 UTC.

npm run build && npm run deploy -- --env production

Options explained

Edge cases and common errors

Do the same thing in code

# Python (python-docx, a third-party library: pip install python-docx)
from docx import Document
doc = Document()
doc.add_heading("Title", level=1)
doc.add_paragraph("Some text.")
doc.save("out.docx")

// This tool takes a different approach on purpose: no dependency, built by hand
// as a ZIP of WordprocessingML XML (see src/lib/markdown-to-docx.ts in the repo),
// so it runs entirely client-side with nothing to install.

Already have the result in a document rather than Markdown? Google Docs to Markdownconverts the other way. Need the formatted text on your clipboard instead of a file? Markdown to Google Docs is the paste-first version of this same conversion.

Markdown to Word FAQ

How is this different from Markdown to Google Docs?

That tool puts formatted text on your clipboard for you to paste into a document you already have open. This one builds an actual .docx file and downloads it, the thing to reach for when you need a file to attach to an email, upload somewhere, or hand to someone who expects a Word document rather than a pasted block of text.

Is this a real Word document, or Markdown wrapped in a .docx extension?

A real one: the file is assembled by hand as a package of WordprocessingML XML (the same format Word itself writes), not text dumped into a renamed file. Headings use Word's own Heading 1-6 styles, lists use real Word numbering (so they show up in Word's own list tools, not just as plain text with a leading dash), and tables are genuine Word tables with borders, not an image or a monospace approximation. The sample Markdown below becomes a 17.7 KB .docx with 1 heading, 3 lists and 1 table, all real Word elements.

Does this upload my document anywhere to convert it?

No. The entire .docx file (every XML part, the ZIP container itself) is assembled by JavaScript running in your browser. Nothing is sent to a server; this page could be disconnected from the network entirely and still produce a working file.

Do nested and numbered lists come out right, not just visually indented?

Yes. This was worth getting right on purpose. Two separate numbered lists in the same document each restart at 1 rather than continuing each other's count (a common bug in hand-rolled Word generators, since Word numbering is tracked by an ID that has to be allocated fresh per list); nested lists indent to their actual depth, with bullet lists cycling through different bullet characters by level the way Word's own nested-list styles do.

Runs entirely in your browser: this page is a static file with no server behind it, so nothing you paste can be uploaded. Last reviewed by Parthesh Gupta. Implements GitHub Flavored Markdown.