mvw-search-index is a lightweight tool for generating a lunr search index with a result store.
It is ideal for adding fast client-side search capabilities to static websites — whether built with Hugo, Jekyll, Gatsby, or even manually.
Add the package to your project:
npm install --save-dev mvw-search-index
You can create an index using the command-line interface, directly from TypeScript, or through Node.js.
mvw-search-index <glob> <destination> [css-selector]
Example:
mvw-search-index ./build/**/*.html ./build/index.json
Or from an npm script:
{
"scripts": {
"index": "mvw-search-index './public/**/*.html' './static/suche/index.json' 'main'"
}
}
Ensure the indexing step runs after the site is built.
import { SearchIndex } from "mvw-search-index";
import * as fs from "fs";
const index = SearchIndex.createFromHtml(files, bodySelector);
// Alternatives:
// const index = SearchIndex.createFromInfo(info);
// const index = SearchIndex.createFromGlob(glob, bodySelector, callback);
fs.writeFileSync("index.json", JSON.stringify(index));
"use strict";
const { SearchIndex } = require("mvw-search-index");
const fs = require("fs");
SearchIndex.createFromGlob("./build/**/*.html", "main", (index) => {
fs.writeFileSync("./static/suche/index.json", JSON.stringify(index));
});
A basic sample site is included and served from GitHub Pages.
Start it locally with:
npm run serve
This serves the content from ./docs, featuring a simple static site with a search form on index.html
.
- 2.3.0: Added attribute support for metadata extraction.
- 2.2.10 - 2.2.16: Dependency updates.
- 2.2.9: Removed
vinyl
; introduced demo application. - 2.1.4 – 2.1.12: Dependency updates.
- 2.1.3: Added glob pattern support to the API.
- 2.1.1: Introduced CLI.
- 2.1.0: Renamed
referencedFile
tohref
; added direct HTML file parsing. - 2.0.0: Breaking change — updated to lunr 2.0.
This project is licensed under the MIT License.
Maintained by Tiliavir.