5.4k stars · MIT · v1.5.2 (2026-04-12)
Static search with no server and no per-query bill — and, if the queries are captured, the highest-intent keyword data he will ever have.
▶Repo detailsthe review · specs · pros & cons · install
What it is
A static search library. After your site is built, it indexes the generated HTML and writes a set of small index fragments; the browser downloads only the fragments a given search needs, so a large site costs a visitor a few tens of kilobytes rather than a whole index. It ships a ready-made search UI and supports filters and multilingual indexes, including Russian.
Why it matters
Two reasons, and the second is the one that matters more than it looks. The obvious one: as the Astro site and the Starlight docs grow into the dozens of pages this radar keeps telling you to write, a visitor who cannot find the page you wrote for them is the same as a page you never wrote — and Starlight already bundles this, so extending the same search across your blog and marketing pages is consistency rather than a new dependency. The less obvious one: what people search for on your own site is the highest-intent keyword data you will ever have, and it is free. Someone typing "russian subtitles" or "500 page pdf" into your docs search is telling you, in their own words, both what to write next and what your product is expected to do. Wire the query into Umami as a custom event and you have a list nobody else in your market has — which is worth more than the search feature itself.
- MIT, no server, no service and no ongoing cost — the index is static files sitting beside the pages
- Multilingual support means the Russian pages are searchable in Russian, which most static search tools handle badly
- Already the search engine inside Starlight, so half your site is a configuration change rather than an integration
- It indexes built HTML, so it belongs to the static side. It will not search inside Grasppy's application data — that is pgvector's job, and confusing the two would be an expensive detour
- The index is generated at build time, so anything published outside a build is invisible until the next one
- Capturing the queries needs a few lines of your own code — the payoff described above is not automatic
npx pagefind --site dist # then in your page: <link href="/pagefind/pagefind-ui.css" rel="stylesheet"> <script src="/pagefind/pagefind-ui.js"></script>