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.