vike-vue-content

Renders a parsed content AST into Vue nodes, built on @comark/vue.

ContentRenderer

Renders a parsed content AST into Vue nodes, built on @comark/vue.

import { ContentRenderer } from 'vike-vue-content/components/content-renderer'

Props

PropTypeDefaultDescription
treeContentBodyrequiredThe content AST (from ContentEntry.body).
componentsContentComponents{}A map of node → Vue component overrides.
dataContentData{}Binding data injected into the content.

Events

EventDescription
resolveFired after async content rendering completes (uses <Suspense> internally).

Usage

<script setup>
import { ContentRenderer } from 'vike-vue-content/components/content-renderer'
import { queryCollection } from 'vike-vue-content/query'

const page = await queryCollection('docs').path('/docs/getting-started').first()
</script>

<template>
  <ContentRenderer v-if="page" :tree="page.body" />
</template>

Built-in component mappings

ContentRenderer pre-registers the following components by default:

TagComponentDescription
aProseABase-aware link (auto base prefix, external links open in new tab).
preProseCodeCode block with copy button and optional filename header.
code-groupCodeGroupTabbed code blocks.
code-previewCodePreviewLive preview container with a #source slot.

User-provided components take higher priority and can override any of these.