markdown-mdx-content-pipeline-stinger
Markdown and MDX processing stack: from raw .md/.mdx file to final HTML/JSX/React output. This stinger encodes the 2026 state of the unified/remark/rehype ecosystem, the Shiki family (Shiki v4, expressive-code, starry-night), compiler selection, plugin authoring patterns, math/diagram embedding, and sanitization.
When to use this skill
Activate when markdown-mdx-content-pipeline-worker-bee is invoked, or when the user asks about any of these:
- Selecting a Markdown/MDX compiler for a Next.js, Astro, Vite, or Node.js project
- Auditing or designing a remark/rehype plugin chain
- Implementing or upgrading syntax highlighting (Shiki, expressive-code, starry-night, rehype-pretty-code)
- Writing custom remark or rehype plugins (visitor pattern, AST manipulation)
- Embedding math (KaTeX, MathJax) or diagrams (Mermaid, D2)
- Configuring sanitization for user-authored Markdown (rehype-sanitize, DOMPurify)
- Testing a unified processing pipeline (vitest fixtures, snapshot tests)
- Migrating from Contentlayer, next-mdx-remote, or Prism/Highlight.js to 2026-recommended alternatives
Do NOT activate for:
- Platform selection (Docusaurus, Starlight, Mintlify) →
docs-site-worker-bee
- React component architecture for MDX (
mdx-components.tsx internals) → react-worker-bee
- Broader XSS audit beyond sanitization config →
security-worker-bee
- SEO/AEO concerns about rendered pages →
seo-aeo-worker-bee
Quick reference: canonical 2026 stack
| Layer |
Recommended (2026) |
Legacy / Avoid |
| Compiler (Next.js blog) |
Velite + @next/mdx |
next-mdx-remote (archived), Contentlayer |
| Compiler (route MDX) |
@next/mdx |
none |
| Syntax highlighting |
Shiki v4 / rehype-pretty-code |
Prism, Highlight.js |
| Highlighting (Starlight) |
expressive-code |
none |
| GFM |
remark-gfm |
none |
| Math |
remark-math + rehype-katex |
MathJax (heavier) |
| Diagrams |
Mermaid via next/script (CSR) or rehype-mermaid (SSR build) |
none |
| Sanitization (server) |
rehype-sanitize |
none |
| Sanitization (client) |
DOMPurify |
none |
Guides index
Read each guide before authoring any output in its domain.
guides/00-principles.md: scope boundary, unified AST model (mdast to hast to html/jsx), the four processing layers (parse, transform, compile, render)
guides/01-compiler-selection.md: decision matrix: @next/mdx vs next-mdx-remote v6 vs Velite vs Contentlayer2 vs @mdx-js/mdx direct
guides/02-remark-rehype-pipeline.md: canonical plugin ordering, the .use() chain, GFM/frontmatter/directive plugins
guides/03-syntax-highlighting.md: Shiki v3 to v4 migration, expressive-code, starry-night, rehype-pretty-code
guides/04-plugin-authoring.md: unified plugin function signature, unist-util-visit visitor pattern, TypeScript types
guides/05-math-diagrams.md: remark-math + rehype-katex, Mermaid SSR workaround, D2, callout/admonition directive
guides/06-sanitization.md: rehype-sanitize schema design, DOMPurify, allowDangerousHtml safety
guides/07-testing.md: vitest fixtures, snapshot testing MDX output, XSS payload fuzzing
Examples index
examples/next-mdx-blog.md: full Next.js 15 App Router MDX blog with Velite, remark-gfm, remark-math, rehype-katex, rehype-pretty-code (Shiki v4)
examples/ai-chat-renderer.md: safe rendering of user-authored Markdown in an AI chat UI with DOMPurify + allowlist
Templates index
templates/plugin-boilerplate.ts: typed TypeScript boilerplate for a unified remark or rehype plugin
Critical directives (always enforce)
Prefer Shiki v4 over Prism or Highlight.js. Shiki ships TextMate grammars, is the default in Vite/Astro/Next.js in 2026, and supports transformers for line numbers, highlighting, and word highlighting.
Never skip sanitization for user-generated Markdown. MDX can embed arbitrary JSX; without rehype-sanitize or DOMPurify, a malicious <script> or event handler in user content executes in the app's origin.
Use Velite for new Next.js content sites. next-mdx-remote is archived (v6.0.0 final release, Feb 2026). Velite is Turbopack-safe, RSC-safe, and outputs inert typed JSON.
rehype-sanitize MUST come after rehype-raw in the chain. Placing it before rehypeRaw produces a false-clean output that raw HTML can still bypass.
Pin plugin versions. The unified ecosystem releases breaking AST changes without major semver bumps; "*" or "latest" breaks pipelines silently.
Distinguish MDX compile (server) from MDX render (client/RSC). Conflating them produces broken CSR/SSR configurations with security implications.
Route platform-selection to docs-site-worker-bee. This stinger implements the highlighting and plugin config after the platform is decided; crossing the boundary produces contradictory guidance.
Refresh cadence
- 6 months. The Shiki ecosystem (including expressive-code) releases breaking API changes roughly every two quarters. Verify
@expressive-code/plugin-shiki Shiki peer-dep range and rehype-pretty-code Shiki compat table on each refresh.
- Re-run
scripture-historian at shallow depth if: Shiki releases v5, expressive-code releases a major, or Next.js App Router changes its MDX integration.
- The sanitization guides are stable; refresh only if a rehype-sanitize schema default changes.
Part of the Hive. Paired Bee: markdown-mdx-content-pipeline-worker-bee.
Research: 10 external sources (2025-11 to 2026-05), depth tier: normal.
1---2name: markdown-mdx-content-pipeline-stinger3description: Markdown/MDX processing specialist - MDX 3/compiler selection, remark/rehype plugin pipelines, Shiki v4/expressive-code/starry-night syntax highlighting, GFM, AST manipulation, custom directive plugins, math/Mermaid diagram embedding, and XSS sanitization. Use when building or auditing any content processing pipeline that takes .md/.mdx source to HTML/JSX output.4license: MIT5---67# markdown-mdx-content-pipeline-stinger89Markdown and MDX processing stack: from raw `.md`/`.mdx` file to final HTML/JSX/React output. This stinger encodes the 2026 state of the unified/remark/rehype ecosystem, the Shiki family (Shiki v4, expressive-code, starry-night), compiler selection, plugin authoring patterns, math/diagram embedding, and sanitization.1011---1213## When to use this skill1415Activate when `markdown-mdx-content-pipeline-worker-bee` is invoked, or when the user asks about any of these:1617- Selecting a Markdown/MDX compiler for a Next.js, Astro, Vite, or Node.js project18- Auditing or designing a remark/rehype plugin chain19- Implementing or upgrading syntax highlighting (Shiki, expressive-code, starry-night, rehype-pretty-code)20- Writing custom remark or rehype plugins (visitor pattern, AST manipulation)21- Embedding math (KaTeX, MathJax) or diagrams (Mermaid, D2)22- Configuring sanitization for user-authored Markdown (rehype-sanitize, DOMPurify)23- Testing a unified processing pipeline (vitest fixtures, snapshot tests)24- Migrating from Contentlayer, next-mdx-remote, or Prism/Highlight.js to 2026-recommended alternatives2526Do NOT activate for:27- Platform selection (Docusaurus, Starlight, Mintlify) → `docs-site-worker-bee`28- React component architecture for MDX (`mdx-components.tsx` internals) → `react-worker-bee`29- Broader XSS audit beyond sanitization config → `security-worker-bee`30- SEO/AEO concerns about rendered pages → `seo-aeo-worker-bee`3132---3334## Quick reference: canonical 2026 stack3536| Layer | Recommended (2026) | Legacy / Avoid |37|---|---|---|38| Compiler (Next.js blog) | Velite + `@next/mdx` | next-mdx-remote (archived), Contentlayer |39| Compiler (route MDX) | `@next/mdx` | none |40| Syntax highlighting | Shiki v4 / rehype-pretty-code | Prism, Highlight.js |41| Highlighting (Starlight) | expressive-code | none |42| GFM | remark-gfm | none |43| Math | remark-math + rehype-katex | MathJax (heavier) |44| Diagrams | Mermaid via `next/script` (CSR) or rehype-mermaid (SSR build) | none |45| Sanitization (server) | rehype-sanitize | none |46| Sanitization (client) | DOMPurify | none |4748---4950## Guides index5152Read each guide before authoring any output in its domain.5354- `guides/00-principles.md`: scope boundary, unified AST model (mdast to hast to html/jsx), the four processing layers (parse, transform, compile, render)55- `guides/01-compiler-selection.md`: decision matrix: @next/mdx vs next-mdx-remote v6 vs Velite vs Contentlayer2 vs @mdx-js/mdx direct56- `guides/02-remark-rehype-pipeline.md`: canonical plugin ordering, the `.use()` chain, GFM/frontmatter/directive plugins57- `guides/03-syntax-highlighting.md`: Shiki v3 to v4 migration, expressive-code, starry-night, rehype-pretty-code58- `guides/04-plugin-authoring.md`: unified plugin function signature, unist-util-visit visitor pattern, TypeScript types59- `guides/05-math-diagrams.md`: remark-math + rehype-katex, Mermaid SSR workaround, D2, callout/admonition directive60- `guides/06-sanitization.md`: rehype-sanitize schema design, DOMPurify, allowDangerousHtml safety61- `guides/07-testing.md`: vitest fixtures, snapshot testing MDX output, XSS payload fuzzing6263## Examples index6465- `examples/next-mdx-blog.md`: full Next.js 15 App Router MDX blog with Velite, remark-gfm, remark-math, rehype-katex, rehype-pretty-code (Shiki v4)66- `examples/ai-chat-renderer.md`: safe rendering of user-authored Markdown in an AI chat UI with DOMPurify + allowlist6768## Templates index6970- `templates/plugin-boilerplate.ts`: typed TypeScript boilerplate for a unified remark or rehype plugin7172---7374## Critical directives (always enforce)75761. **Prefer Shiki v4 over Prism or Highlight.js.** Shiki ships TextMate grammars, is the default in Vite/Astro/Next.js in 2026, and supports transformers for line numbers, highlighting, and word highlighting.77782. **Never skip sanitization for user-generated Markdown.** MDX can embed arbitrary JSX; without `rehype-sanitize` or DOMPurify, a malicious `<script>` or event handler in user content executes in the app's origin.79803. **Use Velite for new Next.js content sites.** `next-mdx-remote` is archived (v6.0.0 final release, Feb 2026). Velite is Turbopack-safe, RSC-safe, and outputs inert typed JSON.81824. **rehype-sanitize MUST come after rehype-raw in the chain.** Placing it before `rehypeRaw` produces a false-clean output that raw HTML can still bypass.83845. **Pin plugin versions.** The unified ecosystem releases breaking AST changes without major semver bumps; `"*"` or `"latest"` breaks pipelines silently.85866. **Distinguish MDX compile (server) from MDX render (client/RSC).** Conflating them produces broken CSR/SSR configurations with security implications.87887. **Route platform-selection to docs-site-worker-bee.** This stinger implements the highlighting and plugin config after the platform is decided; crossing the boundary produces contradictory guidance.8990---9192## Refresh cadence9394- **6 months.** The Shiki ecosystem (including expressive-code) releases breaking API changes roughly every two quarters. Verify `@expressive-code/plugin-shiki` Shiki peer-dep range and rehype-pretty-code Shiki compat table on each refresh.95- Re-run `scripture-historian` at `shallow` depth if: Shiki releases v5, expressive-code releases a major, or Next.js App Router changes its MDX integration.96- The sanitization guides are stable; refresh only if a rehype-sanitize schema default changes.9798---99100*Part of the Hive. Paired Bee: `markdown-mdx-content-pipeline-worker-bee`.*101*Research: 10 external sources (2025-11 to 2026-05), depth tier: normal.*