API Reference for Astro Starlight
Unlike embedding the @scalar/astro component on a page yourself, the plugin injects the route and adds the sidebar entry for you.
Installation#
npm install @scalar/starlightUsage#
Add the plugin to your Starlight configuration and point it at an OpenAPI document:
// astro.config.mjs
import { defineConfig } from 'astro/config'
import starlight from '@astrojs/starlight'
import { scalarStarlight } from '@scalar/starlight'
export default defineConfig({
integrations: [
starlight({
title: 'My Docs',
plugins: [
scalarStarlight({
// How to configure Scalar:
// https://scalar.com/products/api-references/configuration
configuration: {
url: '/openapi.json',
},
}),
],
}),
],
})By default the API reference is served from /api-reference and shows up as an API Reference entry in the Starlight sidebar.
[!NOTE] The sidebar entry is only added when you define a
sidebarin your Starlight config. If you leavesidebarunset, Starlight auto-generates it from your docs — the plugin then does not add the entry (that would replace the auto-generated sidebar and hide your other pages) and logs a note instead. Add the link yourself, e.g.sidebar: [{ label: 'API Reference', link: '/api-reference' }].
The plugin takes our universal configuration object, read more about configuration.
Options#
| Option | Default | Description |
|---|---|---|
configuration |
— | Scalar's universal configuration object. |
pathname |
'/api-reference' |
The path the API reference is served from. |
label |
'API Reference' |
The label of the sidebar entry. |
title |
the label |
The title of the API reference page. |
Custom path and label#
scalarStarlight({
configuration: { url: '/openapi.json' },
pathname: '/reference',
label: 'API',
})Multiple references#
Add the plugin more than once, each with its own pathname, to serve several API references from one site:
plugins: [
scalarStarlight({ pathname: '/reference/payments', label: 'Payments', configuration: { url: '/payments.json' } }),
scalarStarlight({ pathname: '/reference/billing', label: 'Billing', configuration: { url: '/billing.json' } }),
][!NOTE] The configuration is serialized into the page as JSON, so function-valued options (a custom
fetch,onLoaded, plugins, …) are not carried over. The plugin builds on@scalar/astro's client render mode so the reference keeps working across Starlight's client-side navigation (view transitions).