Project Structure
Overview
TockDocs is a Nuxt layer. Your project is a normal Nuxt app that extends the layer and adds content, configuration, and optional custom Vue code.
Today, TockDocs supports two content architectures:
- legacy mode — a single docs tree, optionally localized with
@nuxtjs/i18n - knowledge-base mode — multiple documentation sets under
/docs/<kb>/<locale>/...
The generated starters use legacy mode by default. The official TockDocs site uses knowledge-base mode.
Starter structures
Default starter
The default starter is a single-locale legacy-mode app:
my-docs/
├── content/
│ ├── index.md
│ └── 1.getting-started/
├── nuxt.config.ts
├── package.json
└── public/
Typical routes:
content/index.md→/content/1.getting-started/3.installation.md→/getting-started/installation
i18n starter
The i18n starter is still legacy mode, but content is grouped by locale:
my-docs/
├── content/
│ ├── en/
│ │ ├── index.md
│ │ └── 1.getting-started/
│ └── zh/
│ ├── index.md
│ └── 1.getting-started/
├── nuxt.config.ts
├── package.json
└── public/
Typical routes:
content/en/index.md→/encontent/zh/1.getting-started/3.installation.md→/zh/getting-started/installation
Knowledge-base mode
KB mode is for multi-product or multi-domain docs collections. The official docs site uses this shape:
content/
├── site/
│ └── index.md
├── manual/
│ ├── kb.yml
│ ├── en/
│ │ └── 1.getting-started/
│ └── zh/
│ └── 1.getting-started/
└── parser/
├── kb.yml
└── en/
└── parser/
Typical routes:
content/site/index.md→/content/manual/en/1.getting-started/3.installation.md→/docs/manual/en/getting-started/installationcontent/parser/en/parser/best-document-parsing-apis-2026.md→/docs/parser/en/parser/best-document-parsing-apis-2026
Each KB is defined by a kb.yml file. That file controls the KB id, title, locales, default locale, entry page, and UI metadata.
package.json
A starter app stays intentionally small. The generated package.json looks like this:
{
"name": "my-docs",
"scripts": {
"dev": "nuxt dev",
"build": "nuxt build"
},
"dependencies": {
"@takumi-rs/core": "^1.0.15",
"better-sqlite3": "^12.6.2",
"nuxt": "^4.3.1",
"tockdocs": "latest"
}
}
Notes:
tockdocsprovides the Nuxt layernuxtis your application runtimebetter-sqlite3is used by Nuxt Content@takumi-rs/coreis used for Takumi-based OG image rendering in local development
nuxt.config.ts
The starter already includes a Nuxt config that extends the layer:
export default defineNuxtConfig({
extends: ['tockdocs'],
})
This is where you add extra Nuxt modules, site metadata, i18n config, or advanced assistant settings.
app/app.config.ts
app.config.ts is optional, but it is the main place to customize the TockDocs UI layer.
export default defineAppConfig({
seo: {
title: 'My Docs',
description: 'My awesome documentation',
},
header: {
title: 'My Docs',
},
})
Use it for branding, navigation, socials, TOC, GitHub links, color mode, and assistant UI options.
Standard Nuxt directories still work
Because TockDocs is just a Nuxt layer, you can use the normal Nuxt app structure alongside your content:
my-docs/
├── app/
│ ├── app.config.ts
│ ├── components/
│ ├── layouts/
│ ├── pages/
│ └── composables/
├── content/
├── public/
├── server/
├── nuxt.config.ts
└── package.json
Use these directories when you want to:
- add custom Vue components
- override built-in layer components
- create extra pages outside docs content
- add API routes or server utilities
- install and configure additional Nuxt modules