- @fumadocs/base-ui@16.17.8
- fumadocs-core@16.17.8
- fumadocs-ui@16.17.8
Bring your own highlighter
Shiki stays the default, and isn't loaded when you highlight code with another highlighter.
fumadocs-core/highlightexports aHighlighterinterface, created withcreateHighlights()fromfumadocs-core/highlight/highlights(@pierre/highlights) orcreateShikiHighlighter()fromfumadocs-core/highlight/shiki,override()creates one with other options.rehypeCodeFromHighlighterfromfumadocs-core/mdx-plugins/rehype-code.corehighlights code blocks with a highlighter, or a function creating one with the transformers of Fumadocs.createRehypeCodeis deprecated, Sätteri hasrehypeCodeFromHighlighterin@fumadocs/satteri/rehype-code. PasstransformerTwoslash()in itstransformersoption to analyze Twoslash blocks in batches.createServerCodeBlock()andcreateDynamicCodeBlock()in Fumadocs UI create code blocks from a highlighter. Dynamic code blocks are highlighted on the server too.toJsx()fromfumadocs-core/utils/hast-to-jsxconverts hast into React elements liketoJsxRuntime()ofhast-util-to-jsx-runtime, MDX nodes through anevaluator, over 10x faster on highlighted code, whose spans render as one HTML string. Every Fumadocs renderer uses it,hast-util-to-jsx-runtimeis no longer a dependency.- Twoslash loads the languages of code blocks in popups before highlighting, an unknown language there no longer fails the code block.
- OpenAPI Standalone highlights code blocks with Highlights, in its server-rendered pages too.
- The page factories of OpenAPI, GraphQL and AsyncAPI, type tables,
createPython(),createPythonComponents(),localHtml()and the shadcncreateSnippet()take ahighlighter. - Deprecated
shikiandshikiOptionsof the API pages andshikiof type tables, pass ahighlighterinstead. - Integrations require
fumadocs-core16.17.8, the API pages and shadcn also requirefumadocs-ui16.17.8.
remarkInclude in fumadocs-core
<include> moved from Fumadocs MDX to fumadocs-core/mdx-plugins/remark-include, a unified plugin for any MDX or Markdown pipeline.
fumadocs-mdx/configstill exportsremarkInclude, forwarded fromfumadocs-core.getProcessorparses included files by their format, like a.mdfile included in an.mdxpage.- Headings in an included section get IDs unique among the page's own headings.
- Circular includes throw instead of hanging, and included code files no longer end with an empty line.
fumadocs-mdxrequiresfumadocs-core16.17.8.
Processed Markdown links page-relative images at their served URLs
- Images imported by Remark Image get the URLs bundlers serve them at in Remark LLMs, instead of their relative paths
- Stringifiers output JS expressions with
s.expression(), for Markdown only known at runtime - Search records of included content with images are no longer cut
- The Sätteri preset only imports images in bundlers, at runtime it resolves their sizes like the MDX preset