
Nuxt Studio
- 997 installs
- 696 repo stars
- Updated July 27, 2026
- onmax/nuxt-skills
nuxt-studio is a Claude Code skill that gives developers precise, context-aware guidance for installing, configuring, and operating Nuxt Studio—the self-hosted open-source CMS for Nuxt Content sites.
About
nuxt-studio is a MIT-licensed Claude Code skill for Nuxt Studio, the self-hosted open-source CMS module for Nuxt Content websites in production. The skill walks developers through installing the nuxt-studio module, configuring authentication providers (GitHub, GitLab, Google OAuth, SSO, custom), setting up Git-based publishing with branch config, enabling visual content editing via MDC components and YAML/JSON forms, and connecting media backends including public directories, NuxtHub blob, S3, and R2. Developers reach for nuxt-studio when they need production-ready visual editing and Git-backed content workflows without leaving the Nuxt Content stack. It covers frontmatter editing, publishing flows, and operational setup rather than generic Nuxt app scaffolding.
- Provides targeted guidance for installing and configuring the nuxt-studio module
- Covers authentication providers including GitHub, GitLab, Google OAuth, SSO and custom
- Handles Git provider setup, visual content editing with MDC components, YAML/JSON forms and frontmatter
- Supports multiple media management backends: public dir, NuxtHub blob, S3 and R2
- Includes publishing flows with draft layers, conflict detection and CI/CD rebuild triggers
Nuxt Studio by the numbers
- 997 all-time installs (skills.sh)
- +27 installs in the week ending Aug 5, 2026 (Skillselion tracking)
- Ranked #261 of 1,879 Documentation skills by installs in the Skillselion catalog
- Security screen: LOW risk (skills.sh audit)
- Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/onmax/nuxt-skills --skill nuxt-studioAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 997 |
|---|---|
| repo stars | ★ 696 |
| Security audit | 3 / 3 scanners passed |
| Last updated | July 27, 2026 |
| Repository | onmax/nuxt-skills ↗ |
How do you set up Nuxt Studio on Nuxt Content?
Get precise, context-aware guidance when installing, configuring, and operating Nuxt Studio on a Nuxt Content site.
Who is it for?
Nuxt Content developers adding self-hosted visual CMS editing, Git-based publishing, and multi-provider auth to a production site.
Skip if: Teams building non-Nuxt stacks or sites that only need static Markdown without a CMS module, OAuth, or Git publishing.
When should I use this skill?
The developer is installing nuxt-studio, configuring Nuxt Studio auth/Git/media providers, or debugging visual content editing on a Nuxt Content site.
What you get
Configured nuxt-studio module, auth providers, Git publishing branch rules, media storage bindings, and visual editing workflows for MDC/YAML/JSON content.
- Configured nuxt-studio module
- Auth and Git provider setup
- Media storage integration
By the numbers
- Documents 5 auth approaches: GitHub, GitLab, Google OAuth, SSO, and custom
- Supports 4 media backends: public dir, NuxtHub blob, S3, and R2
Files
Nuxt Studio
Self-hosted, open-source CMS module for editing Nuxt Content websites in production.
When to Use
Working with:
- Installing and configuring
nuxt-studiomodule - Authentication providers (GitHub, GitLab, Google OAuth, SSO, custom)
- Git provider setup (GitHub, GitLab, branch config)
- Visual content editing (MDC components, YAML/JSON forms, frontmatter)
- Media management (public dir, NuxtHub blob, S3, R2)
- Publishing flow (draft layer, conflict detection, CI/CD rebuild)
- AI-powered content assistance (Vercel AI Gateway)
For content collections/queries: use nuxt-content skill For NuxtHub storage/database: use nuxthub skill For Nuxt basics: use nuxt skill
Available Guidance
Read specific files based on current work:
- [references/configuration.md](references/configuration.md) - Module setup, auth providers, Git providers, environment variables
- [references/live-editing.md](references/live-editing.md) - Visual editor, media management, MDC components, AI features
- [references/deployment.md](references/deployment.md) - SSR requirements, Git publishing, branch strategies, CI/CD
Loading Files
Consider loading these reference files based on your task:
- [ ] references/configuration.md - if installing, configuring auth/git providers, or setting env vars
- [ ] references/live-editing.md - if working with content editor, media, components, or AI features
- [ ] references/deployment.md - if deploying, configuring branches, or troubleshooting publish flow
DO NOT load all files at once. Load only what's relevant to your current task.
Key Concepts
| Concept | Purpose |
|---|---|
| Auth providers | Control who can access Studio (GitHub, GitLab, Google, SSO) |
| Git providers | Handle publishing commits to your repository |
| Draft layer | IndexedDB-backed local storage for unpublished changes |
| Media manager | Upload/browse files in /public or external blob storage |
| Visual editor | TipTap-based WYSIWYG with MDC component support |
| Publishing | Commits drafts to Git, triggers CI/CD rebuild |
Quick Start
npx nuxt module add nuxt-studio// nuxt.config.ts
export default defineNuxtConfig({
modules: ['@nuxt/content', 'nuxt-studio'],
studio: {
repository: {
provider: 'github',
owner: 'your-username',
repo: 'your-repo',
branch: 'main',
},
},
})# .env
STUDIO_GITHUB_CLIENT_ID=<client_id>
STUDIO_GITHUB_CLIENT_SECRET=<client_secret>Access Studio at https://your-site.com/_studio (default route).
Official Documentation
- Nuxt Studio: https://nuxt.studio
- Setup: https://nuxt.studio/setup
- GitHub: https://github.com/nuxt-content/nuxt-studio
Token Efficiency
Main skill: ~300 tokens. Each sub-file: ~800-1200 tokens. Only load files relevant to current task.
Configuration
When to Use
Installing Nuxt Studio, configuring auth/git providers, setting up environment variables, or customizing module options.
Installation
npx nuxt module add nuxt-studioRequires @nuxt/content and SSR-capable hosting (nuxt build, not static-only).
Module Options
// nuxt.config.ts
export default defineNuxtConfig({
modules: ['@nuxt/content', 'nuxt-studio'],
studio: {
route: '/_studio', // Admin route (default)
dev: true, // Enable in dev (default), set false to test prod locally
i18n: { defaultLocale: 'en' }, // 23 languages supported
git: {
commit: { messagePrefix: 'content:' }, // Prefix all commits
},
media: {
external: false, // Enable NuxtHub blob storage
maxFileSize: 10, // MB
allowedTypes: ['image/*', 'video/*', 'audio/*'],
prefix: 'studio', // Bucket path prefix
},
meta: {
components: {
include: ['Content*', 'Landing*'],
exclude: ['HiddenComponent'],
groups: [
{ label: 'Content', include: ['content*'] },
{ label: 'UI', include: ['app/components/ui/**'] },
],
ungrouped: 'include',
},
},
},
})Auth Providers
GitHub OAuth
# .env
STUDIO_GITHUB_CLIENT_ID=<client_id>
STUDIO_GITHUB_CLIENT_SECRET=<client_secret>
STUDIO_GITHUB_MODERATORS=admin@example.com,editor@example.com # Optional whitelist
STUDIO_GITHUB_INSTANCE_URL=https://gh-ent.com # GitHub EnterpriseCallback URL: https://yourdomain.com/__nuxt_studio/auth/github Git operations use the OAuth token automatically.
GitLab OAuth
STUDIO_GITLAB_APPLICATION_ID=<app_id>
STUDIO_GITLAB_APPLICATION_SECRET=<secret>
STUDIO_GITLAB_MODERATORS=admin@example.com # Optional
STUDIO_GITLAB_INSTANCE_URL=https://gitlab.company.com # Self-hostedCallback URL: https://yourdomain.com/__nuxt_studio/auth/gitlab Requires api scope.
Google OAuth
STUDIO_GOOGLE_CLIENT_ID=<client_id>
STUDIO_GOOGLE_CLIENT_SECRET=<client_secret>
STUDIO_GOOGLE_MODERATORS=admin@example.com # REQUIRED
STUDIO_GITHUB_TOKEN=<pat> # PAT needed — Google doesn't provide Git accessCallback URL: https://yourdomain.com/__nuxt_studio/auth/google
SSO Server
Deploy nuxt-studio-sso independently:
STUDIO_SSO_URL=https://your-sso-server.com
STUDIO_SSO_CLIENT_ID=<client_id>
STUDIO_SSO_CLIENT_SECRET=<client_secret>Custom Auth
// server/api/login.post.ts
import { setStudioUserSession } from '#imports'
export default eventHandler(async (event) => {
const { email, password } = await readBody(event)
const user = await validateCredentials(email, password)
if (!user) throw createError({ statusCode: 401, message: 'Invalid credentials' })
await setStudioUserSession(event, {
providerId: user.id, name: user.name, email: user.email, avatar: user.avatar || '',
})
return { ok: true }
})Logout: call clearStudioUserSession(event). Requires PAT for Git operations.
Git Provider Setup
studio: {
repository: {
provider: 'github', // or 'gitlab'
owner: 'your-username',
repo: 'your-repo',
branch: 'main',
rootDir: 'docs', // Monorepo support
private: true, // Set false to limit OAuth to public repos
instanceUrl: 'https://gh-ent.com', // Enterprise/self-hosted
},
}Auto-detected on Vercel, Netlify, GitHub Actions, GitLab CI from platform env vars. Manual config overrides auto-detection.
Auth Hooks
// server/plugins/studio-auth.ts
export default defineNitroPlugin((nitroApp) => {
nitroApp.hooks.hook('studio:auth:login', async ({ user, event }) => {
console.log(`${user.email} logged in`)
})
nitroApp.hooks.hook('studio:auth:logout', async ({ user, event }) => {
console.log(`${user.email} logged out`)
})
})Provider Comparison
| Provider | Auth | Git Ops | Access Control |
|---|---|---|---|
| GitHub | OAuth | Automatic | OAuth scope |
| GitLab | OAuth | Automatic | OAuth scope |
| OAuth | PAT required | Moderator whitelist | |
| SSO | SSO | Automatic | SSO server |
| Custom | Custom | PAT required | Custom logic |
Multiple providers can be used simultaneously (e.g., GitHub for devs + Google for editors).
Resources
- Setup: https://nuxt.studio/setup
- Auth providers: https://nuxt.studio/auth-providers
- Git providers: https://nuxt.studio/git-providers
Deployment
When to Use
Deploying a Nuxt Studio site, configuring Git publishing, setting up branch strategies, or troubleshooting the publish flow.
Requirements
- SSR hosting required — Studio needs server-side routes for authentication. Deploy with
nuxt build, not static-only generation. - Nuxt Content —
@nuxt/contentmust be installed and configured. - Supported platforms: Vercel, Netlify, Cloudflare Pages, any Node.js SSR host.
Publishing Flow
1. Editor makes changes → stored as drafts in IndexedDB (browser-local) 2. Editor clicks Publish → Studio commits drafts to Git via provider API 3. CI/CD detects commit → rebuilds and redeploys automatically 4. Studio detects new deployment → notifies editors
No webhooks to configure — publishing uses the Git provider's API directly, and deployment relies on your existing CI/CD pipeline.
Git Repository Config
// nuxt.config.ts
export default defineNuxtConfig({
studio: {
repository: {
provider: 'github', // or 'gitlab'
owner: 'your-username',
repo: 'your-repo',
branch: 'main',
},
},
})Auto-Detection
On supported platforms, repository details auto-detect from CI env vars:
| Platform | Env Vars Used |
|---|---|
| Vercel | VERCEL_GIT_PROVIDER, VERCEL_GIT_REPO_OWNER, VERCEL_GIT_REPO_SLUG, VERCEL_GIT_COMMIT_REF |
| Netlify | REPOSITORY_URL, BRANCH |
| GitHub Actions | GITHUB_REPOSITORY, GITHUB_REF_NAME |
| GitLab CI | CI_PROJECT_NAMESPACE, CI_PROJECT_NAME, CI_COMMIT_BRANCH |
Manual config overrides auto-detection.
Branch Strategies
Direct to Production
Default. Commits go to main (or configured branch), triggering production rebuild:
studio: { repository: { branch: 'main' } }Preview Branch
Publish to a staging branch, review on preview environment, then merge to production:
studio: {
repository: {
branch: process.env.STUDIO_BRANCH_NAME || 'content-preview',
},
}Environment-Based
Different branches per deployment environment:
studio: {
repository: {
branch: process.env.VERCEL_GIT_COMMIT_REF || 'main',
},
}Commit Configuration
studio: {
git: {
commit: {
messagePrefix: 'content:', // Prepends to all Studio commits
},
},
}Conflict Detection
Studio compares local drafts against the latest Git version before publishing. Conflicts arise when:
- Multiple editors modify the same files during active builds
- Deployments fail, leaving production database out of sync with Git
Studio warns editors and prevents overwriting newer changes.
Platform-Specific Setup
Vercel
// nuxt.config.ts — repository auto-detected
export default defineNuxtConfig({
modules: ['@nuxt/content', 'nuxt-studio'],
// studio.repository auto-populated from VERCEL_GIT_* env vars
})Set STUDIO_GITHUB_CLIENT_ID and STUDIO_GITHUB_CLIENT_SECRET in Vercel project settings.
Netlify
// nuxt.config.ts — repository auto-detected from REPOSITORY_URL
export default defineNuxtConfig({
modules: ['@nuxt/content', 'nuxt-studio'],
})Cloudflare Pages
export default defineNuxtConfig({
modules: ['@nuxt/content', 'nuxt-studio'],
studio: {
repository: {
provider: 'github',
owner: 'your-username',
repo: 'your-repo',
branch: process.env.CF_PAGES_BRANCH || 'main',
},
},
})Pre-rendering (Optional)
If using hybrid rendering, ensure Studio routes aren't pre-rendered:
export default defineNuxtConfig({
nitro: {
prerender: {
routes: ['/'],
crawlLinks: true,
},
},
})Studio's /_studio route requires SSR and handles itself automatically.
Monorepo Support
studio: {
repository: {
rootDir: 'docs', // Subdirectory containing the Nuxt project
},
}Troubleshooting
| Issue | Solution |
|---|---|
| Auth callback fails | Verify callback URL matches /__nuxt_studio/auth/{provider} |
| Publishing fails | Check PAT/OAuth has write permissions to repo |
| Changes not visible after publish | CI/CD may still be building — wait for deployment |
| Draft conflicts | Pull latest changes, discard stale drafts |
| Studio route 404 | Ensure SSR deployment (nuxt build), not static generation |
Resources
- Setup: https://nuxt.studio/setup
- Advanced sync: https://nuxt.studio/advanced
- Git providers: https://nuxt.studio/git-providers
Live Editing
When to Use
Working with the visual content editor, media management, MDC component editing, or AI content features.
Visual Editor
TipTap-based WYSIWYG editor that generates MDC syntax. Two editing modes:
- Visual editor — Notion-like block editing with drag-and-drop
- Code editor — Direct markdown/MDC editing
MDC Component Support
Insert Vue components in content, edit props visually, drag-and-drop blocks. Components in components/content/ are available in the editor.
Filter visible components:
// nuxt.config.ts
export default defineNuxtConfig({
studio: {
meta: {
components: {
include: ['Content*', 'Landing*'],
exclude: ['InternalComponent'],
groups: [
{ label: 'Content', include: ['content*'] },
{ label: 'Landing', include: ['landing*'] },
],
},
},
},
})Schema-Driven Forms
Frontmatter and YAML/JSON files get auto-generated form UIs based on collection schemas. Use .describe() for editor labels:
// content.config.ts
import { defineCollection, defineContentConfig, z } from '@nuxt/content'
export default defineContentConfig({
collections: {
blog: defineCollection({
type: 'page',
source: 'blog/**/*.md',
schema: z.object({
title: z.string().describe('Post title'),
description: z.string().describe('SEO description'),
image: z.string().describe('Cover image URL'),
date: z.date().describe('Publication date'),
tags: z.array(z.string()).describe('Post tags'),
}),
}),
},
})Draft System
Changes are stored as drafts in IndexedDB (browser-local, not shared across devices). Three-tier flow:
1. Production layer — SQLite WASM in browser, mirrors deployed content 2. Draft layer — IndexedDB via unstorage, stores unpublished edits 3. Git repository — Final destination when publishing
On load, drafts merge with the SQLite database to render a preview of your changes.
Preview
In development, file changes sync in real-time with local filesystem via WebSocket HMR.
In production, the draft layer overlays production content so editors see their changes before publishing.
Media Management
Access via the Media tab. Browse folders, upload files, drag-and-drop.
Default Storage (/public)
Zero config. Files committed to Git on publish. Best for small projects. A service worker intercepts media requests to display draft versions.
External Storage (NuxtHub Blob)
For larger projects — files stored in cloud, not committed to Git:
npx nuxi module add hub// nuxt.config.ts
export default defineNuxtConfig({
modules: ['@nuxthub/core', 'nuxt-studio'],
hub: { blob: true },
studio: {
media: { external: true },
},
})Provider env vars:
# Vercel Blob
BLOB_READ_WRITE_TOKEN=your-token
# S3-compatible
S3_ACCESS_KEY_ID=key
S3_SECRET_ACCESS_KEY=secret
S3_BUCKET=bucket-name
S3_ENDPOINT=endpoint-urlOr Cloudflare R2:
hub: { blob: { driver: 'cloudflare-r2', bucketName: 'your-bucket' } }Media Config Options
| Option | Type | Default |
|---|---|---|
external | boolean | false |
maxFileSize | number | 10 (MB) |
allowedTypes | string[] | ['image/*', 'video/*', 'audio/*'] |
prefix | string | 'studio' |
Supported: PNG, JPG, SVG, WebP, AVIF, GIF, MP4, MOV, WebM, MP3, WAV, AAC.
Editor Integration
- Slash command
/→ search "Image" for quick insertion - Alt text support for SEO/a11y
- Custom width/height attributes
AI Content Assistance
Powered by Vercel AI Gateway. Provides context-aware content completion, transformation, and style guidance based on project context, cursor position, and active components.
Plug-and-play — no additional configuration needed beyond Vercel AI Gateway access.
Resources
- Content editing: https://nuxt.studio/content-editing
- Media: https://nuxt.studio/medias
- Introduction: https://nuxt.studio/introduction
Related skills
How it compares
Choose nuxt-studio over generic Nuxt setup skills when the task is specifically Nuxt Studio CMS configuration, not general Nuxt routing or component development.
FAQ
What is Nuxt Studio?
Nuxt Studio is a self-hosted, open-source CMS module for editing Nuxt Content websites in production. nuxt-studio guides installation, auth providers, Git publishing, media storage, and visual MDC/YAML/JSON editing workflows.
Which auth providers does nuxt-studio support?
nuxt-studio documents authentication setup for GitHub, GitLab, Google OAuth, SSO, and custom providers. The skill covers provider configuration alongside Git publishing and media backend wiring for Nuxt Content sites.
Is Nuxt Studio safe to install?
skills.sh reports 3 of 3 security scanners passed. Review the Security Audits panel on this page before installing in production.