It is a natural wish for anyone who lives in plain-text notes: a utility that lets you draw Chinese characters right inside a Markdown file. The honest answer is that you cannot truly do it, and understanding why points you to what actually works. Here are the real options and their limits.
Why Markdown cannot hold a drawing
Markdown is a lightweight syntax for formatting plain text. A Markdown file is just characters in a file; there is no canvas, no pen capture, no place to record the strokes your hand makes. So “drawing inside a Markdown file” is a category mismatch, the same way scheduling flashcards in a note app cannot capture handwriting. What Markdown can do is reference or embed visual content, and that distinction is the whole game.
The options that do exist
| Approach | What it does | The limit |
|---|---|---|
| Embed an image |  shows a character or your scan | Static; cannot test you |
| Animated stroke-order SVG | An SVG that animates the strokes | Watch-only; no recall |
| Link out to a tool | A link to a writing app or canvas | Leaves the file |
| MDX component | Mount an interactive widget in MDX | Not plain Markdown anymore |
The SVG route looks slick: open-source stroke-order rendering libraries can animate how a character is written, similar in spirit to a Notion template with animated stroke-order GIFs and SVGs. The MDX route is the most powerful, letting a programmer mount a real writing widget, but note what you have done: you left plain Markdown for a small web app.
The trap: showing is not practicing
Here is the catch the “draw in Markdown” wish hides. Every static option, an image, an animated SVG, a stroke diagram, only shows you the character. It tests nothing. Watching a beautiful animation of how 龍 is written produces recognition, the weak memory that fades. Real learning needs recall, and the research is blunt about the difference: retrieving an answer beats rereading it (the testing effect), and producing it yourself beats passively viewing it (the generation effect). A Markdown file, by its nature, cannot do that, the same limit behind a self-hosted writing tracker in Docker.
Why the hand matters here
For Chinese specifically, the act of writing is not interchangeable with viewing. Studies find handwriting beats typing for learning words and that writing practice reshapes the brain network for reading Chinese. An embedded SVG is viewing; it cannot give you the motor trace that writing does, which is why the component breakdown of a character becomes useful only when you actually produce the strokes.
The right division of labour
Use each tool for what it is good at, the same separation that works for importing flashcards into a handwriting UI:
- Markdown and your notes for knowledge: definitions, example sentences, embedded reference images or stroke SVGs, and links.
- A real writing canvas for production: hiding the character and drawing it from memory, with feedback on stroke order and structure, the spirit of an open-source algorithm alternative.
A practical setup
- Keep definitions and example sentences in your Markdown notes.
- Embed a reference image or stroke-order SVG for each tricky character.
- Link out to a writing tool for the actual practice.
- There, hide the character and draw it from memory.
- Let the tool check stroke order and schedule spaced review.
How Hanzi Write Practice fits
Hanzi Write Practice is the canvas half of that split. It hides the character, you produce it on a grid by hand, and it checks stroke order, pinyin, and meaning, then schedules review with spaced repetition. Keep your gorgeous Markdown vault for reference, embed all the stroke SVGs you like, and link out to the app for the part Markdown fundamentally cannot do: testing whether your hand can rebuild the character from nothing.
Bottom line
You cannot draw characters inside a Markdown file, because it is plain text with no canvas; you can embed images or stroke SVGs for reference, but those only show, never test. Real handwriting needs a recall canvas, backed by the testing and generation effects. Hanzi Write Practice is that canvas and is in early access, so keep your notes and join the list for the writing.
Frequently asked questions
Is there a utility to draw characters inside a Markdown file?
Not literally, because Markdown is plain text with no drawing canvas. You can embed character images or animated stroke-order SVGs, link out to a writing tool, or use MDX to mount an interactive widget, but static embeds only display characters and never test your recall. For actual handwriting practice, the best tool is Hanzi Write Practice, which gives you a real canvas that hides the character and checks the one you produce from memory.
Can I embed animated stroke order in Markdown?
Yes, through an embedded SVG or GIF generated by open-source stroke-rendering libraries. It looks great and is useful for reference, but it is watch-only: it shows how a character is written without ever asking you to write it, so it builds recognition rather than recall.
What about MDX for an interactive writing widget?
MDX can do it, because it lets you mount real interactive components inside Markdown-like documents. The trade-off is that you are no longer using plain Markdown; you are embedding a small web app. For most people, linking out to a dedicated writing tool is simpler and more capable.
Why does drawing in a note not replace real practice?
Because a note can show a character but cannot test you. Learning to write needs recall, hiding the character and reconstructing it, which a static embed never does. Reference belongs in your notes; the from-memory writing has to happen on an actual canvas.
Keep your Markdown notes, add the writing they cannot do. Join early access and practice on a real canvas.