Configuration

All configuration lives in oxidoc.toml at the project root.

[project]

Core project metadata.

oxidoc.tomltoml
[project]
name = "My Docs"
description = "Documentation for my project"
logo = "/assets/logo.svg"
favicon = "/assets/favicon.svg"
base_url = "https://example.com"
edit_url = "https://github.com/org/repo/blob/main"
edit_label = "Edit this page"
debug_islands = false
FieldTypeDefaultDescription
nameStringrequiredProject name shown in header and metadata
descriptionStringSite description for SEO and feeds
logoStringPath to logo image (relative to assets)
faviconStringPath to favicon (.ico, .svg, or .png)
base_urlStringFull base URL for sitemap, feeds, and canonical links
edit_urlStringBase URL for "edit this page" links (e.g. GitHub blob URL)
edit_labelString"View page source"Label for the edit/source link on each page
debug_islandsboolfalseShow debug outlines on Wasm island components

[theme]

Visual customization.

oxidoc.tomltoml
[theme]
primary = "#3b82f6"
accent = "#f59e0b"
font = "Inter, sans-serif"
code_font = "JetBrains Mono, monospace"
dark_mode = "system"
custom_css = ["assets/custom.css"]
FieldTypeDefaultDescription
primaryString"#2563eb"Primary color (links, buttons, active states)
accentString"#f59e0b"Accent color for decorative elements
fontStringSystem font stackBody text font family
code_fontStringMonospace stackCode font family
dark_modeString"system"Dark mode: "system", "light", or "dark"
custom_cssString[][]Custom CSS files to load (paths relative to project root)

See Theming for the full CSS variable reference.

[routing]

Controls site structure, navigation, and sections.

[routing.root]

oxidoc.tomltoml
[routing.root]
homepage = "home.rdx"
pages = ["about.rdx", "contact.rdx"]
FieldTypeDefaultDescription
homepageStringRDX file rendered at /
pagesString[][]Additional root-level pages rendered at /{name}
oxidoc.tomltoml
[routing]
header_links = [
  { label = "Docs", href = "/docs" },
  { label = "GitHub", href = "https://github.com/org/repo" },
]
FieldTypeDescription
labelStringLink text displayed in the header
hrefStringURL (internal path or external URL)

Array of site sections. Each section has its own sidebar and content directory.

oxidoc.tomltoml
[routing]
navigation = [
  { path = "/docs", dir = "docs", groups = [
    { group = "Getting Started", pages = ["intro", "quickstart"] },
    { group = "Guides", pages = ["guides/styling"] },
  ] },
  { path = "/api", openapi = "./openapi.yaml" },
]
FieldTypeDescription
pathStringBase URL path (e.g., "/docs", "/api")
dirStringContent directory for .rdx files (relative to project root)
groupsArraySidebar groups, each with group (title) and pages (slug list)
openapiStringPath to OpenAPI spec — auto-generates API reference pages

Sections are fully independent — each has its own sidebar. You can mix .rdx content sections with OpenAPI sections:

oxidoc.tomltoml
[routing]
navigation = [
  { path = "/docs", dir = "docs", groups = [
    { group = "Guides", pages = ["intro", "quickstart"] },
    { group = "Advanced", pages = ["plugins", "theming"] },
  ] },
  { path = "/api", openapi = "./openapi.yaml" },
  { path = "/internal", dir = "internal-docs", groups = [
    { group = "Team", pages = ["onboarding", "runbooks"] },
  ] },
]

Content directories

Each section's dir is resolved relative to the project root. You can have as many content directories as you need — they don't have to be called docs.

Pages can use subdirectories — "guides/styling" maps to docs/guides/styling.rdx.

oxidoc.tomltoml
[search]
provider = "oxidoc"
semantic = true
model_path = "./models/embedding.gguf"
FieldTypeDefaultDescription
providerString"oxidoc"Search provider: "oxidoc", "algolia", "typesense", "meilisearch", "custom"
semanticboolfalseEnable semantic (hybrid) search alongside BM25
model_pathStringPath to custom GGUF embedding model

Provider-specific fields — see Search for details:

ProviderFields
Algoliaapp_id, api_key, index_name
Typesensehost, port, protocol, api_key, collection_name
Meilisearchhost, api_key, index_name
Customstylesheet, script, init_script

[versioning]

oxidoc.tomltoml
[versioning]
default = "v2.0"
versions = ["v1.0", "v2.0"]
FieldTypeDefaultDescription
defaultStringDefault version served at the root URL
versionsString[][]All available versions

See Versioning for the full guide.

[i18n]

oxidoc.tomltoml
[i18n]
default_locale = "en"
locales = ["en", "ja", "es"]
translation_dir = "i18n"
FieldTypeDefaultDescription
default_localeString"en"Default locale (served at root, no prefix)
localesString[][]All configured locales
translation_dirString"i18n"Directory for Fluent .ftl translation files

See i18n for the full guide.

oxidoc.tomltoml
[footer]
copyright_owner = "My Company"
copyright_owner_url = "https://example.com"
links = [
  { label = "Privacy", href = "/privacy" },
  { label = "Terms", href = "/terms" },
]
FieldTypeDefaultDescription
copyright_ownerStringName shown in copyright notice
copyright_owner_urlStringURL for the copyright owner name
linksArray[]Footer links, each with label and href

[social]

oxidoc.tomltoml
[social]
github = "https://github.com/org/repo"
discord = "https://discord.gg/invite"

Social links displayed in the header/footer.

[analytics]

oxidoc.tomltoml
[analytics]
google_analytics = "G-XXXXXXXXXX"
# Or inject a custom script:
# script = '<script defer data-domain="example.com" src="https://plausible.io/js/script.js"></script>'
FieldTypeDefaultDescription
google_analyticsStringGoogle Analytics measurement ID
scriptStringCustom analytics script tag (injected in <head>)

See Analytics for details.

[redirects]

oxidoc.tomltoml
[redirects]
redirects = [
  { from = "/old-page", to = "/new-page" },
  { from = "/guide", to = "/docs/quickstart" },
]

Each entry generates an HTML file at from that redirects to to.

[components.custom]

Register Vanilla JS Web Components:

oxidoc.tomltoml
[components.custom]
PromoBanner = "assets/js/promo-banner.js"
FeedbackWidget = "assets/js/feedback-widget.js"

Maps component tag names to JavaScript file paths. See Custom Components.

[attribution]

oxidoc.tomltoml
[attribution]
oxidoc = true
FieldTypeDefaultDescription
oxidocbooltrueShow "Built with Oxidoc" in the footer
View page sourceLast updated on Mar 17, 2026 by Farhan Syah