Przejdź do treści

Starlight i Astro: Produkcyjna dokumentacja w kilkanaście minut

Opublikowano
2 lipca 2026
Aktualizacja
3 lipca 2026
Czas czytania
8 min czytania

Co dostajesz w standardzie

Generalnie skupiam się na Astro w swoich artykułach, bardziej pod kątem treści i różnych optymalizacji, ale w tym wypadku warto pochylić się nad jakąś pomocą dotyczącą dokumentacji. Wiem z doświadczenia, że pewnych problemów nie zauważamy, dopóki nas one same nie znajdą, i tak jest właśnie w wypadku dokumentacji.

Starlight to gotowy motyw dokumentacji zbudowany na Astro. Różnica względem stawiania dokumentacji samodzielnie jest zasadnicza i oto co dostajemy w standardzie:

  • Wyszukiwanie pełnotekstowe. Działające od pierwszego buildu i bez konfiguracji.

  • i18n, czyli wielojęzyczność z przełącznikiem języka i tłumaczeniami interfejsu.

  • Nawigacja boczna. Sidebar generowany z konfiguracji albo automatycznie ze struktury.

  • Tryb ciemny, wygodny przełącznik motywu wbudowany.
  • Struktura przyjazna SEO, mamy więc poprawne metadane, semantyczny HTML, szybkość Astro.

Wszystko to dziedziczy atuty Astro: statyczny HTML, zero zbędnego JavaScriptu, dobre . Dokumentacja na Starlight jest szybka domyślnie, bo stoi na frameworku zaprojektowanym wokół wydajności. To jest ta łatwa część — i zajmie Ci kilkanaście minut. Trudniejsze są decyzje, które przychodzą potem: granice Pagefind, zakres nadpisywania komponentów i strategia i18n. To o nich jest reszta artykułu.

Krok 1: Utworzenie projektu

Jedna komenda stawia kompletny projekt dokumentacji z szablonem Starlight:

Code
npm create astro@latest -- --template starlight

Po instalacji zależności uruchamiasz serwer deweloperski:

Code
cd moja-dokumentacja
npm run dev

Pod localhost:4321 masz działającą dokumentację z wyszukiwaniem, nawigacją i trybem ciemnym — zanim napisałeś choć jedną linijkę własnej treści.

Krok 2: Treść w src/content/docs/

Dokumentacja jest w katalogu src/content/docs/ jako pliki Markdown lub , a routing jest oparty na plikach. Oznacza to po prostu, że adresy są wyznaczane przez strukturę katalogów:

Code
src/content/docs/
├── index.mdx              → /
├── getting-started.md     → /getting-started
└── guides/
    ├── instalacja.md      → /guides/instalacja
    └── konfiguracja.md    → /guides/konfiguracja

Każdy plik ma sterujący tytułem, opisem i miejscem w nawigacji:

Code
---
title: Instalacja
description: Jak zainstalować i skonfigurować projekt.
---
 
## Wymagania
 
Treść piszesz w zwykłym Markdownie, a w plikach `.mdx` możesz
dodatkowo osadzać komponenty.

Starlight skutecznie zajmie się resztą: layoutem, nawigacją, spisem treści na stronie czy linkami „poprzedni/następny". To bardzo wygodne, a dodatkowo trzeba pamiętać, że frontmatter Starlight jest walidowany schematem Zod. Oznacza to, że zły typ wartości albo brak wymaganego pola zatrzyma build z błędem walidacji, zamiast przemknąć po cichu na produkcję.

Krok 3: Wyszukiwanie — Pagefind i jego granice

Jak działa Pagefind bez backendu

Wyszukiwanie to zwykle najtrudniejszy element do dorobienia, a w Starlight działa od razu, dzięki . Jego model działa zupełnie inaczej niż chmurowe szukajki:

  • Indeks generuje się w build time i ląduje jako statyczne pliki w /_pagefind/.
  • Zapytania wykonują się w przeglądarce przez .
  • Brak backendu, brak API key oraz brak opłat za zapytanie.

Na skalowanie ma wpływ pewien bardzo ważny szczegół, mianowicie Pagefind nie ładuje całego indeksu do przeglądarki. Dzieli go na fragmenty i pobiera tylko te, które odpowiadają wpisywanemu zapytaniu. Właśnie dlatego sto czy dwieście stron szuka natychmiast, mimo że nie ma żadnego serwera.

