Fast fuzzy string matching for Rust and JavaScript.
Built for autocomplete, command palettes, and search-as-you-type interfaces.
# rust
cargo add quickmatch
# js
npm install quickmatch-jsRust
use quickmatch::{QuickMatch, QuickMatchConfig};
let items = vec!["file_name", "file_size", "created_at", "updated_at"];
let qm = QuickMatch::new(&items);
qm.matches("file name"); // ["file_name", "file_size"]
qm.matches("filename"); // ["file_name", "file_size"] (compound match)
qm.matches("filenme"); // ["file_name", "file_size"] (trigram fuzzy)
// Custom config
let config = QuickMatchConfig::new()
.with_limit(5)
.with_trigram_budget(10)
.with_separators(&['_', '-', ' ']);
let qm = QuickMatch::new_with(&items, config);JavaScript
import { QuickMatch, QuickMatchConfig } from "quickmatch-js";
const items = ["file_name", "file_size", "created_at", "updated_at"];
const qm = new QuickMatch(items);
qm.matches("file name"); // ["file_name", "file_size"]
qm.matches("filename"); // ["file_name", "file_size"] (compound match)
qm.matches("filenme"); // ["file_name", "file_size"] (trigram fuzzy)
// Custom config
const config = new QuickMatchConfig()
.withLimit(5)
.withTrigramBudget(10)
.withSeparators("_- ");
const qm2 = new QuickMatch(items, config);Queries go through three matching stages:
- Word match — query is split by separators and looked up in a word index
- Compound match — adjacent words are indexed as compounds, so
hashratefindshash_rate - Trigram fallback — unknown words are matched via character trigrams for fuzzy/typo tolerance
Results are ranked by prefix score (exact > prefix > unordered), then by trigram score, then by length.
All options are documented in the QuickMatchConfig source. Builder methods:
| Rust | JS | Default |
|---|---|---|
with_limit(n) |
withLimit(n) |
100 |
with_trigram_budget(n) |
withTrigramBudget(n) |
6 |
with_min_score(n) |
withMinScore(n) |
2 |
with_separators(&[..]) |
withSeparators(s) |
_- :/ |
Benchmarked against ~5,000 metric names, 83 queries, averaged over 10K iterations:
| Avg/query | Build time | |
|---|---|---|
| Rust | ~26 us | ~40 ms |
| JS | ~29 us | ~30 ms |
MIT