a tiny, zero-dependency full-text search engine. try it below — every keystroke runs locally in your browser.
type to search.
a tiny, zero-dependency full-text search engine. try it below — every keystroke runs locally in your browser.
type to search.
build the index once. ship one binary. query in microseconds — in the browser, in node, anywhere javascript runs.
the build step produces a single Uint8Array — no json,
no per-document overhead, no asynchronous serialization. drop it
into a static asset, transfer it to a worker, or embed it as
base64. loadIndex is synchronous and zero-copy.
ascii runs stay whole. cjk ideographs split per character. code symbols, full-width punctuation, diacritics, and case fold in one nfkd pass. the same rules run at build and query time, so what you index is what you search.
a symspell-style delete table recovers 1–2 edits with bounded work. no exponential fan-out, no surprise tail latency: p99 stays flat across every corpus we’ve thrown at it.
// build the index once, at deploy time
import { buildIndex } from "shuakami-search";
const { pack } = buildIndex(docs, {
fields: {
title: { weight: 5, kind: "text" },
body: { weight: 1, kind: "text" },
},
});
await writeFile("site.pack", pack);
// then query, anywhere
import { createSearch } from "shuakami-search/browser";
const engine = await createSearch("/site.pack");
const hits = engine.search("machine learning");