static site search

Instant search for static sites.

Static site generators produce fast, secure websites, but they have no server to run search queries. Sprigr compiles your content into a client-side search engine that searches entirely in the browser. Works with Hugo, Jekyll, Eleventy, Astro, and every other SSG.

sprigr · new workflow listening
Example run · 41 actions hover the gate to approve it yourself
the static site search back office

Your content is compiled into a client-side search engine and served as a static file alongside your site. The lightweight search engine loads in the browser and executes keyword queries locally, under 10 ms on typical indexes. No server to run, no per-search API calls, no ongoing infrastructure. Dynamic content pushed via API updates the index without rebuilding your site.

You focus on the work. Sprigr runs the paperwork.

what it handles
  • Sub-10ms on typical indexes
  • No backend to run
  • Sharded large indexes
  • Works with every SSG
what it runs

Works with every static site generator

If it outputs HTML, Sprigr can add search to it.

  • Hugo

    Ship the @sprigr/browser web build from your static/ directory and load it from your base template. Push content from a post-build script that reads your public/ directory or Hugo's JSON output format.

  • Jekyll

    Serve the engine files from your site and load them in your default layout. Use a Rake task or a GitHub Actions step to push your _site/ content to Sprigr after jekyll build.

  • Eleventy

    Add an Eleventy afterBuild event that reads your collection data and pushes it to Sprigr. Load the engine from your base Nunjucks or Liquid layout.

  • Astro

    Import @sprigr/browser in a client-side <script> in your Astro layout. It works alongside Astro's island architecture and hydrates independently of your framework components.

  • Gatsby

    Use Gatsby's onPostBuild hook or a CI step to push your GraphQL-sourced content to Sprigr. Load the engine in a client component or via gatsby-browser.js.

  • Docs frameworks

    MkDocs, VitePress, Docusaurus, Starlight. Any framework that outputs HTML can load the engine as a static asset. Push content from your build pipeline and the search index stays in sync.

how it starts

How Sprigr works with static sites

Index your content at build time. Search happens client-side.

  1. 01

    Push content at build time

    Add a step to your build pipeline that sends your content to the Sprigr REST API. A simple curl command or a short script in your CI/CD workflow is all you need.

  2. 02

    Sprigr compiles a search index

    Your records are stored on Cloudflare, isolated per tenant, and compiled into a compact binary index. Indexes with semantic search enabled are larger. Large indexes are split into shards loaded in parallel.

  3. 03

    Users search locally

    Visitors load the engine and index once. Keyword queries run in the browser, under 10 ms on typical indexes, with typo tolerance, faceted filtering, and highlighted results. No per-search network calls; hybrid semantic mode fetches one embedding per query.

Push your content to Sprigr as part of your existing build process. curl -X POST "https://search.sprigr.com/1/indexes/your-index-id/batch" -H "X-Sprigr-API-Key: $SPRIGR_API_KEY" -d @records.json. You can also push records programmatically from Node.js, Python, or any language that can make HTTP requests.

Read the integration docs →
questions

Questions

Which static site generators does Sprigr work with?

All of them. Hugo, Jekyll, Eleventy, Astro, Gatsby, Next.js static export, Pelican, Zola, MkDocs, VitePress, Docusaurus. If your SSG outputs HTML, you can serve the @sprigr/browser engine as a static asset, download your index once, and get instant search. The integration is framework-agnostic.

How does Sprigr handle content updates?

Push updated records to the Sprigr REST API. You can do this from your build pipeline, a CMS webhook, or the admin dashboard. Unlike build-time-only tools, Sprigr can accept new records at any time without requiring a full site rebuild.

Can Sprigr index dynamic content like user comments?

Yes. The Sprigr REST API accepts new records at any time. You can push user-generated content, new products, or any data source without rebuilding your static site. The search index is recompiled automatically and cached by the browser on the next visit.

How large can the search index be?

Sprigr handles indexes with tens of thousands of records. Index size depends on record count and text volume; indexes with semantic search enabled include vector embeddings and are larger. Large indexes are automatically split into shards loaded in parallel. Serve the index with normal HTTP caching headers and repeat visits skip the download.

How does Sprigr compare to Lunr.js, Pagefind, and Algolia DocSearch?

Lunr.js is unmaintained and slows down on larger datasets. Pagefind indexes only at build time and can't handle dynamic content. Algolia DocSearch is free only for open-source docs and requires application approval. Sprigr has a permanent free tier (1,000 objects), handles dynamic content via REST API, and scales to tens of thousands of records with keyword queries under 10 ms on typical indexes.

Is Sprigr free for open-source projects?

Sprigr has a permanent free tier that includes 1,000 objects, 1 index, and unlimited search queries. There is no separate open-source tier. Everyone gets the same core features. Paid plans start at $49 per month for larger indexes.

static site search

Add search to your static site in five minutes.

Paid plans from $49 a month.