About the Markdown Viewer
Zyff's Markdown viewer opens a .md file — or anything you paste — and shows it the way GitHub would: headings, tables, task lists, footnotes, syntax-highlighted code and embedded HTML, with a contents list built from the document's own headings. Rendering happens on Zyff's servers rather than client-side, which for this tool is a security decision as much as an architectural one. Markdown deliberately passes raw HTML through, so a document from a repository, a client or a stranger is untrusted markup by definition; every tag in the output here either came from the renderer itself or survived a server-side allowlist that removes scripts, event handlers, iframes and inline styles. Your file is processed in memory and never stored. There is no signup, no watermark, and no limit on how many documents you open.
How to open and view a Markdown file
Open or paste the document
Click Open file and pick a .md, .markdown or .txt file, drag one onto either pane, or switch to the Markdown tab and paste. A file is uploaded and decoded on the server, so a file that is not UTF-8 tells you so instead of rendering as question marks.
Read it in Preview, or edit in Split
Preview shows the rendered document on its own. Split puts the source beside it and re-renders as you type, which is what you want when you are fixing a table that will not display. Markdown shows only the source.
Check the flavour if something looks wrong
Open the options and confirm GitHub Flavored Markdown is on — tables, task lists, strikethrough and footnotes are GFM extensions, not part of core Markdown, and a renderer without them shows your table as literal pipe characters.
Jump around with Contents
Any document with more than one heading gets a contents list built from those headings, each linking to its own anchor. The anchors match GitHub's slug format, so a table of contents already written into your README works here too.
Export what you need
Copy the rendered HTML, download a standalone .html file that opens anywhere with its styles already inside it, re-save the Markdown, or use Print to produce a PDF. Printing prints the document, not the page around it.
What the Markdown Viewer does
GitHub Flavored Markdown, including footnotes
Tables with column alignment, task lists, strikethrough, bare-URL autolinking, footnotes and GitHub's [!NOTE] and [!WARNING] callouts. These are the extensions a real README depends on, and the ones a strict CommonMark renderer will not show you.
Embedded HTML is rendered, not stripped — through an allowlist
Badges, <details> blocks, <img align="right"> and <picture> render the way they do on GitHub. Scripts, event handlers, iframes, forms, inline styles and unknown attributes are removed on the server, whatever the document contains.
Syntax highlighting for the languages you actually paste
JavaScript, TypeScript, Python, Go, Rust, Java, C and C++, C#, PHP, Ruby, SQL, JSON, YAML, TOML, HTML, CSS, shell, Dockerfile, GraphQL, unified diffs and Markdown itself, resolved from the fence's info string and its common aliases.
A contents list with GitHub-compatible anchors
Built from the same headings the renderer emitted, so an entry can never point at an anchor that is not on the page. Repeated headings get the -1, -2 suffix GitHub uses, which is what makes a hand-written table of contents keep working.
Front matter recognised, not printed
A YAML or TOML block at the top of the file is lifted out and shown as fields rather than rendered as a stray --- and a run of key: value lines — which is how a Hugo or Jekyll page looks in a viewer that does not know about it.
Document statistics from the same parse
Words, reading time, headings, links, images, code blocks, tables and tasks done, all counted during the render. Code blocks and front matter are excluded from the word count, so the reading time describes what you would actually read.
CommonMark mode, for finding out why
Switch GitHub Flavored Markdown off and the document renders under strict CommonMark. That is the fastest way to see whether the table that will not show up on npm is a GFM table on a renderer that does not support them.
At a glance
| Accepted files | .md, .markdown, .mdown, .mkd, .mkdn, .mdx, .txt — up to 2 MB |
|---|---|
| Document limit | 500,000 characters or 60,000 lines, enforced on the server |
| Flavours | GitHub Flavored Markdown (default) or strict CommonMark |
| Embedded HTML | Rendered through a server-side allowlist, or shown as literal text |
| Highlighted languages | Resolved from the code fence's info string and its common aliases |
| Highlighting limit | Blocks over 40,000 characters render as plain monospace |
| Contents list | Up to 500 headings, with GitHub-compatible anchor slugs |
| Reading speed | 225 words per minute by default; 180 or 300 also available |
| Exports | Copy HTML, standalone .html, the original .md, and print to PDF |
| Storage | None — the document is held in memory for the request only |
Frequently asked questions
How do I open a .md file?
Open it in any Markdown viewer, including this one — click Open file, or drag the .md onto the page. A .md file is plain text, so a text editor will also open it, but you will see the syntax rather than the formatting. Nothing needs to be installed, and the file is never stored.
Why is my Markdown table not rendering?
Almost always because the renderer does not support GitHub Flavored Markdown, or because the delimiter row is missing or malformed. Tables are a GFM extension, not part of core Markdown, so npm, some documentation generators and strict CommonMark renderers show the pipe characters as literal text. The row of dashes under the header is what makes a table a table — without it, the pipes are just pipes.
Why did my line breaks disappear?
Because in standard Markdown a single newline inside a paragraph is a space, not a line break. Ending the line with two spaces, or with a backslash, forces one — or switch on "Line breaks become <br>" here, which is how comment boxes and chat apps behave. This is the single most common surprise for anyone whose first Markdown was written in an issue tracker.
Does this viewer run the HTML inside my Markdown?
It renders it, through an allowlist, and nothing in it can execute. Scripts, event handlers, iframes, objects, forms, inline styles and unknown attributes are removed on the server before the HTML ever reaches your browser, and links to javascript: or data: URLs are dropped. You can also switch HTML rendering off entirely, which shows the markup as literal text.
Is my file uploaded anywhere?
It is sent to Zyff's servers to be rendered and is never written to disk, logged or cached. The document exists in memory for the length of one request. Rendering server-side is what makes one audited allowlist responsible for the safety of the output, rather than a copy of that logic in every browser bundle.
Can I convert Markdown to HTML with this?
Yes. Copy HTML gives you the rendered fragment, and Download HTML gives you a complete standalone file with its styles already inside it, so it opens correctly on a machine that has never heard of Zyff. Both come from the same render you are looking at.
Does it support Mermaid diagrams or LaTeX maths?
No. A ```mermaid or ```math block renders as a highlighted code block showing its source, which is what it is. Both need a client-side rendering engine, and this tool deliberately does not run one — the whole basis of its safety is that the browser receives finished, sanitised HTML and executes nothing.
Can it open an .mdx file?
Yes, and the Markdown in it renders normally, but its JSX components are shown as text rather than run — the viewer says so in a note when it sees an import statement. Executing components out of somebody's file is not something a viewer should do.
Why do my heading links work on GitHub but not elsewhere?
Because anchor slugs are not standardised, so two renderers can generate different ids for the same heading. This viewer uses GitHub's algorithm — lowercase, punctuation removed, spaces to hyphens, with a -1 or -2 suffix on repeats — so a contents list written for GitHub keeps working here.
Is there a limit on file size?
2 MB for an uploaded file, and 500,000 characters or 60,000 lines for the document itself. That is a very large single document — the CommonMark specification in Markdown is under 300,000 characters. Past it, view a section at a time.