Skip to main content

Config API

import { defineConfig, loadConfig } from "@noxion/core";

defineConfig()

Typed helper for authoring noxion.config.ts. It returns your input unchanged, so editor inference works without runtime side effects.

Signature

function defineConfig(input: NoxionConfigInput): NoxionConfigInput

Parameters

PropertyTypeRequiredDefaultDescription
rootNotionPageIdstring*Root Notion database page ID. Required unless collections is set.
namestringSite name
domainstringProduction domain without protocol
authorstringDefault author name
descriptionstringSite description
collectionsNoxionCollection[]undefinedMulti-database configuration
defaultPageTypestring"blog"Default page type for single-database mode
rootNotionSpaceIdstringundefinedNotion workspace ID
languagestring"en"BCP 47 language tag
defaultThemeThemeMode"system"Initial color mode
revalidatenumber3600ISR revalidation interval in seconds
revalidateSecretstringundefinedSecret for on-demand revalidation
pluginsPluginConfig[]undefinedPlugins to enable

What defineConfig does

  • Provides compile-time type checking for config fields.
  • Returns the input object as-is.
  • Does not apply defaults or validate required fields at runtime.

Runtime defaulting/validation happens in loadConfig(input).

Single-database mode

export default defineConfig({
rootNotionPageId: process.env.NOTION_PAGE_ID!,
name: "My Blog",
domain: "myblog.com",
author: "Jane Doe",
description: "A blog about web development.",
plugins: [createRSSPlugin({ feedPath: "/feed.xml" })],
});

Multi-database mode

export default defineConfig({
name: "My Site",
domain: "mysite.com",
author: "Jane Doe",
description: "Blog, docs, and portfolio.",
collections: [
{ databaseId: process.env.NOTION_PAGE_ID!, pageType: "blog" },
{ databaseId: process.env.DOCS_NOTION_ID!, pageType: "docs", pathPrefix: "docs" },
{ databaseId: process.env.PORTFOLIO_NOTION_ID!, pageType: "portfolio", pathPrefix: "portfolio" },
],
});

loadConfig()

Validates a NoxionConfigInput object and returns a normalized NoxionConfig with defaults applied.

Signature

function loadConfig(input: NoxionConfigInput): NoxionConfig

Runtime behavior

  • Throws if both rootNotionPageId and collections are missing.
  • Throws if required fields like name or domain are missing.
  • Applies defaults: language, defaultTheme, defaultPageType, revalidate.
  • If only rootNotionPageId is provided, creates a default collections entry.

Usage

loadConfig() is called internally by the generated lib/config.ts:

// lib/config.ts (generated by create-noxion)
import { loadConfig } from "@noxion/core";
import noxionConfigInput from "../noxion.config";

export const siteConfig = loadConfig(noxionConfigInput);

NoxionCollection

interface NoxionCollection {
name?: string;
databaseId: string;
pageType: string;
pathPrefix?: string;
schema?: Record<string, string>;
}
FieldTypeRequiredDescription
namestringDisplay name for the collection
databaseIdstringNotion database page ID
pageTypestringPage type: "blog", "docs", "portfolio", or custom
pathPrefixstringURL prefix (e.g. "docs"/docs/[slug])
schemaRecord<string, string>Override default property name mapping

See Types for the complete type reference.