Tool
Read the Markdown your AI assistant handed you
Paste the answer with the asterisks, hash marks and pipe characters into the editor below. It turns into formatted text right away, with headings, tables and code blocks where they belong — nothing to install.
Learning path: the TypeScript type system
Sure! Here’s a four-week path that goes from the parts you use daily to the parts that make library code readable. Each week has one thing to read, one thing to build, and a way to tell you’re done.
Week 1 — Narrowing
- Read: the Narrowing chapter of the TypeScript handbook
- Build: a parser for an untrusted JSON payload, with no
ascasts - Done when: you can explain why
typeof x === 'object'does not excludenull, without looking it up
Week 2 — Generics that earn their keep
| Pattern | Use it for | Trap |
|---|---|---|
<T> on a function | Relating input to output | Adding it when one type would do |
extends constraint | Restricting the shape | Over-constraining and losing inference |
| Default type args | Backwards-compatible APIs | Hiding a required decision |
Week 3 — Conditional and mapped types
The idea worth keeping: a type is a value in a small functional language.
Partial<T> is a for loop over keys, and ReturnType<T> is pattern matching.
// a mapped type that makes only the given keys optional
type PartialBy<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;
type Draft = PartialBy<Article, 'publishedAt' | 'slug'>;
Week 4 — Declaration files
- Read the
.d.tsof a library you already use — start with a small one - Write types for an untyped dependency and publish them locally
- Compare your version with the DefinitelyTyped entry, if one exists
Tip: when a type gets hard to read, the runtime code is usually the thing that needs changing, not the type.
Why the answer looks like that
ChatGPT, Claude, Gemini and Copilot all write in Markdown. It is a markup
convention: instead of applying bold, the model writes **bold**; instead of
creating a heading, it writes ## Heading. The chat interface interprets those
characters and shows you the tidy result. Copy the same text somewhere else — a notes app, an
email, a ticket description — and it goes back to being what it always was: raw markup.
The same thing happens with the .md file the assistant offers for download. It is
plain text, and the operating system has no idea what to do with it. Double-clicking usually
opens a text editor showing the source, which is why the question that brings most people here
is not "what is Markdown" but "why does my document look broken".
It is not broken. A Markdown file with no renderer is like an HTML file opened in Notepad: all the information is there, in the right order, waiting for something to lay it out.
What each character means
| In the raw text | How it should look |
|---|---|
# Title | The document's main title |
## Section | A section heading — becomes an outline entry |
**text** | Bold |
*text* | Italic |
- item | A bulleted list |
1. item | A numbered list |
`code` | Inline code |
| a | b | | A table row |
> note | A block quote — models use it for tips and warnings |
Three backticks open and close a code block, and the word right after the opening backticks is the language, which is what turns on syntax highlighting. If an answer contains a Python snippet that looks like ordinary prose in your notes app, that fence is the piece that got lost.
Long answers need more than formatting
A four-week study plan, a contract review, a migration runbook: once the answer is longer than
two screens, formatting is not enough. You need to navigate it. Open the text in the full
reader and every ## in the answer becomes an outline entry, reading progress is
tracked, and you can return to one section without scrolling around looking for it.
This matters more with AI output than with documents people write, for a specific reason: assistants produce well-structured text very fast, so it is easy to accumulate a dozen long answers in a week. Structure that nobody can navigate is the same as no structure.
Step by step, without downloading anything
- Select the whole answer in the chat and copy it.
- Paste it into the editor at the top of this page, over the sample.
- Check the formatted version on the right.
- For a long answer, use Open in the full reader.
- Need to keep it? Download .md saves the file named after the title.
If you would rather start from the downloaded file, the reader takes local files, drag and drop, and public URLs as well as pasted text. The Markdown reader page covers that side.
Where AI Markdown usually goes wrong
Nested lists with the wrong indentation. Models sometimes indent a sub-item by three spaces instead of two or four. Some renderers accept it, some flatten the list. If a nested list came out flat, that is why.
Tables with a missing separator row. A Markdown table needs the row of hyphens under the header. Without it the whole thing renders as one paragraph full of pipe characters.
Fences that were never closed. When an answer gets cut off mid-code-block, everything after it renders as code. Adding the closing backticks at the end of the file fixes the whole document at once.
All three are visible immediately in a side-by-side preview, which is the practical argument for looking at the rendered version before you paste an AI answer into somewhere that matters.
Private conversations stay private
Nothing is sent to a server: the text is processed in the browser and stays in your device's local storage. That matters because a large share of what people ask an assistant involves internal material — planning, code, contracts, customer data. A viewer that uploads your text to render it is the wrong tool for that, whatever its privacy policy says.
Frequently asked questions
Why does ChatGPT put asterisks and hash marks in its answers?
Because the answer is written in Markdown, a plain-text markup convention. Two asterisks mean bold, a hash mark starts a heading and a hyphen starts a list item. Pasted somewhere that does not interpret Markdown, those characters show up raw.
Claude gave me a .md file. How do I open it?
A .md file is plain text, so any text editor will show the source. To see it formatted, drop it into this page or paste the contents into the editor above; the rendered version appears beside it.
Do I have to save the file before viewing it?
No. Paste the text straight into the editor. If you already downloaded the .md file, you can open it in the full reader instead.
Does my conversation get stored on a server?
No. The text is rendered by your own browser and kept only in your device storage, which you can clear whenever you want.
Does this work with Gemini and Copilot too?
Yes. They all write standard Markdown with GitHub extensions, including tables and fenced code blocks, which is the same format read here.