nuxt-content
onmax/nuxt-skills
Typed content collections, markdown rendering, and CMS features for Nuxt with SQL queries and NuxtStudio integration.
What is nuxt-content?
Nuxt Content v3 provides a structured way to manage content-driven Nuxt applications using typed collections, remote sources, and SQL-backed queries. Use it when building documentation sites, blogs, or CMS-powered apps with markdown, MDC components, and multi-language support.
- Define typed content collections with schemas and multiple sources (local files, GitHub repos, APIs)
- Query content with SQL-like fluent API (queryCollection) for filtering, navigation, and search
- Render markdown and MDC (Vue components in markdown) with ContentRenderer and prose components
- Configure database backends (SQLite, PostgreSQL, D1, LibSQL) and markdown plugins
- Integrate with NuxtStudio for live editing and preview mode
- Support i18n multi-language content and LLM integration
How to install nuxt-content
npx skills add https://github.com/onmax/nuxt-skills --skill nuxt-content- Nuxt 3 project
- @nuxt/content v3 installed
- content.config.ts file for collection definitions
How to use nuxt-content
- 1.Define collections in content.config.ts using defineCollection with schemas
- 2.Organize content files in the content/ directory matching your collection source globs
- 3.Create MDC components in components/content/ for reusable markdown elements
- 4.Use queryCollection() in pages or components to fetch and filter content
- 5.Render content with ContentRenderer component, passing the parsed page object
- 6.Run npx nuxi typecheck to verify collection types resolve correctly
Use cases
- Building a blog with typed posts, categories, and full-text search
- Creating documentation sites with auto-generated navigation and multi-version support
- Setting up a CMS with remote content sources from GitHub or external APIs
- Rendering markdown with embedded Vue components for interactive content
- Deploying content-driven apps to NuxtHub with database-backed queries
- Nuxt developers building content-heavy applications
- Documentation site maintainers
- CMS integrators working with Nuxt
- Teams using NuxtStudio for collaborative content editing
nuxt-content FAQ
'page' collections include routes and body content (for markdown-driven pages), while 'data' collections contain structured data only without routes (for structured content like products or testimonials).
Use defineCollectionSource with source.repository pointing to a GitHub repo, or define a custom source function that fetches from external APIs.
Yes, use MDC (Markdown Components) syntax in your markdown files. Create Vue components in components/content/ and reference them in markdown with <ComponentName /> syntax.
SQLite, PostgreSQL, D1 (Cloudflare), and LibSQL are supported. Configure via content.config.ts database option.
Enable NuxtStudio in your nuxt.config.ts, configure collections with proper schemas, and use preview mode to see live edits before publishing.
Full instructions (SKILL.md)
Source of truth, from onmax/nuxt-skills.
name: nuxt-content description: Use when working with Nuxt Content v3, markdown content, or CMS features in Nuxt - provides collections (local/remote/API sources), queryCollection API, MDC rendering, database configuration, NuxtStudio integration, hooks, i18n patterns, and LLMs integration license: MIT
Nuxt Content v3
Progressive guidance for content-driven Nuxt apps with typed collections and SQL-backed queries.
When to Use
Working with:
- Content collections (
content.config.ts,defineCollection) - Remote sources (GitHub repos, external APIs via
defineCollectionSource) - Content queries (
queryCollection, navigation, search) - MDC rendering (
<ContentRenderer>, prose components) - Database configuration (SQLite, PostgreSQL, D1, LibSQL)
- Content hooks (
content:file:beforeParse,content:file:afterParse) - i18n multi-language content
- NuxtStudio or preview mode
- LLMs integration (
nuxt-llms)
For writing documentation: use document-writer skill
For Nuxt basics: use nuxt skill
For NuxtHub deployment: use nuxthub skill (NuxtHub v1 compatible)
Available Guidance
Read specific files based on current work:
- references/collections.md - defineCollection, schemas, sources, content.config.ts
- references/querying.md - queryCollection, navigation, search, surroundings
- references/rendering.md - ContentRenderer, MDC syntax, prose components, Shiki
- references/config.md - Database setup, markdown plugins, renderer options
- references/studio.md - NuxtStudio integration, preview mode, live editing
Loading Files
Consider loading these reference files based on your task:
- references/collections.md - if setting up collections, schemas, or content.config.ts
- references/querying.md - if using queryCollection, navigation, or search
- references/rendering.md - if rendering markdown/MDC or working with ContentRenderer
- references/config.md - if configuring database, markdown plugins, or renderer options
- references/studio.md - if integrating NuxtStudio or preview mode
DO NOT load all files at once. Load only what's relevant to your current task.
Key Concepts
| Concept | Purpose |
|---|---|
| Collections | Typed content groups with schemas |
| Page vs Data | page = routes + body, data = structured data only |
| Remote sources | source.repository for GitHub, defineCollectionSource for APIs |
| queryCollection | SQL-like fluent API for content |
| MDC | Vue components inside markdown |
| ContentRenderer | Renders parsed markdown body |
Quick Start
// content.config.ts
import { defineCollection, defineContentConfig, z } from '@nuxt/content'
export default defineContentConfig({
collections: {
blog: defineCollection({
type: 'page',
source: 'blog/**',
schema: z.object({
title: z.string(),
date: z.date(),
}),
}),
},
})
<!-- pages/blog/[...slug].vue -->
<script setup lang="ts">
const { data: page } = await useAsyncData(
() => queryCollection('blog').path(useRoute().path).first()
)
</script>
<template>
<ContentRenderer v-if="page" :value="page" />
</template>
Verify setup: Run npx nuxi typecheck to confirm collection types resolve. If queryCollection returns empty, check that content files exist in the path matching your source glob.
Directory Structure
project/
├── content/ # Content files
│ ├── blog/ # Maps to 'blog' collection
│ └── .navigation.yml # Navigation metadata
├── components/content/ # MDC components
└── content.config.ts # Collection definitions
Official Documentation
- Nuxt Content: https://content.nuxt.com
- MDC syntax: https://content.nuxt.com/docs/files/markdown#mdc-syntax
- Collections: https://content.nuxt.com/docs/collections/collections
Token Efficiency
Main skill: ~300 tokens. Each sub-file: ~800-1200 tokens. Only load files relevant to current task.
Related skills
More from onmax/nuxt-skills and the wider catalog.

nuxt-modules
Create, test, and publish Nuxt modules with defineNuxtModule patterns, Kit utilities, and CI/CD automation.

nuxt-seo
Nuxt SEO meta-module for robots.txt, sitemaps, OG images, and structured data.

nuxt-studio
Use when working with Nuxt Studio, the self-hosted open-source CMS for Nuxt Content sites - provides visual editing, media management, Git-based publishing, auth providers, and AI content assistance

nuxt-ui
Build styled UI with @nuxt/ui v4 components, forms, tables, modals, and Tailwind Variants theming.

nuxthub
Full-stack Nuxt with Drizzle ORM database, KV storage, blob uploads, and cache—multi-cloud ready.

pnpm
Manage Node.js dependencies with pnpm—monorepos, workspaces, catalogs, and supply chain security.