A complete fuzzy search runtime for the browser. Bloom pre-filter, Bitap matching, accent-insensitive, typo-tolerant — zero backend, zero network after load.
Feed any array, JSON, or text.
Tokenizer + Bloom filter.
Bloom skips, Bitap finishes.
Runs entirely in the browser. No server, no API calls.
3 KB · MITBitap allows up to 2 edit operations. Finds "javascript" from "javsacript".
bitap · adaptivecafé matches cafe. Full Latin Extended fold.
U+00C0 – U+00FFSearch across name, description, tags simultaneously.
multi-fieldArrays of strings, objects, JSON — no schema required.
json · arrays · objectsBSS static memory. No heap, no GC pressure.
no_std · no_alloc| Pattern | Meaning | Example match |
|---|---|---|
word | Fuzzy single token | flashfuzzy → matches flashfuzzy, flashfuzy |
a b | All tokens AND | react hooks → both must appear |
"a b" | Exact phrase | hello world |
a | b | Either token | typescript | javascript |
"a b" | c | Phrase OR token | fuzzy search | search |
import { FlashFuzzy } from "flashfuzzy";
const ff = await FlashFuzzy.create();
ff.index([
{ id: 1, name: "React Hooks", tags: ["react", "js"] },
{ id: 2, name: "Vue Composition API", tags: ["vue", "js"] },
]);
const hits = ff.search("raect hoks"); // typo-tolerant
for (const h of hits) {
console.log(h.id, h.score, h.snippet);
}npm install flashfuzzypnpm add flashfuzzyyarn add flashfuzzycargo add flashfuzzypip install flashfuzzy