Playground

Markset, running in your browser: the same parser and the same HTML writer the command line calls, bundled and handed to you. Nothing you type leaves this page.

Constructs Pictures Grammar

What you are looking at

The four tabs beside the result are the four things markset can hand you from a file — html, downgrade, ast and check — and each answers a different question about the document in the editor. They are worth switching between at least once.

Result
The page a reader would get, styled by the default stylesheet and nothing else. It renders inside a frame that is sandboxed with scripting switched off — and renders completely anyway, because a Markset document has no script in it to run.
HTML
What the renderer emitted. Every class is an ms- one and every variant is a data- attribute, which is what a second implementation has to agree with.
Markdown
The same document with every construct taken away — the degradation contract, which is normative and covered by the conformance suite. This is what a reader sees in a pull request, a terminal or a plain-text mail.
AST
The tree, as mdast plus three node types. This is the interface for anything built on top, and the shape the remark-markset plugin hands to a unified pipeline.
Problems
Diagnostics, with the same codes and positions markset check reports. The vocabulary is closed, so an unknown directive name is an error here rather than markup that quietly passes through. Load An invalid document to see it.
Vocabulary
Everything you are allowed to write, with the source of each and a link to its reference page. The same entries are the chips above the editor, and either one inserts at the cursor.

Where the palette comes from

Nobody wrote that list. The names are the parser's own closed vocabulary, so the palette cannot offer a construct the parser rejects or leave one out; the descriptions are the ones the reference index prints; and every snippet is a case from the conformance suite — usually the one the suite calls canonical, which is its word for the minimal correct form. So each is a document that is already proven valid, by the same tests that prove the renderer.

Where a snippet lands is read off the tree rather than counted in lines. A construct always goes in at the top level, never between another construct's fences, and an inline span goes in only where the document actually has inline content — not into your frontmatter and not into a code fence. A test inserts every entry at every offset of a document and requires the result to still parse.

The share button puts the whole document in the URL fragment. A fragment is never sent to a server, so a link is a complete bug report that reveals the document to nobody but the person you send it to.

Everything here runs from the same library the command line uses, so anything the playground renders, a build renders the same way.