Extend MDX
SkillWeb & browsingExtend MDX rendering in website-docs when a request needs either a new custom MDX component that authors can invoke with JSX-like tags, or a build-time Markdown-to-MDX transform that compiles plain Markdown syntax into custom JSX/AST behavior. Implement runtime components under src/components/MDXComponents/, implement build-time transforms under gatsby/plugin/, register exports and plugins in the right places, and validate the end-to-end MDX rendering path.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the Extend MDX skill
What this skill tells your AI
The instructions your AI receives, as published by pingcap/website-docs in .agents/skills/extend-mdx/SKILL.md and read by ahel’s review.
Overview
Use this skill for any repo-specific MDX extension work. In this codebase, MDX can be extended in two ways:
- Runtime component path: authors write tags like
<FeatureCallout />directly in MDX - Build-time transform path: Gatsby plugins convert plain Markdown syntax into JSX or altered AST nodes during build
The important decision is whether the authoring format should be JSX-first or Markdown-first.
Decision Tree
1) Choose the extension path
Use the runtime component path when:
- Authors can write
<MyComponent />directly in MDX - The task is mainly new UI, layout, cards, tabs, alerts, or rich content blocks
- No custom Markdown syntax parsing is needed
Use the build-time transform path when:
- Authors should not need to write JSX manually
- Existing Markdown constructs such as blockquotes, code fences, or custom text patterns should become richer behavior
- The task requires AST rewriting during the Gatsby build
Sometimes the task needs both:
- A plugin transforms Markdown into
<FeatureX /> - A runtime MDX component renders
<FeatureX />
Runtime Component Path
2) Inspect existing component patterns
Review src/components/MDXComponents/ and match the closest pattern:
Alert.tsxfor simple wrapper blocksLearningPath.tsxfor structured layoutsdeveloper/index.tsfor grouped feature exports
3) Implement the component
Create the component under src/components/MDXComponents/.
Rules:
- Use TypeScript React components
- Use PascalCase filenames and named exports
- Accept
childrenwhen nested Markdown content is needed - Keep props MDX-friendly: strings, booleans, numbers, and
children - Prefer MUI primitives or local CSS Modules that match nearby code
- Route fixed UI copy through i18n when needed
4) Register the component
Update src/components/MDXComponents/index.tsx.
In this repo, src/components/MDXContent.tsx already spreads ...MDXComponents into MDXProvider, so most component registration is just the named export in index.tsx.
Edit src/components/MDXContent.tsx only when the task specifically needs built-in tag overrides or injected runtime props.
5) Show MDX authoring syntax
Provide or update the actual MDX usage pattern, for example:
<FeatureCallout title="Fast setup">
Write normal Markdown here.
</FeatureCallout>
Build-Time Transform Path
6) Identify source syntax and desired output
Write the mapping explicitly before editing:
- Input syntax example
- Target node type or JSX output
- Whether a runtime component tag will be emitted
Current repo examples:
gatsby/plugin/content/index.tsrewrites certain links and blockquotesgatsby/plugin/mermaid/index.tsturns fenced code blocks into<Mermaid />
7) Implement or update the Gatsby plugin
Edit or add a local plugin under gatsby/plugin/.
Guidelines:
- Traverse
markdownASTusingunist-util-visit - Replace only the target nodes
- Preserve unaffected content
- Reuse repo URL and link helpers instead of duplicating path rules
- If emitting JSX, keep the generated tag and props stable and simple
If the plugin is new, add the local plugin package layout to match the existing gatsby/plugin/* directories.
8) Register the plugin in Gatsby
Update gatsby-config.js under gatsby-plugin-mdx -> gatsbyRemarkPlugins.
Use require.resolve("./gatsby/plugin/<plugin-name>") and check whether ordering relative to content, mermaid, or syntax-diagram matters.
9) Connect runtime components if the transform emits JSX
If the transform outputs a custom tag like <FeatureX />, also implement and export the runtime component under src/components/MDXComponents/.
If the transform only rewrites AST nodes without introducing a custom tag, no MDX component registration is needed.
Validation
Check at minimum:
- The component or plugin file is syntactically valid
- Any custom tag emitted by a plugin exists as a named MDX component export
src/components/MDXComponents/index.tsxexports new runtime componentsgatsby-config.jsregisters new plugins when applicable- One representative Markdown or MDX example matches the intended authoring flow
When feasible:
- Run
yarn build - Run
yarn testif the change also touches covered Gatsby logic
Output Checklist
Report:
- Whether the task used the runtime component path, the build-time transform path, or both
- Which component and plugin files changed
- How components or plugins were registered
- The Markdown or MDX syntax authors should use
- Whether
yarn buildor tests were run
Signals
- GitHub stars
- 23
- Forks
- 33
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
extend-mdx- Source
- github.com/pingcap/website-docs