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 configlet 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";constitems=["file_name","file_size","created_at","updated_at"];constqm=newQuickMatch(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 configconstconfig=newQuickMatchConfig().withLimit(5).withTrigramBudget(10).withSeparators("_- ");constqm2=newQuickMatch(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