M
markstream-custom-components
About markstream-custom-components
A skill for developers changing how Markstream renders selected nodes or custom tags. It favors scoped component mappings and helps choose between renderer overrides, tag support, and parser-level transforms.
Key features
- 01Classify built-in nodes, tags, and parser needs
- 02Prefer scoped component mappings
- 03Support nested Markdown rendering
- 04Preserve component props and cleanup
- 05Validate changes with targeted checks
Use cases
- 01Replace link or code block renderers
- 02Render trusted custom tags
- 03Keep nested Markdown in tag content
- 04Change Mermaid or image node rendering
Install
Copy the command and run it in a terminal.
$
npx skills add https:/ / github.com/ simon-he95/ markstream-vue --skill markstream-custom-componentsAfter installing, type/markstream-custom-componentsin Claude Code to confirm it loaded.
Bundled filesagents/openai.yamlreferences/patterns.md
Details
From the project READMEMarkstream Custom Components
Use this skill when the task is to change how Markstream renders specific nodes or custom tags.
Read references/patterns.md before choosing an override strategy.
Workflow
- Classify the request.
built-in override: replace an existing renderer such asimage,link,code_block,mermaid,d2, orinline_code.custom tag: support trusted HTML-like tags such asthinking.parser-level: requires token transforms or AST reshaping. Only then should you leave this skill and use low-level parser hooks.
- Prefer scoped mappings.
- Vue, Vue 2, Svelte, and shared Angular registration: use
setCustomComponents(customId, mapping)instead of global mappings whenever practical, and pass the samecustomId/custom-id. - React custom tags: prefer renderer-local
streamingComponentsfor parser-backed nodes orhtmlComponentsfor sanitized HTML props pluschildren. UsedefineStreamingComponents(...)/defineHtmlComponents(...)for typed maps. KeepsetCustomComponentsfor built-in node overrides or shared legacy registration. - Svelte and Angular can also pass a renderer-local
customComponentsmap when the override should not enter the shared registry. - In Vue 3 app/plugin setup, import
{ VueRendererMarkdown }frommarkstream-vueand install it with{ components }when the override should be scoped to the Vue app instance.
- Vue, Vue 2, Svelte, and shared Angular registration: use
- Start with the smallest safe override.
- Leaf-like nodes (
image,link,inline_code,mermaid) are easier than container nodes (heading,paragraph,list_item). - If the request only changes Mermaid, use
mermaid, notcode_block.
- Leaf-like nodes (
- Preserve nested Markdown when needed.
- For trusted custom tags with inner Markdown, render
node.contentwith a nested renderer. - Pass the same custom-tag allowlist to nested renderers.
- Nested renderers inside a smooth-streaming parent are automatically suppressed from double pacing — do not add
smooth-streamingto child renderers. - In React,
streamingComponentsautomatically contributes its keys to the effective custom-tag list; do not duplicate those keys incustomHtmlTagsunless another parser path needs them.
- For trusted custom tags with inner Markdown, render
- Keep props and cleanup intact.
- Preserve
node,loading,indexKey,customId, andisDark. - For
mermaidandinfographicoverrides, preserveestimatedPreviewHeightPxso async preview shells keep stable height during remounts. - Remove temporary scoped mappings with
removeCustomComponents(customId)when the scope is no longer needed.
- Preserve
- Validate with the smallest useful check.
- Prefer a local demo, targeted test, or docs build.
- Call out whether the implementation is safe for repeated and nested custom tags.
Default Decisions
- Scoped overrides first, global overrides only when the whole app truly needs them.
- Leaf-node overrides before container-node overrides.
customHtmlTagsplus scoped custom components before parser hooks.- In React, renderer-local component maps before registry mutation.
- Nested renderers for tag bodies that contain Markdown.
Useful Doc Targets
docs/guide/component-overrides.mddocs/guide/custom-components.mddocs/guide/react-components.mddocs/guide/components.mddocs/guide/advanced.md
Comments
Markdown supported