@lupinum/ginko

Ginko: a typed, file-based content model for Nuxt sites (core, CLI and Nuxt module).
610
Install
npm install @lupinum/ginko
Latest Version:0.8.0
Vue:3
License:MIT
Last Updated:Oct 24, 2026
Links: GitHub  ·  npm
Maintainer: lupinum

@lupinum/ginko

Connect a Nuxt site with its content. The site stays normal Nuxt code; the content arrives as one JSON bundle per language, either from the hosted Ginko platform (owners edit opening hours, menus, events) or from Markdown files in your repo (with @lupinum/ginko-content).

Start

npm create ginko my-site

Or add it to an existing Nuxt 4.6+ or Nuxt 5 site:

npm install @lupinum/ginko @lupinum/ginko-content
// ginko.config.ts: the bricks (content types) of this site
import { collection, defineSite, f } from '@lupinum/ginko'

export default defineSite({
  site: 'my-site',
  name: 'My site',
  url: 'https://example.com',
  timeZone: 'Europe/Vienna',
  locales: ['en'],
  currency: 'EUR',
  pages: { home: '/' },
  bricks: {
    events: collection({
      label: 'Events',
      source: 'files', // read from content/events/*.md; without `source` the brick needs the Ginko platform
      fields: { title: f.text('Title'), date: f.date('Date') },
      max: 50,
      order: { field: 'date', dir: 'asc' },
    }),
  },
})

One file per entry, for example content/events/opening.md:

---
title: Opening night
date: 2026-11-05
---
// nuxt.config.ts
import ginko from './ginko.config.ts'

export default defineNuxtConfig({ modules: ['@lupinum/ginko/nuxt'], ginko })
<script setup lang="ts">
const events = useGinko('events') // typed from ginko.config.ts
</script>

What is in the package

  • @lupinum/ginko: defineSite, single, collection, f, defineComponents, formatMoney, plainText, safeHref, startOfWeek and the documented types.
  • @lupinum/ginko/nuxt: the Nuxt module. It fetches and caches the bundle, adds the composables (useGinko, useGinkoEntry, useGinkoQuery, useGinkoNeighbors, useGinkoNav, useGinkoBreadcrumbs, useGinkoToday, useGinkoWeek, useGinkoLocale, useGinkoPath, useGinkoSeo and more), the components <GinkoMarkdown> and <GinkoImage>, a sitemap, and languages through @lupinum/ginko-i18n.
  • @lupinum/ginko/vue: <GinkoMarkdown :value> for a Vue 3 app without Nuxt: takes a parsed MarkdownTree, renders at once (no <Suspense>), and uses only the components you pass. Pass the site's components as registry too: a component keeps only the props its registry declares.
  • ginko: the CLI. ginko check checks the config and the content links of every site (use it in CI; --offline needs no platform key); release and export work with the hosted platform. Every run prints one JSON line and ends with a documented exit code.

Stability

@lupinum/ginko, @lupinum/ginko/nuxt, @lupinum/ginko/vue, @lupinum/ginko/search and @lupinum/ginko/basics are the public API. Every name they export is documented on the docs site. pos and retired on fields and bricks are set by the platform; do not set them. Until 1.0, a minor release may still break it, and the changelog names the break. @lupinum/ginko/internal and @lupinum/ginko/internal/search are for Ginko's own packages. They can change in any release, so do not import them in a site.

Docs

Getting started · Bricks · Reading content · Languages · Content from files · Platform and CLI

License

MIT © Lupinum OG

Related Packages

@lupinum/better-convex-vue

Identity-safe Convex lifecycle primitives for Vue 3 and Vite

2,172 34
@lupinum/better-convex-nuxt

Full-featured Convex integration for Nuxt with SSR, real-time subscriptions, and...

2,088 34
@lupinum/nuxt-pdf

Author and render PDFs with Vue components in Nuxt

1,074 1
@lupinum/nuxt-tour

Build accessible, route-aware product tours with a Vue-native API and Nuxt-first...

1,017 0
@lupinum/nuxt-email

Typed transactional email for Nuxt with email-safe Tailwind v4

1,008 1

Version History

Version Released Vue License
0.8.0 ^3.5.0 MIT
0.7.0 ^3.5.0 MIT
0.6.7 ^3.5.0 MIT
0.6.6 ^3.5.0 MIT
0.6.5 ^3.5.0 MIT
Pre-releases (1)
Version Released License
0.0.0-stage