v0.1.0: Experimental
TinaCMS, natively in Nuxt
Contextual/visual editing, an admin studio, and Tina Cloud, wrapped into a single Nuxt module.
export default defineConfig({
schema: {
collections: [
{
name: 'post',
label: 'Posts',
path: 'content/posts',
format: 'md',
fields: [
...
],
},
],
},
})
import { tinaFieldsToZodShape } from 'nuxt-tina/utils'
import tinaConfig from './tina/config'
const postFields = tinaConfig.schema.collections.find(c => c.name === 'post')!.fields
export default defineContentConfig({
collections: {
posts: defineCollection({
type: 'page',
source: 'posts/*.md',
schema: z.object(tinaFieldsToZodShape(postFields, z)),
}),
},
})
Why nuxt-tina?
TinaCMS has no official Vue/Nuxt integration yet. This module closes that gap with a bridge that's already been tested end-to-end.
Contextual Editing
A two-way postMessage bridge between Tina Admin and your Nuxt page, live patching, no reload. The main reason this module exists.
Nuxt Content bridge
Derive a Nuxt Content Zod schema straight from your Tina fields, so you write them once.
Basic CMS mode stays stable
Plain form editing at /admin runs independently of the visual editing bridge.
Tina Cloud ready
Auth, branch, and the Tina Cloud content API are verified working end-to-end.