How Ginko Docs works
Understand what the Nuxt layer provides and which parts remain under your application's control.
Ginko Docs combines a Nuxt application shell with Ginko Content's document model. You write content and site configuration; the layer turns that input into human-readable pages and machine-readable output.
Markdown and data files
│
▼
Ginko Content collections
parse · validate · localize
│
▼
Ginko Docs application layer
routes · navigation · search · SEO
│
├── rendered documentation pages
└── Markdown, llms.txt and MCP surfacesThe layer supplies the application
Adding @lupinum/ginko-docs to extends supplies the standard docs and optional blog routes, layouts, header, footer, sidebar, search interface, prose styles, MDC components, localization, SEO integration, and agent routes.
You do not need a catch-all page or a second sidebar configuration. The layer reads the canonical docs collection and renders the generated navigation tree.
Your project supplies the product
The consuming project owns:
- Markdown and data files under
content/; - collection and locale choices in
content.config.ts; - site identity and feature settings in
app/app.config.ts; - public assets such as logos and editorial images;
- optional Nuxt overrides for the landing page, layouts, and shell components.
Use Nuxt's normal layer override rules when the default presentation does not fit. A same-named file in the consuming app can replace a layer page or component without forking the package.
Two configuration files serve two runtimes
content.config.ts runs the content pipeline. defineGinkoDocsConfig() creates the docs collection, optional blog and author collections, locale-aware route mounts, sitemap entries, and agent metadata.
app/app.config.ts controls the rendered application. It contains localized brand text, logo paths, navigation presentation, the announcement banner, analytics, feedback, image behavior, and landing-page content.
Some site values, such as the name, description, and public URL, appear in both places because build-time content output and the rendered Nuxt app consume them independently. Import them from a small shared site.json file instead of repeating literals that can drift. JSON is portable across the Nuxt, app-config, and content-config loaders.
One content tree drives every reader surface
Numeric file order and folder metadata create the documentation tree. Ginko Docs uses that same tree for the sidebar, breadcrumbs, previous and next links, locale switching, search results, and route discovery.
This keeps authored Markdown as the source of truth. Changing a title, route, or order does not require updating a separate navigation array.
Use the public package boundaries
Consumer code should use only the documented exports:
@lupinum/ginko-docsfor the Nuxt layer;@lupinum/ginko-docs/contentfordefineGinkoDocsConfig();@lupinum/ginko-docs/app-configfor app-config types;@lupinum/ginko-docs/componentsfor the MDC tag map and related types.
Files behind layer aliases and internal route composables are implementation details. Override a Nuxt page or component when you need different behavior instead of importing an internal helper.