Type to search pages and sections.

Skip to content
Ginko

Content for Nuxt sites that owners keep current themselves.

Ginko keeps a site apart from its content. Developers build with plain Nuxt. Owners change opening hours, menus and texts in the Studio, with approval and scheduling. Lupinum hosts the Studio and opens it by invitation; without it, the same bricks read Markdown from the repository.

npm create ginko@latest my-site
  • Bricks instead of schema work

    A brick describes one kind of content with fields. The form, the checks, the types and the bundle all come from it.

  • Files or platform

    The same brick reads Markdown from the repository today and the platform tomorrow. The site code stays the same.

  • Languages built in

    Addresses per language, hreflang, a language switcher and ICU messages, without a second module.

  • Approval before it goes live

    Changes can need a yes, go live at a set time, and can be taken back. The Studio is hosted by Lupinum, by invitation.

  • Components for Markdown

    Callouts, tabs, steps, cards, code groups and more, with fields in the Studio and as a shadcn-vue registry.

  • Readable by agents

    Every page also exists as Markdown, plus llms.txt and an MCP endpoint for the docs.

One brick, one page, one piece of content

A brick in ginko.config.ts describes one kind of content. The page reads it with one composable. The content lives in a Markdown file or comes from the platform, where owners edit it in the Studio. Either way, the site receives it as a bundle: all content of one language in one JSON response.

import { defineSite, single, f } from '@lupinum/ginko'

export default defineSite({
  site: 'linde',
  name: 'Linden Inn',
  url: 'https://linde.example',
  timeZone: 'Europe/Vienna',
  locales: ['en', 'de'],
  currency: 'EUR',
  pages: { home: { en: '/', de: '/de' } },
  bricks: {
    hours: single({
      label: 'Opening hours',
      source: 'files',
      fields: { note: f.text('Note', { optional: true }), text: f.markdown('Hours') },
    }),
  },
})

Continue with Getting started. To compare Ginko with Nuxt Content, a hosted CMS or a Git-based editor, read Compare and switch.