Skip to content

Built-in Components

how to use documentation components in the markdown files.

3 min read

Connect your agent today

Draft from chat, review in your calendar, and publish only what you approve.

Start for $0

Callouts

Use callouts to highlight important information.

You can also customize the title:

Tabs

Use tabs to show alternative content, like different package managers. The default pills variant is the boxed switcher. Use variant="line" for prose (for example Cloud vs self-hosting). Children of TabItem are not Markdown-parsed — use HTML the same way as Callout.

Prose tabs (Cloud vs self-hosting):

Steps

Use steps for sequential instructions. For example:

Create a new project

Clone the template repository and install dependencies.

Configure your site

Edit web/src/lib/docs/constants/config.ts (site title, description, sidebar sections, i18n, and assembled docs config such as TOC settings).

Write your content

Add markdown files to src/content/docs/.

Deploy

Build and deploy to your hosting provider.

Cards

Use cards to highlight features or key information:

📝 Markdown Powered
Write documentation in Markdown with full MDSvex support for Svelte components.
🔍 Fast Search
Built-in full-text search powered by Pagefind with zero JavaScript overhead.
🌙 Dark Mode
Automatic light and dark theme support with system preference detection.
📈 SEO Ready
OpenGraph, Twitter cards, JSON-LD structured data, and auto-generated sitemap.

Use link cards for navigation:

Use DocsExternalLink (not raw <ExternalLink>) for outbound URLs in docs so links use text-primary, underline, and not-prose—they stay readable inside prose.

Supabase Dashboard

Optional props match the base anchor: trusted, follow, ariaLabel, class.

Badges

Use Badge from $lib/ui/components/docs/mdx/index.js for short labels in prose.

Release / status: New Experimental Deprecated v1.0.0

Docs semantics (pick variants so readers can scan by color — see web/src/content/docs/installation/vercel.md). Badge is DocsBadge.svelte; variant must be one of: default, new, deprecated, experimental, envBackend, envWeb, envRuntime, path, param.

  • Backend env (no VITE_ prefix): BACKEND_DOMAIN_URL
  • Web / Vite env: VITE_API_BASE_URL
  • Runtime / platform: VERCEL
  • Repo paths, env filenames, routes (often nested in DocsExternalLink to GitHub): backend/.env.development.local backend/vercel.json
  • CLI flags, query keys, path params (when not using ParamField): --dry-run page
  • URL examples (prefer / avoid): https://example.com vs https://example.com/; use the same new variant for local dev bases such as http://localhost:5173 or http://localhost:3000

Mermaid

Render sequence diagrams, flowcharts, and other Mermaid diagrams. Define the source in a <script> constant and pass it with string={…} (see Writing ContentMermaid diagrams for the full pattern).

<script>
import { Mermaid } from '$lib/ui/components/docs/mdx/index.js';

const mcpFlow = `sequenceDiagram
    participant Agent as AI Agent
    participant MCP as OpenQuok MCP Server
    Agent->>MCP: Connect with opo_ Bearer token
    MCP-->>Agent: List available tools
`;
</script>

<Mermaid string={mcpFlow} />

File Tree

Display directory structures with nested Markdown lists inside <FileTree> (prefer this over a plain ```text tree for architecture pages):

  • src/
    • content/
      • docs/
        • index.md
        • getting-started-for-dev/
          • quick-start.md
        • documentation-contribution/
          • configuration.md
    • lib/
      • components/
        • docs/
          • callout.svelte
          • tabs.svelte
      • docs/
        • config.ts
        • content.ts

API request / response panels

This repo ships RequestExample and ResponseExample cards (similar to common docs-site patterns) plus OpenApiOperationExamples, which loads GET /api/v1/openapi.json and fills curl + JSON from the openapi: frontmatter line. OpenApiPlayground renders the full try-it UI from the same spec.

Pages with openapi in YAML get a desktop split layout from DocsDocRenderer: the endpoint bar (method, URL, Try it) sits in the main column under the page title, with request/response code panels in the right rail. The left nav shows a compact HTTP method badge for those pages, and the right “Search / On this page” sidebar is hidden so the examples rail is the only right column. To keep the standard docs chrome (right sidebar + no method badge) on a page that still declares openapi for the split + playground, add docsLayout: standard to the frontmatter.

ParamField shows a request parameter name, type and location pills, required, and description. OpenApiDocSplit auto-injects Authorizations (when OpenAPI security requires your API key), plus path, query, and header parameters from the operation’s parameters array—use ParamField in Markdown only for extra narrative the spec does not carry.

integrationId string path required

UUID of the connected channel integration.

<ParamField path="page" type="integer" location="query" default={1} description="1-based page index for paginated list endpoints." />

ResponseField documents JSON response properties (same pill layout, with optional pre / post label arrays):

success boolean required

Whether the request completed without error.

<ResponseField name="data" type="object" post={["nullable"]} description="Payload when success is true; omitted or null on failure." />

To drop the same three blocks into a single column (e.g. custom MDX), use OpenApiOperationExamples:

<script>
	import { OpenApiOperationExamples } from '$lib/ui/components/docs/mdx/index.js';
</script>

<OpenApiOperationExamples operation="GET /public/social/{integration}" />
Search documentation
Find a docs page
Discord Support