Skip to content
Merged
Show file tree
Hide file tree
Changes from 28 commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
c758d35
geist and ibm fonts
mikemazara Aug 11, 2026
1be1140
sidebar and nav tabs
mikemazara Aug 11, 2026
65b26da
phase 3 and code cleanup
mikemazara Aug 12, 2026
81d99f5
fix inconsistencies
mikemazara Aug 12, 2026
2e2b923
fix script pattern to regenerate dist
mikemazara Aug 13, 2026
5eeefdc
footer, and alerts
mikemazara Aug 13, 2026
f7a14e4
bcrums, footer, sidebar
mikemazara Aug 13, 2026
22c7b3d
table behave
mikemazara Aug 13, 2026
a089ea4
min w for mobile
mikemazara Aug 13, 2026
4634361
fix lint
mikemazara Aug 13, 2026
314f7d3
a11y
mikemazara Aug 20, 2026
5a774b1
table and responsive
mikemazara Aug 20, 2026
45697d8
table and tests
mikemazara Aug 20, 2026
7d850de
merge 1
mikemazara Aug 20, 2026
5d6121a
pt 2
mikemazara Aug 20, 2026
7e8a422
Match NDS hover, code chip, and footer logo alignment.
mikemazara Aug 24, 2026
9151e89
Merge branch 'update-starlight-docs' into update-starlight-docs-2
mikemazara Aug 24, 2026
dd65971
Match landing hover, guide filters, and 404 to the Figma review.
mikemazara Aug 24, 2026
e76c00e
Match Figma TOC bar, nav underline, and chrome sizes.
mikemazara Aug 25, 2026
be918ec
Merge update-starlight-docs into update-starlight-docs-2.
mikemazara Aug 25, 2026
2d4e3a7
Match mobile hero, guide filters, and homepage cards to Figma.
mikemazara Aug 25, 2026
c2db51d
Merge branch 'update-starlight-docs' into update-starlight-docs-2
mikemazara Aug 25, 2026
bf49132
Keep the 2px tab underline and a named footer logo.
mikemazara Aug 25, 2026
e514c5e
Drop the 12px homepage card override.
mikemazara Aug 25, 2026
3c5a6a9
Hide the nested code-frame titlebar inside tab panels.
mikemazara Aug 25, 2026
ed593e8
Merge branch 'update-starlight-docs' into update-starlight-docs-2
mikemazara Aug 25, 2026
c943e7d
Format the tabbed-code header selector.
mikemazara Aug 25, 2026
79b30ca
Merge branch 'update-starlight-docs' into update-starlight-docs-2
mikemazara Aug 25, 2026
d977407
update links
mikemazara Aug 25, 2026
654d561
Merge remote-tracking branch 'origin/main' into update-starlight-docs
mikemazara Aug 31, 2026
c070ebd
Merge branch 'update-starlight-docs' into update-starlight-docs-2
mikemazara Aug 31, 2026
8dbf24e
align icon
mikemazara Sep 1, 2026
ed171b4
Merge branch 'update-starlight-docs' into update-starlight-docs-2
mikemazara Sep 1, 2026
201bbd6
Untrack .cursor and ignore it
mikemazara Sep 1, 2026
5c85456
Merge remote-tracking branch 'origin/main' into update-starlight-docs-2
mikemazara Sep 1, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file modified .github/screenshots/dark.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified .github/screenshots/light.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 2 additions & 0 deletions .github/workflows/pages.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
fetch-depth: 0
- uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2.2.0
with:
bun-version: latest
Expand Down
42 changes: 35 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,8 @@ export default defineConfig({
```

That's it - the plugin wires in the theme CSS, self-hosted fonts, the branded
`SiteTitle`/`Head`/`Footer` components, and a default GitHub social link.
header, splash footer, and a default GitHub social link. Pass `nav` if you want
top-level Docs / Guides / Reference tabs.

### Serving under a subpath

Expand Down Expand Up @@ -68,12 +69,15 @@ starlight({ plugins: [nebari({ logoHref: 'https://packs.nebari.dev/' })] })
- **Brand colors** - nebari-design's OKLCH tokens mapped onto Starlight's theme
variables in both light and dark mode. Starlight's WCAG-tuned gray scale is
kept for accessible body and muted text.
- **Typography** - Poppins for headings, Atkinson Hyperlegible for body, Fira
Code for code, all self-hosted (no external font requests at runtime).
- **Typography** - Geist for body and headings, IBM Plex Mono for code, both
self-hosted (no external font requests at runtime).
- **Logo, favicon, and footer** - the Nebari mark in the header, an inlined
symbol favicon, and a branded footer on every page.
- **Search** - Starlight's built-in Pagefind, ready to merge additional pack
indexes for portal-wide multisite search.
symbol favicon, and a branded multi-column footer on splash pages (home, 404).
Doc pages with a sidebar end at their content.
- **Nav tabs** - optional `nav` items render as header tabs and in the mobile
drawer. Omit the option and the header stays stock Starlight.
- **Search** - Starlight's built-in Pagefind, styled to the Docs theme, ready to
merge additional pack indexes for portal-wide multisite search.

Everything is overridable: your own `customCss`, `components`, and `social`
entries are merged after the theme's, so a consumer always wins.
Expand Down Expand Up @@ -111,6 +115,19 @@ Run the test suite (builds the package and docs, then runs the tests):
bun test
```

The root `test` script covers `packages/starlight/test` and `docs/test` (the
`--base /demo-pack` build). End-to-end checks live in `docs/`:

```sh
cd docs && bun run e2e
```

Regenerate the README screenshots (out of CI, 1440×900):

```sh
cd docs && bun run screenshots
```

### Linting and formatting

[Biome](https://biomejs.dev) handles both formatting and linting (including
Expand Down Expand Up @@ -161,9 +178,20 @@ This package follows [EffVer](https://jacobtomlinson.dev/effver/)
your build unexpectedly:

```jsonc
{ "dependencies": { "@nebari/starlight": "^0.1.0" } }
{ "dependencies": { "@nebari/starlight": "^0.3.0" } }
```

### 0.3.0

EffVer meso. Four behaviours change without an opt-in:

1. The footer no longer renders on doc pages — splash pages only.
2. `lastUpdated` defaults to `true`, so a date appears on pages that had none.
3. Nav tabs appear only if `nav` is set; absent, the header is byte-identical.
4. Tables scroll rather than wrap. Long values scroll inside the cell or the
table instead of breaking across lines. With JavaScript disabled, a wide
table can overflow the page.

## Releasing

Releases are published to npm automatically from GitHub Releases via
Expand Down
2 changes: 1 addition & 1 deletion bun.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

13 changes: 12 additions & 1 deletion docs/astro.config.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,16 @@ export default defineConfig({
integrations: [
starlight({
title: 'Nebari Starlight',
plugins: [nebari()],
description: 'Shared Starlight theme for Nebari documentation sites.',
plugins: [
nebari({
nav: [
{ label: 'Docs', href: '/' },
{ label: 'Guides', href: '/guides/' },
{ label: 'Reference', href: '/reference/configuration/' },
],
}),
],
sidebar: [
{
label: 'Getting Started',
Expand All @@ -23,6 +32,7 @@ export default defineConfig({
{
label: 'Guides',
items: [
{ label: 'Overview', link: '/guides/' },
{
label: 'Authoring Content',
link: '/guides/authoring-content/',
Expand Down Expand Up @@ -56,6 +66,7 @@ export default defineConfig({
link: '/reference/configuration/',
},
{ label: 'Components', link: '/reference/components/' },
{ label: 'Kitchen Sink', link: '/reference/kitchen-sink/' },
],
},
],
Expand Down
23 changes: 23 additions & 0 deletions docs/e2e/screenshots.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import { expect, test } from '@playwright/test';

test.describe('README screenshots', () => {
test.skip(
!process.env.SCREENSHOTS,
'set SCREENSHOTS=1 to regenerate README screenshots',
);

test('capture light and dark homepage screenshots', async ({ page }) => {
await page.setViewportSize({ width: 1440, height: 900 });
await page.goto('/');

for (const theme of ['light', 'dark'] as const) {
await page
.locator('html')
.evaluate((el, next) => el.setAttribute('data-theme', next), theme);
await expect(page.locator('.hero')).toBeVisible();
await page.screenshot({
path: `../.github/screenshots/${theme}.png`,
});
}
});
});
Loading