Markdown to Confluence Storage Format
Convert Markdown to Confluence storage XML. Pure client-side.
What this tool does
Converts Markdown into Confluence storage format, the XML-based format Confluence uses internally. Storage format is what you submit when posting via the Confluence REST API or what you see if you use the source-edit view in older Confluence versions. This tool covers the common constructs: headings, bold and italic, inline and fenced code (using Confluence's structured-macro for code blocks), links, ordered and unordered lists, blockquotes. Runs entirely in your browser.
How to use it
Paste Markdown into the input. Press Convert. The output is XML
ready to POST via the Confluence REST API as the body of a page or comment, or to
paste into an editor that accepts storage format directly. Example:
# Title becomes <h1>Title</h1>;
a fenced code block becomes a structured-macro with the language as a parameter.
Common use cases
- Pushing documentation written in Markdown to Confluence via the REST API.
- Translating a GitHub README into a Confluence onboarding page.
- Migrating a Markdown wiki (e.g., Obsidian, Notion export) into a Confluence space.
- Generating a Confluence template body for repeated meeting-notes pages.
- Avoiding Confluence's WYSIWYG editor when you prefer writing in Markdown.
Common pitfalls
- Storage format is not the same as the WYSIWYG view source. Confluence has multiple internal representations. This tool emits the canonical storage format used by the REST API. Pasting it into the WYSIWYG editor's HTML source view may not work; use the API or the storage-format editor.
- Tables. Confluence supports a richer table model than this tool
emits (column widths, cell highlighting, merged cells). This tool emits plain
<table>with header row support; complex tables may need manual editing post-import. - Special characters. Storage format is XML, so
&,<, and>in your text must be entity-encoded. The tool handles this automatically; if you paste raw XML into Markdown intending it to pass through verbatim, results may surprise you.
Frequently asked questions
- What is "storage format" and why is it different from the rendered page?
- Confluence has multiple internal representations. Storage format is XML-based and is what the REST API uses to read or write page bodies. The rendered HTML you see in a browser is generated from storage format on each view. The WYSIWYG editor sometimes exposes a source-edit mode that shows storage format, but most users never see it directly. This tool emits storage format because it is the canonical body format for API integrations.
- Why does my converted page work via API but not via paste?
- Modern Confluence Cloud strips XML on paste in the rich-text editor; pasting raw storage format does not produce formatted output. To use the converted XML, POST it via the REST API as the body of a page create or update. Older Confluence Server versions sometimes had a storage-format paste mode; Cloud removed it.
- How does this differ from the JIRA converter?
- JIRA still accepts wiki markup (older syntax with *bold* and ||header||); Confluence does not. JIRA wiki markup is plain text; Confluence storage format is XML. Different tools, different targets, different syntax. Use the JIRA converter for JIRA descriptions and comments; use this one for Confluence pages and the Confluence REST API.
- Does the code-block macro support every language?
- Confluence code macro accepts a language parameter and supports a fixed list (Java, JavaScript, Python, SQL, XML, HTML, CSS, plus a few others). If you pass a language Confluence does not recognize, it falls back to plain text. Common Markdown fence labels (bash, shell, javascript, python) typically map cleanly.
- What about images, inline base64, and file attachments?
- Markdown image syntax  converts to ac:image with ri:url. The image must be hosted at a URL Confluence can fetch, or you can pre-upload as a page attachment and reference it. Inline base64 data URIs do not work in storage format. For attachments, edit the output to use ri:attachment ri:filename instead of ri:url.
- Are user mentions, page links, and macros supported?
- Not by this tool. Markdown has no syntax for those Confluence-specific concepts. After converting, add ac:link with ri:user for mentions, ac:link with ri:page ri:content-title for page links, and ac:structured-macro ac:name for macros, by hand at the locations you need.
Cite this tool
For academic, journalistic, or technical references. Pick a format:
Citations use 2026 as the publication year. Access date is left as a fillable placeholder where the citation style expects one.