Turn an Obsidian Vault Note Into Portable Markdown
Portable Markdown is text that renders the same in every reader. This is the list of Obsidian-only syntax that stops a note being portable, and what each piece becomes.
Direct answer
Seven pieces of syntax make a note Obsidian-only: wikilinks, embeds, callouts, highlights, block reference IDs, %%comments%%, and inline #tags. The converter above rewrites or removes all seven so the note renders correctly in GitHub, GitLab, VS Code, Pandoc, and static site generators. Text inside code fences and inline code is never rewritten, so code samples containing [[ or == stay exactly as written.
Open the Obsidian ↔ Markdown converterWhen to use this
- You are leaving Obsidian, or want an escape route before you commit to it.
- Notes must be readable by a team that uses several different editors.
- You are archiving a vault and want files that stay useful in ten years.
Steps
- Paste a note into the converter above with the direction on Obsidian → standard Markdown.
- Set frontmatter and tags to match the destination.
- Scan the output for anything left over — Dataview blocks and other plugin syntax pass through unchanged and need manual removal.
- Download the .md file.
- Open the file in a second renderer, such as the GitHub preview or VS Code, to confirm it reads correctly.
Example conversion
Read [[Onboarding]] %% draft note %% > [!tip] Fast path > Use the script. ``` keep [[this]] and ==this== ``` ^para-9
Read [Onboarding](Onboarding.md) > [!TIP] > **Fast path** > Use the script. ``` keep [[this]] and ==this== ```
Common mistakes
- Do not treat the conversion as lossless. Block reference IDs are removed, so any note that linked to a specific block loses that anchor.
- Do not expect embedded note transclusion to expand. ![[Other Note]] becomes a link-style image reference to Other Note.md, not the content of that note.
- Do not lose the size hint silently. ![[image.png|300]] becomes  because Markdown has no width syntax; set the width in HTML if you need it.
- Do not skip a visual check on long notes. The rules are text transforms, not a full parser.
FAQ
- Are Obsidian files already Markdown?
- Yes, the files on disk are plain .md text. The portability problem is the Obsidian-specific syntax inside them, which other renderers do not understand.
- Is anything inside code blocks changed?
- No. Fenced blocks and inline code spans are set aside before the rewrite rules run and restored afterwards, so [[brackets]] and ==equals== in a code sample stay literal.
- What is not converted?
- Dataview queries, other plugin blocks, canvas files, and embedded query results. They have no Markdown equivalent, so they pass through as written and you should remove or rewrite them by hand.
- Does this upload my notes anywhere?
- No. The conversion runs in your browser. Nothing is sent to a server, and no account is needed.
Related Obsidian guides
How to Convert Obsidian Wikilinks to Standard Markdown
Obsidian writes links as [[Note]] and [[Note|alias]]. Only Obsidian reads that syntax. Convert each one to [alias](Note.md) so the link works on GitHub and any other renderer.
Convert Obsidian Callouts to GitHub Markdown Alerts
Obsidian callouts use > [!note] Title. GitHub supports five alert types with uppercase names and no inline title. Here is the mapping the converter applies.
Export Obsidian Notes to GitHub Without Broken Links
A vault file copied straight into a repository shows literal wikilinks, unrendered callouts, and ==highlight== markers. Convert the Obsidian syntax first, then commit.
Obsidian Frontmatter and Tags: What to Keep When You Export
YAML frontmatter drives properties in Obsidian and drives nothing on GitHub. Inline #tags are vault navigation. Decide per destination, then keep or strip both with one option each.