Skip to content

Sidebar Navigation

A well-organized sidebar is key to a good documentation as it is one of the main ways users will navigate your site. Starlight provides a complete set of options to customize your sidebar layout and content.

Default sidebar

By default, Starlight will automatically generate a sidebar based on the filesystem structure of your documentation, using each file’s title property as the sidebar entry.

For example, given the following file structure:

  • Directorysrc/
    • Directorycontent/
      • Directorydocs/
        • Directoryconstellations/
          • andromeda.md
          • orion.md
        • Directorystars/
          • betelgeuse.md

The following sidebar will be automatically generated:

Learn more about autogenerated sidebars in the autogenerated groups section.

To configure your sidebar links and groups of links (within a collapsible header), use the starlight.sidebar property in astro.config.mjs.

By combining links and groups, you can create a wide variety of sidebar layouts.

Add a link to an internal or external page using an object with label and link properties.

starlight({
sidebar: [
// A link to the Ganymede moon page.
{ label: 'Ganymede', link: '/moons/ganymede/' },
// An external link to the NASA website.
{ label: 'NASA', link: 'https://www.nasa.gov/' },
],
});

The configuration above generates the following sidebar:

Groups

You can add structure to your sidebar by grouping related links together under a collapsible heading. Groups can contain both links and other sub-groups.

Add a group using an object with label and items properties. The label will be used as the heading for the group. Add links or subgroups to the items array.

starlight({
sidebar: [
// A group of links labelled "Constellations".
{
label: 'Constellations',
items: [
{ label: 'Carina', link: '/constellations/carina/' },
{ label: 'Centaurus', link: '/constellations/centaurus/' },
// A nested group of links for seasonal constellations.
{
label: 'Seasonal',
items: [
{ label: 'Andromeda', link: '/constellations/andromeda/' },
{ label: 'Orion', link: '/constellations/orion/' },
{ label: 'Ursa Minor', link: '/constellations/ursa-minor/' },
],
},
],
},
],
});

The configuration above generates the following sidebar:

Autogenerated groups

Starlight can automatically generate a group in your sidebar based on a directory of your docs. This is helpful when you do not want to manually enter each sidebar item in a group.

By default, pages are sorted in alphabetical order according to the file slug.

Add an autogenerated group using an object with label and autogenerate properties. Your autogenerate configuration must specify the directory to use for sidebar entries. For example, with the following configuration:

starlight({
sidebar: [
{
label: 'Constellations',
// Autogenerate a group of links for the 'constellations' directory.
autogenerate: { directory: 'constellations' },
},
],
});

And the following file structure:

  • Directorysrc/
    • Directorycontent/
      • Directorydocs/
        • Directoryconstellations/
          • carina.md
          • centaurus.md
          • Directoryseasonal/
            • andromeda.md

The following sidebar will be generated:

Use the sidebar frontmatter field in individual pages to customize autogenerated links.

Sidebar frontmatter options allow you to set a custom label or add a badge to a link, hide a link from the sidebar, or define a custom sort weighting.

src/content/docs/example.md
---
title: My page
sidebar:
# Set a custom label for the link
label: Custom sidebar label
# Set a custom order for the link (lower numbers are displayed higher up)
order: 2
# Add a badge to the link
badge:
text: New
variant: tip
---

An autogenerated group including a page with the frontmatter above will generate the following sidebar:

Badges

Links, groups, and autogenerated groups can also include a badge property to display a badge next to their label.

starlight({
sidebar: [
{
label: 'Stars',
items: [
// A link with a "Supergiant" badge.
{
label: 'Persei',
link: '/stars/persei/',
badge: 'Supergiant',
},
],
},
// An autogenerated group with an "Outdated" badge.
{
label: 'Moons',
badge: 'Outdated',
autogenerate: { directory: 'moons' },
},
],
});

The configuration above generates the following sidebar:

Badge variants

Customize the badge styling using an object with text and variant properties.

The text represents the content to display (e.g. “New”). Override the default styling, which uses the accent color of your site, by setting the variant property to one of the following values: note, tip, danger, caution or success.

starlight({
sidebar: [
{
label: 'Stars',
items: [
// A link with a yellow "Stub" badge.
{
label: 'Sirius',
link: '/stars/sirius/',
badge: { text: 'Stub', variant: 'caution' },
},
],
},
],
});

The configuration above generates the following sidebar:

Custom HTML attributes

Links can also include an attrs property to add custom HTML attributes to the link element.

In the following example, attrs is used to add a target="_blank" attribute, so that the link opens in a new tab, and to apply a custom style attribute to italicize the link label:

starlight({
sidebar: [
{
label: 'Resources',
items: [
// An external link to the NASA website opening in a new tab.
{
label: 'NASA',
link: 'https://www.nasa.gov/',
attrs: { target: '_blank', style: 'font-style: italic' },
},
],
},
],
});

The configuration above generates the following sidebar:

Internationalization

Use the translations property on link and group entries to translate the link or group label for each supported language by specifying a BCP-47 language tag, e.g. "en", "ar", or "zh-CN", as the key and the translated label as the value. The label property will be used for the default locale and for languages without a translation.

starlight({
sidebar: [
{
label: 'Constellations',
translations: {
'pt-BR': 'Constelações',
},
items: [
{
label: 'Andromeda',
translations: {
'pt-BR': 'Andrômeda',
},
link: '/constellations/andromeda/',
},
{
label: 'Scorpius',
translations: {
'pt-BR': 'Escorpião',
},
link: '/constellations/scorpius/',
},
],
},
],
});

Browsing the documentation in Brazilian Portuguese will generate the following sidebar:

Collapsing groups

Groups of links can be collapsed by default by setting the collapsed property to true.

starlight({
sidebar: [
{
label: 'Constellations',
// Collapse the group by default.
collapsed: true,
items: [
{ label: 'Andromeda', link: '/constellations/andromeda/' },
{ label: 'Orion', link: '/constellations/orion/' },
],
},
],
});

The configuration above generates the following sidebar:

Autogenerated groups respect the collapsed value of their parent group:

starlight({
sidebar: [
{
label: 'Constellations',
// Collapse the group and its autogenerated subgroups by default.
collapsed: true,
autogenerate: { directory: 'constellations' },
},
],
});

The configuration above generates the following sidebar:

This behavior can be overridden by defining the autogenerate.collapsed property.

starlight({
sidebar: [
{
label: 'Constellations',
// Do not collapse the "Constellations" group but collapse its
// autogenerated subgroups.
collapsed: false,
autogenerate: { directory: 'constellations', collapsed: true },
},
],
});

The configuration above generates the following sidebar: