How to convert grant proposal markdown to word
- Step 1Assemble the proposal into one file — If the narrative, budget, and appendices are separate, merge them with md-merger into a single proposal file before converting.
- Step 2Match the funder's required headings — Funders often mandate exact section names and order. Adjust the outline with md-heading-shifter so headings map onto the funder template cleanly.
- Step 3Paste or upload the proposal Markdown — Use Upload for the full
.mdproposal. Budget figures are read locally — nothing is transmitted. - Step 4Click Run to build the .docx — docx.js writes built-in heading styles and a native budget table in one fixed pass.
- Step 5Apply the funder template and check page count — Open in Word, attach the funder's template, then re-check the page limit — page count is set by Word's font/margins/spacing, not your editor.
- Step 6Add diagrams and submit — Insert logic-model or theory-of-change diagrams in Word where the alt text appears, then upload to the funder portal.
What survives the conversion
Every Markdown construct mapped to what md-to-docx actually writes into the .docx. Built with marked (tokenizer) + docx.js (document builder), both running in your browser. There are no conversion options — the mapping below is fixed.
| Markdown | In the .docx | Notes |
|---|---|---|
# H1 … ###### H6 | Word's built-in Heading 1–6 styles | Depths past 6 (#######) clamp to Heading 6 |
**bold**, *italic*, ~~strike~~ | Bold, italic, strikethrough runs | Combine freely in body paragraphs and headings |
inline code | Courier New run at 9pt | No background shading or colour — just the monospace font |
Fenced ``` ``` blocks | One Courier New 9pt paragraph per line | No syntax highlighting (Word has no native code highlighter) |
> blockquote | Italic paragraph indented 0.5" (grey 666666) | Indent is fixed at 720 twips |
[text](url) | Blue (0563C1) underlined hyperlink | Real clickable link, not just styled text |
GFM | table | | Native Word table, bold header row, 1pt borders | Columns share a 9000-twip width evenly; cells are plain text |
- item / 1. item | Word bullet / decimal-numbered list | Top level only — see nesting note below |
--- (horizontal rule) | Paragraph with a bottom border | Acts as a thin grey divider line |
 | The alt text as plain text | No image is embedded — see the images edge case |
Tier limits for the Markdown family
md-to-docx counts as a Markdown-family tool. Two independent limits apply: total file size in bytes AND a character count (charLimit). The converter accepts a single file per run (no batch).
| Plan | Max file size | Max characters | Files per run |
|---|---|---|---|
| Free | 1 MB | 500,000 | 1 |
| Pro | 10 MB | 5,000,000 | 10 (family) — md-to-docx still takes 1 at a time |
| Pro-media | 50 MB | 20,000,000 | 50 (family) — md-to-docx still takes 1 at a time |
| Developer | 500 MB | Unlimited | Unlimited (family) — md-to-docx still takes 1 at a time |
Proposal elements: what converts vs. what to add in Word
What each grant-proposal element becomes, plus the manual steps before submitting to a funder.
| Proposal element | Converts automatically? | What to do |
|---|---|---|
| Required section headings | Yes — Heading 1–6 styles | Attach funder template; headings remap |
| Budget table (GFM) | Yes — native Word table | Verify totals; cell text is plain |
| Narrative emphasis | Yes — bold/italic runs | — |
| Outcomes list | Yes — Word list at top level | Apply Word multilevel list for sub-items |
| Logic model / diagram | No — alt text only | Insert images in Word after conversion |
| Page count vs. funder limit | N/A — set by Word | Re-check in Word after applying the template |
Cookbook
Grant-proposal fragments and the literal result in the .docx — including where Word work remains.
Budget table becomes an editable Word table
A GFM budget table converts to a native Word table a program officer can open and check.
Markdown: | Line item | Year 1 | Year 2 | |------------------|---------|---------| | Program staff | 80,000 | 82,400 | | Materials | 12,000 | 12,500 | | Evaluation | 15,000 | 15,000 | In the .docx: [ Word table, bold header: Line item | Year 1 | Year 2 ] 1pt borders, body cells plain text.
Funder-required headings map cleanly
Section headings become Word styles the funder template can restyle.
Markdown: # Project Title ## Statement of Need ## Goals and Objectives ## Methods ## Evaluation Plan ## Budget Narrative In Word: Heading 1/2 styles -> funder template applies its required fonts and spacing to each section at once.
Outcomes list converts at the top level
A bulleted outcomes list becomes a Word bullet list; nested sub-outcomes fold into the parent item.
Markdown: - Increase literacy rates by 15% - Serve 500 students per year - 60% from Title I schools In the .docx: • Increase literacy rates by 15% • Serve 500 students per year 60% from Title I schools (nested item folded in; apply Word multilevel list to split)
Diagrams need manual insertion
Logic-model image references render as alt text; add the diagram in Word.
Markdown:  In the .docx: Logic Model: inputs -> activities -> outcomes <- alt text only Next step: in Word, place cursor here -> Insert -> Pictures.
One proposal from shared boilerplate
Merge reusable sections with the tailored narrative, then convert.
Workflow:
1. md-merger: org-boilerplate.md + this-narrative.md +
budget.md -> proposal.md
2. md-to-docx: proposal.md -> proposal.docx
3. Word: attach funder template, add diagrams, check pagesEdge cases and what actually happens
Page count depends on Word, not Markdown
Watch outFunders enforce page limits, but page count is determined by the final Word formatting — font, margins, line spacing — after you apply the funder's template. Markdown has no page concept, so always open the .docx, apply the required template, and re-check the page count in Word before submitting. The conversion preserves content, not pagination.
Logic models and diagrams aren't embedded
By designTheory-of-change and logic-model diagrams referenced as images () render as alt text only — no picture is placed in the .docx. Insert the diagrams in Word after conversion (Insert → Pictures), or recreate them as Word SmartArt where the alt text appears.
Deeply nested lists don't get separate Word sub-levels
By designThe converter emits Word list paragraphs for top-level items only — bullets for -/* lists, decimal numbers for 1. lists. A nested list under an item is folded into that item's text run rather than written as an indented Word sub-level. The bullet/number markers still read clearly, but you won't get true multi-level outline numbering automatically. If you need precise sub-level numbering, flatten the list to one level in Markdown first, or apply Word's list styles after opening the file.
Bold/links inside a table cell render as plain text
Preserved as textGFM tables convert to real Word tables with a bold header row and 1pt borders, but cell contents are written as plain text. **bold**, [links](url), and ` code ` inside a cell keep their literal Markdown characters rather than becoming formatted runs. Keep table cells to plain values; put rich formatting in the surrounding body paragraphs, or style the cells in Word afterward.
Images are not embedded in the .docx
By design does not place a picture in the Word file. An inline image renders its alt text as plain text; a standalone image line renders as text too. No binary image data is fetched or embedded. After converting, insert images in Word via Insert → Pictures, or export your figures separately and add them where the alt text appears.
Only one file converts per run
By designmd-to-docx takes a single Markdown source — paste it or upload one .md/.markdown/.mdx/.txt file. It does not merge multiple files into one Word document. To assemble several Markdown sections into one document, combine them first with md-merger, then run the merged file through md-to-docx.
YAML frontmatter is treated as document content
Watch outA --- delimited YAML frontmatter block at the top of the file is not stripped for this converter — marked sees the opening --- as a horizontal rule and the key/value lines as a paragraph, so your metadata can appear as visible text plus a divider line in the Word output. Remove frontmatter before converting, or build/clean it with md-frontmatter-builder and delete it before export.
Heading depth past level 6
Clamped to Heading 6Markdown allows ####### (seven hashes) but Word only has Heading 1 through Heading 6. Any heading deeper than six maps to Heading 6 rather than being dropped. If your document relies on a seventh level, restructure the outline or shift it up with md-heading-shifter before converting so the hierarchy reads correctly in Word's Navigation Pane.
Budget figures and uploads
Stays localBudget figures and beneficiary details never leave your machine — marked and docx.js run in the browser. The only server-side record for signed-in users is a usage counter (that a conversion ran), with no proposal content.
Frequently asked questions
Will the page count match the funder's limit?
Page count is set by the final Word formatting (font, margins, line spacing) after you apply the funder's template — Markdown has no page concept. Always open the .docx, apply the required template, and verify the page count in Word before submitting.
Do my Markdown tables become real Word tables?
Yes — GFM pipe tables (| col | col |) become native Word table objects with a bold header row and 1pt borders, not images or tab-separated text. Columns share the page width evenly. Cell contents are written as plain text, so put any bold/links in surrounding paragraphs. If your source tables are misaligned, fix them with md-table-repair first.
Can I include logic models or theory-of-change diagrams?
Not automatically — diagrams referenced as images render as alt text only. Insert them in Word after conversion (Insert → Pictures) or rebuild them as Word SmartArt where the alt text appears.
How do I handle multiple co-authors?
Co-edit the Markdown source in Git — clean diffs, no locked binary files. When the proposal is final, run md-to-docx once to produce the funder-ready .docx and apply the funder template. To stitch separately-authored sections together first, use md-merger.
Will Word's Navigation Pane and outline view work?
Yes. Headings map to Word's built-in Heading 1–6 styles, so the Navigation Pane, outline view, and an inserted Table of Contents all pick them up automatically. After conversion you can add a ToC via References → Table of Contents and it will read the heading levels directly.
Are numbered and bulleted lists preserved?
Top-level lists are: -/* become Word bullets and 1. lists become decimal-numbered Word lists. Nested sub-lists are folded into the parent item's text rather than getting their own indented Word sub-level. For deep multi-level numbering, flatten the list in Markdown or apply Word's multilevel list style after conversion.
Can I reuse boilerplate across applications?
Yes — that's a key advantage of drafting in Markdown. Keep org background, evaluation methods, and bios as reusable .md snippets, merge the needed pieces with md-merger per application, then convert the assembled file to .docx.
Can I apply my own corporate or template styles afterward?
Yes. Because headings use Word's standard built-in style names (Heading 1, Heading 2, …) rather than ad-hoc formatting, attaching a company template or changing the theme restyles the whole document at once. Open the .docx, then Design → Themes or attach your template via the Developer → Document Template dialog.
Does my document get uploaded to a server?
No. The whole conversion runs in your browser — marked tokenizes the Markdown and docx.js assembles the .docx locally. The file content never leaves your machine, so confidential drafts stay private. The only thing recorded server-side for signed-in users is a usage counter (that a conversion ran, not its contents).
What formatting options can I set before converting?
None — md-to-docx has no options panel. It uses a fixed, opinionated mapping (built-in heading styles, Courier New for code, blue underlined links, bordered tables). To change structure before converting, use the editing tools first: md-prettifier to normalize spacing, md-heading-shifter to fix the outline, or md-table-repair to align tables.
What is the output file named?
The downloaded Word file reuses the source name with the extension swapped to .docx — proposal.md becomes proposal.docx. If you pasted text instead of uploading a file, a default name is used. The document's internal title metadata is set from the filename, and the creator is recorded as "JAD Markdown".
Is there an API or command-line way to run this?
Not for the .docx output. The public API and MCP run the text-output Markdown tools server-side, but binary-output tools (md-to-docx, the md-to-pdf converters, md-splitter) return a 400 that points back to the web tool — Word generation only happens in the browser. For an automatable, text-only export use md-to-html or md-to-github-html and convert HTML to Word in your pipeline.
Privacy first
All Markdown processing runs locally in your browser using JavaScript. No file is ever uploaded to JAD Apps servers — only metadata counters are saved for signed-in dashboard stats.