Fumadocs

Shiki (Internal)

Manage the Shiki instances.

Overview

Fumadocs use its own Shiki factory API to manage internal Shiki instances.

You can customise it for special purposes like using fine-grained bundles, for example:

import { createShikiFactory } from 'fumadocs-core/highlight/shiki';

export const myShikiFactory = createShikiFactory({
  async init(options) {
    const { createHighlighter, createJavaScriptRegexEngine } = await import('shiki');

    return createHighlighter({
      langs: [],
      themes: [],
      langAlias: options?.langAlias,
      engine: createJavaScriptRegexEngine(),
    });
  },
});

Then pass it to different modules/features:

'use client';
import * as Base from 'fumadocs-ui/dynamic-codeblock.core';

export type DynamicCodeblockProps = Omit<Base.DynamicCodeblockProps, 'highlighter'>;

export function DynamicCodeBlock(props: DynamicCodeblockProps) {
  return <Base.DynamicCodeBlock highlighter={() => myShikiFactory.getOrInit()} {...props} />;
}

How is this guide?

Last updated on

On this page