Skip to content

Konfiguration

Definiere dein Schema in contentkit.config.ts mit defineConfig.

Minimales Beispiel

ts
// contentkit.config.ts
import { defineConfig } from "contentkit";

export default defineConfig({
  contentDirPath: "content",
  outputFormat: "esm",
  documentTypes: [],
});
js
// contentkit.config.js
import { defineConfig } from "contentkit";

export default defineConfig({
  contentDirPath: "content",
  outputFormat: "esm",
  documentTypes: [],
});

Document Type

ts
// inside contentkit.config.ts
{
  name: 'Post',
  filePathPattern: 'posts/**/*.md',
  fields: {
    title: { type: 'string', required: true },
    date: { type: 'date', required: true },
    tags: { type: 'array', items: { type: 'string' } }
  },
  computedFields: {
    slug: { type: 'string', resolve: (doc) => doc.title.toLowerCase().replace(/\s+/g, '-') }
  }
}
js
// inside contentkit.config.js
{
  name: 'Post',
  filePathPattern: 'posts/**/*.md',
  fields: {
    title: { type: 'string', required: true },
    date: { type: 'date', required: true },
    tags: { type: 'array', items: { type: 'string' } }
  },
  computedFields: {
    slug: { type: 'string', resolve: (doc) => doc.title.toLowerCase().replace(/\s+/g, '-') }
  }
}

Feld-Definition

Primitive Typen: string | number | boolean | date

Optionen:

  • required: true markiert Pflichtfelder
  • list: true Array dieses Primitivs

Computed Fields

Für abgeleitete Werte wie slug, readingTime, etc.

ts
readingTime: { type: 'number', resolve: d => Math.ceil(d.raw.split(/\s+/).length / 200) }
js
readingTime: { type: 'number', resolve: (d) => Math.ceil(d.raw.split(/\s+/).length / 200) }

Validierung

Bei contentkit build wird jedes Dokument validiert; Fehler brechen den Build ab.

Tipps

  • Halte den Content-Ordner klein & fokussiert
  • Bevorzuge berechnete Slugs statt manuell (verhindert Drift)
  • Normalisiere Daten mit dem date Typ

Released under the BSD-3-Clause License.