stron, do których Pagefind działa bez zauważalnego opóźnienia
~kilkasetstron, do których Pagefind działa bez zauważalnego opóźnienia
koszt zapytania — indeks jest częścią statycznego builda
0 złkoszt zapytania — indeks jest częścią statycznego builda
stron, od których rośnie rozmiar indeksu i warto rozważyć DocSearch
tysiącestron, od których rośnie rozmiar indeksu i warto rozważyć DocSearch

Kiedy Pagefind przestaje wystarczać i wchodzi DocSearch

Są też ograniczenia i te widać dopiero przy dużych, gęstych serwisach technicznych, posiadających tysiące stron z długą treścią. Wtedy sumaryczny rozmiar plików indeksu i czas pierwszego zapytania zaczynają rosnąć. Sytuacja będzie wtedy ulegać stopniowemu pogorszeniu i trzeba mieć na to oko. Masz wtedy dwa rozwiązania: albo ograniczyć zakres indeksowania (Pagefind pozwala wykluczyć fragmenty stron atrybutem data-pagefind-ignore), albo przejść na DocSearch.

DocSearch (Algolia) to oficjalna wtyczka Starlight, bardzo sensowna, jeśli kwalifikujesz się do darmowego programu DocSearch dla open source albo prowadzisz naprawdę duży serwis. Tyle tylko, że jest to zewnętrzna usługa, więc trzeba mieć konto, klucze i indeks do utrzymania.

Krok 4: Konfiguracja i nawigacja

Starlight konfigurujesz jako integrację w astro.config.mjs, właśnie tam ustawiasz tytuł, sidebar i języki:

Code
// astro.config.mjs
import { defineConfig } from 'astro/config'
import starlight from '@astrojs/starlight'
 
export default defineConfig({
  integrations: [
    starlight({
      title: 'Dokumentacja projektu',
      sidebar: [
        { label: 'Start', link: '/getting-started/' },
        {
          label: 'Przewodniki',
          items: [
            { label: 'Instalacja', link: '/guides/instalacja/' },
            { label: 'Konfiguracja', link: '/guides/konfiguracja/' },
          ],
        },
      ],
    }),
  ],
})

Sidebar możesz definiować ręcznie (jak wyżej, pełna kontrola nad kolejnością) albo zlecić Starlightowi generowanie automatyczne ze struktury katalogów przez autogenerate:

Code
sidebar: [
  { label: 'Start', link: '/getting-started/' },
  { label: 'Przewodniki', autogenerate: { directory: 'guides' } },
]

Autogeneracja oszczędza ręcznego pilnowania listy, ale oddaje kontrolę nad kolejnością. Pozycje układają się alfabetycznie po nazwie pliku, chyba że wymusisz porządek polem sidebar.order we frontmatterze każdej strony. Dobrym rozwiązaniem jest kompromis, czyli hybryda: górne, „wizytówkowe" sekcje definiujesz ręcznie w konkretnej kolejności, a rozrastające się grupy referencyjne zostawiasz autogeneracji.

Krok 5: Dostosowanie wyglądu i component overrides

Nie miej mylnego wrażenia, że skoro Starlight to gotowy motyw, to albo akceptujesz jego wygląd, albo budujesz własną stronę. Dostosowywanie jest warstwowe i większość potrzeb rozwiążesz najniższą, najbezpieczniejszą warstwą.

  • Zmienne CSS, takie jak kolor akcentu, tło, fonty, promienie. Podpinasz własny arkusz przez customCss w konfiguracji i nadpisujesz zmienne --sl-color-*. Tym załatwiasz cały branding i 90% zmian wizualnych.

  • Sloty i propsy komponentów. Drobne wstawki (baner nad treścią, stopka, dodatkowy element w sidebarze) bez dotykania logiki motywu.

  • Component overrides. Podmiana wbudowanego komponentu (Header, Sidebar, PageTitle, Search) własnym. Najsilniejsze narzędzie i jedyne, którym łatwo zrobić sobie krzywdę.

Jak nadpisać komponent Starlight

Override wpina się przez konfigurację, wskazując własny komponent w miejsce wbudowanego:

Code
starlight({
  title: 'Dokumentacja projektu',
  components: {
    // podmieniamy tylko nagłówek, reszta motywu bez zmian
    Header: './src/components/MyHeader.astro',
  },
})

Krok 6: Wielojęzyczność (i18n) i hreflang

