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.

p50 query, chinese wikipedia
0.07 ms
runtime, gzipped
5.7 kb
dependencies
0

one file. 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.

a tokenizer that knows it’s 2026.

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.

typo tolerance, capped.

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");