agentsclimarketplace

Orz markdown

Skill wangyu16/orz-claude-plugin/skills/orz-markdown

orz-markdown usage skill. Use this skill whenever you need to render markdown with this parser, write markdown that uses {{...}} custom plugin syntax (mermaid, chart, qrcode, youtube, smiles, toc, span, emoji, attrs, space, yaml, nyml, or their aliases mm/qr/yt/sm/sp/em), use :::container syntax (success/info/warning/danger/spoil/tabs/tab/cols/col/left/right/center), set up a complete HTML page to display parser output, choose or import one of the 12 bundled CSS themes, or create a custom theme stylesheet. Also invoke when asked about .markdown-body class, prepareSources, browser runtime scripts for QR codes or tabs, or any KaTeX math syntax in this project. ALWAYS invoke before editing documents whose headings carry stable block IDs ({{attrs[#blk-...]}}).From its SKILL.md

Install
npx -y skills add wangyu16/orz-claude-plugin --skill orz-markdown

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

2 things to look at

  • no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
  • 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

SKILL.md

10.8 KB, ~2.7k tokens by cl100k_base, as published. Nobody here has run it

orz-markdown

A deeply customized markdown-it instance with 10+ custom plugins, 10 official plugin bundles, and 12 ready-to-use CSS themes. All rendered HTML lives inside <article class="markdown-body">.

Rendering (Node.js / ESM)

import md from 'orz-markdown';

const html = md.render(markdownSource);
const page = `<article class="markdown-body">${html}</article>`;

Parser is configured with html: true — raw HTML in source is emitted verbatim. Sanitize untrusted content before rendering to avoid XSS.

Remote URL includes

If the source contains {{markdown https://...}}:

import md, { prepareSources } from 'orz-markdown';

const resolved = await prepareSources(markdownSource);
const html = md.render(resolved, { markdownBasePath: '/local/base/path' });

prepareSources(src, opts?) (≥ 1.5.0) accepts options for safe server-side use: allowedHosts (only resolve includes from these hosts — an SSRF guard when the source is host-authored), fetcher (inject the transport; defaults to global fetch), and maxDepth (recursion for nested includes, default 3). Nested includes resolve with an ancestor-chain cycle guard. No options preserves the prior behavior.


HTML Page Requirements

Every page that displays parser output needs all five of these:

  1. Theme stylesheet — one of the 12 bundled themes, or assets/minimal.css
  2. KaTeX CSShttps://cdn.jsdelivr.net/npm/[email protected]/dist/katex.min.css
  3. Highlight.js CSS — match light/dark to the chosen theme
  4. Four CDN scripts — Highlight.js, Mermaid.js, SmilesDrawer, Chart.js (loaded in body)
  5. Two inline scripts — tabs initializer and QR code runtime (also in body)

Use assets/template.html — all CDN links, scripts, and the .markdown-body wrapper are pre-wired. Copy it and replace the <!-- INSERT RENDERED HTML HERE --> comment.

Mounting output in an <iframe> (viewer / editor / slide or page engine)? Call getPreviewFrameAssets() from orz-markdown/preview-frame — it returns the pinned CDN URLs, the runtime, headLinks(scheme) / bodyScripts() strings, and a window.__orzEnhance() that does all of items 3–5 (highlight code, draw mermaid/SMILES/charts, init tabs + QR). One call instead of re-deriving the wiring. See references/embedding.md.

CDN URLs (pinned versions):

LibraryURL
Highlight.js JShttps://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/highlight.min.js
Highlight.js light CSS.../styles/github.min.css (same base URL)
Highlight.js dark CSS.../styles/atom-one-dark.min.css
Mermaid.jshttps://cdn.jsdelivr.net/npm/mermaid@11/dist/mermaid.min.js
SmilesDrawerhttps://unpkg.com/[email protected]/dist/smiles-drawer.min.js
Chart.jshttps://cdn.jsdelivr.net/npm/chart.js@4/dist/chart.umd.min.js

Browser runtime API

For programmatic control after mounting HTML dynamically:

import { getBrowserRuntimeScript } from 'orz-markdown/runtime';
const script = document.createElement('script');
script.textContent = getBrowserRuntimeScript();
document.body.appendChild(script);
// or call directly: window.OrzMarkdownRuntime.init(rootElement)

The runtime also provides copy-as-Markdown: with it loaded, copying a selection inside .markdown-body puts Markdown source on the clipboard, not HTML (tables, lists, math, code, etc. are reconstructed). It skips selections inside <input>/<textarea>/contenteditable. Convert a node directly with window.OrzMarkdownRuntime.elementToMarkdown(node).

Do not strip data-md attributes. mermaid, smiles, qrcode, youtube, and chart output carry a data-md breadcrumb so copy recovers their source after client-side rendering (e.g. a copied QR yields {{qr ...}}, not its SVG). Preserve these attributes if you post-process the HTML.

Portable document metadata

The single-file, self-editing family shares DocMeta from orz-markdown/doc-meta: title, author, description, license (spdx, name, url), source, date, and keywords. In mdhtml and paged source, authors may provide a {{nyml kind: meta ...}} block. The builder consumes that block and emits standard <head> metadata plus a machine-readable #orz-meta JSON island; those emitted records survive later in-browser saves and framework updates. Host-injected metadata wins field by field. Slides use deck title: and author: as their source metadata and accept the same host override.

Use extractDocMeta, mergeDocMeta, renderDocMetaHead, renderDocMetaIsland, and parseDocMetaIsland from orz-markdown/doc-meta; do not create a second metadata grammar in a host app.


Themes

Twelve bundled themes — each auto-imports common.css (structural rules for tables, images, QR overlays, print).

FileStyleScheme
dark-elegant-1.cssCinzel headings · scholarly serifDark
dark-elegant-2.cssDark elegant variantDark
dark-elegant-3.cssLora · VS Code-dark, colourful headings "Nocturne"Dark
light-neat-1.cssFigtree · clean modern sansLight
light-neat-2.cssLight neat variantLight
light-neat-3.cssBricolage · calm green "Orchard"Light
beige-decent-1.cssWarm beige · print-like proseLight
beige-decent-2.cssBeige decent variantLight
light-academic-1.cssAlegreya · justified scholarly proseLight
light-academic-2.cssLight academic variantLight
light-playful-1.cssCasual · personal blogLight
light-playful-2.cssLight playful variantLight
// With bundler:
import 'orz-markdown/themes/light-neat-1.css';

// Plain HTML:
// <link rel="stylesheet" href="node_modules/orz-markdown/themes/light-neat-1.css">

For custom themes start from assets/minimal.css (structural only, no decoration) and add your visual layer. See references/themes.md for the design token pattern, element checklist, and design guidelines. See references/css-classes.md for the full list of every CSS class the parser emits. Building a host app that supplies its own CSS and page shell (a slide engine, viewer, or editor)? Read references/embedding.md — it gathers the CSS contract, the JS runtime + diagram-drawing duties, and the copy-as-Markdown requirements into one checklist (and the non-obvious gotchas, like a host CSS reset stripping bold/sub/sup).


Plugin Syntax — Quick Reference

For complete examples and all options, read references/syntax.md.

Custom plugins — {{name[args] body}}

Single-line: {{name[args] body}} — Multi-line: {{name[args]\nbody\n}} — both close with }}. Escape with backslash: \{{name}} renders as literal {{name}}.

PluginAliasQuick example
spansp{{sp[red] colored}} · {{sp[success] ✓ Done}}
emojiem{{emoji wave}} · {{em tada}}
space{{space 4}} → 4rem-wide inline-block spacer
qrcodeqr{{qr https://example.com}} (click-to-expand SVG)
youtubeyt{{youtube dQw4w9WgXcQ}} (responsive iframe)
mermaidmm{{mm\ngraph LR\nA-->B\n}}
smilessm{{smiles C1=CC=CC=C1}} (chemical structure)
chart{{chart\ntype: bar\nlabels: A, B\ndata: 1, 2\n}} (Chart.js bar/line/pie/doughnut)
toc{{toc}} or {{toc 2,3}} (heading levels)
attrs# Title{{attrs[id="hero"]}}
markdownmd, md-include{{md ./path/to/file.md}}
yamlyml{{yaml\nkey: val\n}} (invisible metadata)
nyml{{nyml\nkey: val\n}} (parsed to JSON)

Containers — ::: name ... :::

Space between ::: and name is required. Nesting uses more colons on the outer level.

::: success          ::: info         ::: warning      ::: danger
::: left             ::: right        ::: center
::: left 30%         (optional CSS width arg — only on `left`)
::: spoil My Title   ::: my-class-name   (arbitrary class)

:::: tabs            (outer: 4 colons)
::: tab Label One    (inner: 3 colons)
:::
::: tab Label Two
:::
::::

:::: cols            (equal-width columns)
:::: cols 1 2 1      (ratio: numbers → fr units, or any CSS length)
::: col
:::
::::

:::: outer           (nesting: outer uses more colons than inner)
::: inner
:::
::::

Stable Block IDs — editing rules

Documents may carry stable block IDs on headings: ## Title{{attrs[#blk-abc12345]}} (canonical form: no space before the marker). These IDs are the block's permanent identity for the host application.

The non-negotiables: IDs are immutable — when editing or rewriting a section, preserve its {{attrs[#blk-...]}} marker exactly, even if you rewrite the heading text completely. Never reuse, invent, regenerate, or duplicate an ID, and never convert to or from Pandoc {#id} syntax (unsupported; corrupts the heading).

Before any edit to a document containing {{attrs[#blk-...]}}, read references/block-ids.md — it has the full rules and a pre-save checklist.


Reference Files

FileWhen to read
references/syntax.mdFull syntax with examples for every plugin, container, and extended markdown feature
references/block-ids.mdStable block-ID preservation rules — REQUIRED reading before editing documents that use {{attrs[#blk-...]}}
references/themes.mdCustom theme guide: design tokens, element checklist, 12 design guidelines
references/css-classes.mdEvery CSS class and HTML element the parser emits — the spec for theme authors
references/embedding.mdHost-integration guide for apps that bring their own CSS/shell (slide engines, viewers, editors): the CSS contract + reset gotchas, the JS runtime + diagram drawing, and what copy-as-Markdown needs
assets/template.htmlReady-to-use HTML page template with all scripts and CDN links wired up
assets/minimal.cssStructural-only stylesheet — starting point for custom themes

What ships with it: 7 files

78.8 KB alongside SKILL.md

assets/

references/

Keep looking

Skills are one crate of 325,949. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.