This is a lightweight, fast, full-text search engine for static websites. I'm using it on my blog:
It is a Rust/WASM port of the Python code from the article "Writing a full-text search engine using Bloom filters". This can be seen as an alternative to lunr.js and elasticlunr.
The idea is to generate a small, self-contained WASM module from a list of articles on your website and ship it to browsers. tinysearch can be integrated into the build process of generators like Jekyll, Hugo, zola, or Cobalt.
- Only searches for entire words. There are no search suggestions (yet).
- Since we bundle all search indices for all articles into one static binary, we recommend to only use it for small- to medium-size websites. Expect around 4kB (non-compressed) per article.
wasm-pack is required to build the WASM module. Install it with
cargo install wasm-pack
To optimize the JavaScript output, you'll also need terser:
npm install terser -g
If you want to make the WebAssembly as small as possible, we recommend to install binaryen as well. On macOS you can install it with homebrew:
brew install binaryen
Alternatively, you can download the binary from the release page or use your OS package manager.
After that, you can install tinysearch itself:
cargo install tinysearch
As an input, we require a JSON file, which contains a the content you like to index. Check out this example file).
tinysearch fixtures/index.json
(You can take a look at the code examples for different static site generators here.)
This will create a WASM module and the JavaScript glue code to integrate it into
your homepage. You can open the demo.html
from any webserver to see the
result.
For example, Python has a built-in webserver for testing:
python -m SimpleHTTPServer
then browse to http://0.0.0.0:8000/demo.html to see the result.
For advanced usage options, try
tinysearch --help
- Matthias Endler (@mre)
- Jorge-Luis Betancourt (@jorgelbg)
tinysearch is licensed under either of
- Apache License, Version 2.0, (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.