Three ways to use it

Pick what fits: write in the browser editor, generate a single-file document with a CLI, or render with the parser in your own code.

The editor (nothing to install)

Open the editor and start typing. It renders live with orz-markdown. In Chrome or Edge you can install it (the install icon in the address bar), and then:

  • It opens in its own window and works offline.
  • It registers as a .md handler. Set it as your default and double-click any .md to edit it; Ctrl/⌘ S saves back to the same file.
  • Switch the preview theme and toggle dark mode from the toolbar.

File association and in-place Save use Chromium-only APIs. In other browsers the editor still runs; use Open and Save as.

Start from an authentic blank editable file

For .md.html, .slides.html, and .paged.html, use the official starter buttons on this website. Each button opens a genuine editable file in a new tab; click the pencil button, make your changes, then Save or download your own local copy. This is safer than copying starter HTML from an unknown source.

See the document family guide →

Open the editor →

Generate a single-file document

Install a family tool, then turn a Markdown file into one portable, editable .html:

# a continuous document
npx orz-mdhtml  notes.md       # -> notes.md.html

# a slide deck
npx orz-slides  deck.md        # -> deck.slides.html

# a print / PDF document
npx orz-paged paper.md       # -> paper.paged.html

Each writes one portable, self-editing HTML file. Open it to read, present, or print; click the edit affordance to change it and Save in place. --cdn makes a smaller file that loads the engine from jsDelivr; --inline embeds the engine. Defaults differ: orz-mdhtml defaults to --cdn, while orz-slides and orz-paged default to --inline.

More about the three document types →

Render with the parser

Install orz-markdown and render Markdown to HTML:

import md from 'orz-markdown';

const html = md.render('# Hello {{emoji wave}}');
// place inside <article class="markdown-body">…</article>
// with one of the bundled themes

See the features for the full syntax, and the README for themes and the agent skill.

Portable authorship and license metadata

When generating .md.html or .paged.html from a source file, add a leading {{nyml kind: meta}} block for the title, author, license, canonical source, date, description, and keywords. For slides, the deck config's title: and author: seed the same metadata. The builders write standard HTML head tags and a machine-readable #orz-meta record that remains in the portable file after browser edits.

{{nyml
kind: meta
title: Field Notes
author: Your Name
license: CC-BY-4.0
license_url: https://creativecommons.org/licenses/by/4.0/
source: https://example.org/field-notes
date: 2026-07-11
}}

The metadata block is consumed during generation, so update the original source and regenerate when those details change. Host applications can inject authoritative metadata programmatically; host values take precedence field by field.

Verifying a file someone sent you

These documents are programs: opening one runs its embedded code. Before trusting a file from an untrusted source, run it through the verifier. It hashes the embedded framework against the genuine published packages and scans the content for embedded scripts, entirely in your browser. Treat anything it cannot confirm like a downloaded app.

Open the verifier →