VitePress
VitePress uses markdown-it under the hood. That makes Lumis integration straightforward: override the markdown renderer's highlight function and let VitePress keep the rest of its code block UI.
Install
npm install markdown-it @lumis-sh/markdown-it-lumis @lumis-sh/themes
Configure .vitepress/config.ts
import {defineConfig} from 'vitepress'
import markdownItLumis from '@lumis-sh/markdown-it-lumis'
import {htmlInline} from '@lumis-sh/lumis/formatters'
import javascript from '@lumis-sh/lumis/langs/javascript'
import rust from '@lumis-sh/lumis/langs/rust'
import plaintext from '@lumis-sh/lumis/langs/plaintext'
import githubLight from '@lumis-sh/themes/github_light'
const lumis = await markdownItLumis({
formatter: (language) => htmlInline({language, theme: githubLight}),
languages: [javascript, rust, plaintext],
})
export default defineConfig({
markdown: {
async config(md) {
lumis(md)
},
},
})
Pick a different theme
Any @lumis-sh/themes/* theme module works.
import {defineConfig} from 'vitepress'
import markdownItLumis from '@lumis-sh/markdown-it-lumis'
import {htmlInline} from '@lumis-sh/lumis/formatters'
import javascript from '@lumis-sh/lumis/langs/javascript'
import rust from '@lumis-sh/lumis/langs/rust'
import plaintext from '@lumis-sh/lumis/langs/plaintext'
import nightfly from '@lumis-sh/themes/nightfly'
const lumis = await markdownItLumis({
formatter: (language) => htmlInline({language, theme: nightfly}),
languages: [javascript, rust, plaintext],
})
export default defineConfig({
markdown: {
async config(md) {
lumis(md)
},
},
})
Preload the languages you expect to render.