i18n jest wbudowane, więc nie dokładasz osobnej warstwy internacjonalizacji. Definiujesz języki w konfiguracji:

Code
starlight({
  title: 'Dokumentacja projektu',
  defaultLocale: 'pl',
  locales: {
    pl: { label: 'Polski', lang: 'pl' },
    en: { label: 'English', lang: 'en' },
  },
})

Treść układasz w katalogach per język (src/content/docs/pl/, src/content/docs/en/), a Starlight obsługuje przełącznik języka, tłumaczenia elementów interfejsu i wielojęzyczne wyszukiwanie. To duży skok wygody względem ręcznego konfigurowania routingu i18n na zwykłej stronie Astro.

Nieprzetłumaczone strony i hreflang w Starlight

Ale dwie decyzje zostają po Twojej stronie i żadna nie jest domyślką:

  • Strony nieprzetłumaczone. Gdy artykuł istnieje po polsku, a nie po angielsku, użytkownik wersji en trafi na treść w języku zastępczym (fallback do defaultLocale). To lepsze niż 404, ale mieszany język bywa mylący. Świadomie decyduj, co jest wystarczająco ważne, by przetłumaczyć w całości, a gdzie fallback jest akceptowalny.
  • hreflang dla SEO. Wielojęzyczna dokumentacja powinna informować Google o powiązaniach między wersjami językowymi przez , inaczej ryzykujesz kanibalizacją i błędnym dopasowaniem języka w wynikach. Starlight generuje poprawne lang i strukturę URL-i, ale zadbanie o kompletne, wzajemne odsyłacze hreflang w <head> to część, którą zwykle domykasz sam — analogicznie do tego, co robisz przy i18n w Next.js App Router.

Migracja istniejącej dokumentacji

Migracja z Docusaurusa i VitePressa na Starlight

W praktyce rzadko zaczynasz od zera, ponieważ częściej masz już dokumentację w Docusaurusie, VitePressie albo zwykłym Markdownie i chcesz ją przenieść na Starlight. Trzy rzeczy zajmą wtedy najwięcej czasu:

  • Frontmatter — Starlight ma własny schemat (wymagany title, opcjonalnie description, sidebar). Pola z innych generatorów (sidebar_position, id) trzeba zmapować na odpowiedniki Starlight (sidebar.order, slug) — inaczej po prostu je zignoruje i stracisz kontrolę nad kolejnością w nawigacji.
  • Komponenty i shortcode'y — admonition z Docusaurusa, kontenery :::tip z VitePressa, własne shortcode'y. Starlight ma własne odpowiedniki (np. komponent <Aside>), ale to zamiana jeden-do-jednego, którą trzeba przejść przez treść.
  • Linki wewnętrzne i obrazy — inna struktura URL i inne miejsce na pliki statyczne oznaczają, że relatywne linki i ścieżki do obrazów zwykle wymagają korekty. Zbuduj z włączonym sprawdzaniem martwych linków, żeby złapać je w build, nie po wdrożeniu.

Sama treść w Markdownie przenosi się bez zmian, co jest dobre — gorzej z metadanymi i komponentami, i to one pochłoną najwięcej czasu. Przy większej dokumentacji opłaca się napisać jednorazowy skrypt przepisujący frontmatter i najczęstsze shortcode'y, zamiast przechodzić setki plików ręcznie.

Kiedy Starlight, a kiedy własna strona

  • Starlight, gdy chcesz profesjonalną dokumentację szybko, a Twoje potrzeby wizualne mieszczą się w zmiennych CSS plus najwyżej kilku punktowych overrides. To zdecydowana większość dokumentacji technicznej.

  • Własna strona Astro, gdy nietypowy layout wymagałby nadpisania rdzenia motywu (nawigacji, wyszukiwarki, struktury strony) albo dokumentacja jest częścią większego produktu o własnym designie i musi się z nim jakoś sensownie połączyć.

Domyślnie zaczynaj od Starlight. Jeśli z czasem okaże się, że potrzebujesz własnego layoutu, przesiadka i tak wyjdzie taniej niż budowanie wszystkiego od zera. Dlaczego? W większości przypadków Starlight wystarcza.

Ultraszybkie projekty, łączące lekkość ze skalowalnością.
Astro

Często zadawane pytania

Czym jest Starlight?

