Skip to content

Header Nav, Announcement, and Page Chrome#

View Markdown

The default theme ships a header title, search, and theme toggle. Header navigation, an announcement bar, and per-page chrome flags stay off until you opt in. Existing sites do not change unless they set the new options.

Header nav#

Set theme.nav to an array of { text, link } items or { text, items } dropdowns. text may be a string or a locale map ({ en: "Guide", ja: "ガイド" }); the current page locale is used when present:

import { oxContent, defineTheme } from "@ox-content/vite-plugin";

export default {
  plugins: [
    oxContent({
      ssg: {
        theme: defineTheme({
          nav: [
            { text: "Guide", link: "/guide/" },
            {
              text: "API",
              items: [
                { text: "SSG", link: "/api/ssg/" },
                { text: "Search", link: "/api/search/" },
              ],
            },
          ],
        }),
      },
    }),
  ],
};

Labels are escaped. Items whose link uses javascript:, data:, vbscript:, or a protocol-relative // href are omitted.

Dropdowns use a button with aria-expanded and aria-haspopup. Escape closes an open menu. On small viewports the list scrolls horizontally so the page does not overflow.

Announcement bar#

Set theme.announcement to show a bar above the header:

oxContent({
  ssg: {
    theme: defineTheme({
      announcement: {
        text: "Ox Content 3 is in progress.",
        link: "/v3-roadmap/",
        dismissKey: "v3-wip",
      },
    }),
  },
});
Field Required Effect
text yes Escaped. There is no raw HTML slot.
link no https: or same-origin only. Other schemes are dropped.
dismissKey no Best-effort localStorage key. Invalid keys still render a static bar. Dismiss sets hidden on the bar; the theme CSS honors [hidden].

Per-page chrome#

ssg.pageChrome is off by default. true or {} enables reading these frontmatter flags. Omitted flags keep the current layout. false hides that region:

---
title: Landing
sidebar: false
outline: false
footer: false
navbar: false
lastUpdated: false
editLink: false
---

aside: false is an alias for outline: false. When pageChrome is off, these flags are ignored so existing frontmatter cannot change the shell.

Bare mode never emits header nav, the announcement bar, or page-chrome classes.

Last updated: