Jekyll + Search

Updated 22 May 2026

Create a table comparing the various Jekyll + javascript search libraries, include lunr.js, jekyll-search, pagefind.

Here’s a comparison table covering lunr.js (via jekyll-lunr-js-search), Simple-Jekyll-Search, and Pagefind — the three most commonly used options:

  lunr.js (jekyll-lunr-js-search) Simple-Jekyll-Search Pagefind
Approach Inverted index, full-text search JSON substring/fuzzy match Chunked index, full-text search
Index generation Ruby gem generates search.json at build time Liquid template generates search.json Rust binary crawls built HTML post-build
Jekyll-specific Yes — requires gem + plugin Yes — built for Jekyll No — SSG-agnostic, works on any static HTML output
GitHub Pages compatible No (requires custom plugin) Yes (no custom plugin needed) Requires CI/custom build step
Search algorithm TF-IDF with BM25 scoring Substring match with optional fuzzy TF-IDF with chunked index
Relevance ranking Yes — field boosting, term boosting No Yes
Stemming Yes — Porter Stemmer built in No Yes
Fuzzy search Partial (wildcard syntax only) Optional flag Yes
Multilingual Via lunr-languages plugin (30+ langs) No Yes — built in
Index size / scalability Poor at scale — entire index loads into memory Poor — entire JSON loads upfront Excellent — index split into chunks, loads on demand; 10k pages under 300KB
Web Workers No No Yes — runs off main thread
Prebuilt UI No No Yes — drop-in UI component included
Custom result templates No Yes — Liquid-style {title} template syntax Via JavaScript API
Search-as-you-type Yes (3+ chars) Yes Yes
Maintenance status Abandoned — last release 2017 Mostly dormant — last meaningful update ~2021 Actively maintained (CloudCannon)
Setup complexity Medium — gem + JS dependencies Low — just a JSON file + one script tag Medium — requires post-build binary step
License MIT MIT MIT
Best for Small-to-medium sites needing ranked full-text search, willing to accept the stale gem Tiny blogs wanting dead-simple keyword search on GitHub Pages Any size site, especially larger ones; modern choice for new projects

The practical takeaway: Simple-Jekyll-Search is the easiest to set up and works on GitHub Pages out of the box, but has no real relevance ranking and degrades badly as content grows. jekyll-lunr-js-search wraps lunr.js to generate a JSON index and provide full-text search, but the last release was January 2017 — it’s effectively unmaintained. Pagefind is the modern default for most static sites: unlike older tools that ship one large index file, it splits the index into fragments and only downloads relevant chunks when a user searches, making it viable for large sites where lunr.js would choke. For new projects, Pagefind is the clear recommendation unless you’re locked to GitHub Pages with no CI pipeline.