Starlight to gotowy, w pełni wyposażony motyw dokumentacji zbudowany na Astro. Dostarcza wyszukiwanie pełnotekstowe (Pagefind), wielojęzyczność (i18n), nawigację boczną, tryb ciemny i strukturę przyjazną SEO. Stawiasz projekt jedną komendą i piszesz treść w Markdown/MDX.

Starlight używa Pagefind, czyli wyszukiwarki dla stron statycznych. Indeks generuje się w build time i serwowany jest jako statyczne pliki w katalogu /_pagefind/, a zapytania wykonują się w przeglądarce przez WebAssembly. Brak serwera, brak API key, brak opłat za zapytanie, a dodatkowo działa wielojęzycznie.

Do kilkuset stron Pagefind ładuje się niezauważalnie, ponieważ pobiera nie cały plik, ale tylko fragmenty indeksu potrzebne do konkretnego zapytania. Przy dużych, technicznych serwisach (tysiące stron) rośnie rozmiar indeksu i czas pierwszego zapytania. Wtedy warto rozważyć DocSearch (Algolia) albo ograniczyć zakres indeksowania. Dla większości dokumentacji projektowej jednak nie jest to problem.

Tak, na trzech poziomach: zmienne CSS (kolory, akcent, fonty) dla brandingu, sloty i propsy dla drobnych zmian, oraz component overrides, czyli nadpisanie wbudowanych komponentów własnymi (Header, Sidebar, PageTitle). Override jest potężny, ale nadpisany komponent przestaje dostawać aktualizacje ze Starlight, więc rób to punktowo.

Starlight wygrywa, gdy chcesz profesjonalną dokumentację szybko i nie chcesz budować nawigacji, wyszukiwania i i18n od zera. Własną stronę warto budować dopiero, gdy potrzebujesz nietypowego layoutu albo głębokiej integracji z resztą aplikacji, której motyw nie obsłuży nawet przez overrides. Dla większości dokumentacji technicznej Starlight to szybsza droga.

O autorze

Maciej Sala

Maciej Sala — Product Manager i Frontend Developer z bogatym doświadczeniem w marketingu internetowym oraz SEO. Na co dzień pracuje z Reactem, Next.js i TypeScriptem, a ostatnio także z Astro i narzędziami do automatyzacji procesów AI. Sprawnie łączy perspektywę produktową z praktycznym podejściem do kodu. Przez kilka lat był związany z branżą gier wideo jako project manager i game designer. Absolwent historii na Uniwersytecie Jagiellońskim oraz studiów podyplomowych z marketingu internetowego na AGH w Krakowie. Po godzinach trenuje na siłowni, maluje figurki i rozwijam własne projekty.

Pomagam przekładać takie tematy na konkretne wdrożenia w frontendzie, SEO, analityce i procesie produktowym.

Skontaktuj się ze mną

Biblioteka wiedzy

Czytaj dalej

Zobacz więcej wpisów
Wielojęzyczność i hreflang w Astro SSG: Zasięg globalny, wdrożenie lokalne

Zanim Twoja oferta dotrze do zagranicznych klientów, Twoja strona musi zdać egzamin techniczny. Większość witryn odpada na tym etapie, marnując potencjał nawet najlepszej treści. Sprawdź, jak rygorystycznie skonfigurować wielojęzyczność i hreflang na statycznym Astro, by zasięg globalny szedł w parze z lokalną, błyskawiczną dostawą treści.

Maciej Sala

Maciej Sala

Founder StriveLab

Pierwszy projekt w Astro — od npm create astro do wdrożenia w 15 minut

W Astro jedna komenda stawia projekt, serwer lokalny i pierwszy widok, więc nie musisz spędzać połowy dnia od godzin konfiguracji. Domyślnie dostajesz szybki, statyczny HTML, a JavaScript dokładasz dopiero tam, gdzie faktycznie jest potrzebny. Przejdziemy od npm create astro do wdrożonej strony i po drodze wyjaśnię, jakie potrzeby spełnia projekt stworzony w Astro.

Maciej Sala

Maciej Sala

Founder StriveLab

Astro.js vs Next.js w 2026 — kompleksowe porównanie frameworków

Artykuł nie jest manifestem o porzuceniu jednej technologii na rzecz drugiej, lecz bardziej analizą, w której staram się pokazać obiektywnie, w których obszarach Astro dostarcza bezdyskusyjną przewagę wydajnościową, a w jakich scenariuszach Next.js pozostaje niezastąpionym wyborem.

Maciej Sala

Maciej Sala

Founder StriveLab