0.13.0 - 2026-08-13
- switch default to
CaseMatching::Smart(e5f0ee2)
- add WASM SIMD128 backends (8d11966)
- add
no_stdsupport (efeab87) - drop dead scalar path in wasm (a9be0d1)
- add download.sh script for bench data (145deff)
- auto-detect parallelism when threads == 0 (17ee653)
- saturate score instead of panicking (93785c2)
- reduce wasm binary size (6deefc0)
- c and c++ bindings (2bd75b9)
- python bindings (b30b6e2)
- wasm bindings (869c771)
- add justfile (35bf373)
- add changelog update to justfile (19c6783)
max_needle_lenreturning incorrect value (90aa3fc)
- update lib.rs "used by" section (1ac6e62)
- clarify unicode limitations (e63827b)
- tidy config doc comments (c418120)
- rework safety section (9592c36)
- add bindings to readme (450523f)
- rewrite binding comments/readmes (277c030)
- misc links (daaae5b)
- add CHANGELOG via git-cliff (507409b)
- cleanup wasm binding docs (0826872)
- lib-rs and expand bindings docs (03ae7fe)
- add LICENSE to wasm/py bindings (d395c2b)
0.12.0 - 2026-07-30
- per-pattern config (
PatternConfig) (6d2f478)
- add
scoring.max_needle_len()(8f14c04)
- ensure delimiter bonus applied on first char (da1adf3)
- remaining arithmetic panics (3476999)
- ignored unicode matching indices (074252f)
- pattern space double escape (940bcb9)
- unicode match end col (b33d28c)
- mixed multi-byte unicode failing prefilter (b16ad8c)
- check all instruction sets in sse smith waterman (dd38a4b)
- greedy gap penalty overflow and end col truncation (4900c18)
- unsound u8 backend selection and overflow guard bounds (927efbe)
- case flipped unicode match hidden by decoy last byte in prefilter (bf4a247)
- match_list_indices dropping score 0 haystacks (e4fd349)
- guard against gap penalty overflowing u16/u8 (250ed36)
- switch from castsi -> zextsi (8da6dc9)
- unicode-aware char count for scoring guard (48f683e)
- pattern escape parsing (95efcf6)
- consolidate
include_exactlogic (9b48b09)
- single gather vec for multi-pattern matching (02faa31)
- @ryanmab made their first contribution in #88
0.11.0 - 2026-07-13
- switch to
u32indices (2532849) Patternand multi-pattern matching (bbcfd0e)- drop top level
match_*functions (28688b5) - rework
SortStrategywith reversed variants (6831669)
- prefix, suffix, substring, exact matching (#86) (b55fad6)
SortStrategyenum, fix parallel ordering (a7d456e)- limit threads based on haystack count (af0634a)
- arm64 load_partial on len 8 (022a5ae)
- prefix bonus applied due to prefilter substr (3b9ba7b)
- ensure parallel matcher sorts by index (41fc7d5)
- remaining uses of top level match_* (96ea2fa)
- match_greedy prefix bonus (da380f5)
- escaped ! on query pattern (d4eced5)
- k_merge module (7c9b262)
0.10.0 - 2026-07-03
- simplify matcher dispatch, drop some APIs (364fc0e)
- drop some APIs, add miri + proptests (fc16a54)
*_matchesonradix_sort/k_merge(1e4267b)- many rare panics and typos (9c3b8dd)
- rename UnicodeMatching::Respect to Always (9024633)
- u8 smith waterman scoring (2e5a912)
- avx512 smith waterman (eaff2fe)
- avx512 u16 smith waterman (ec2a8f6)
- switch prefilter skipped_chunks to skipped_chars (0b18811)
- avx512 prefilter (651b4e1)
- rewrite prefilter with generic backend (457c0ce)
- smart and case sensitive matching (32c5ff3)
- custom k-way merge, drop itertools (e8237bb)
- add back set_* matcher APIs (0540458)
- replace raw_cpuid with is_x86_feature_detected (edcddf6)
- add fzf bench via std::thread::sleep (9004beb)
- unicode prefilter, drop fuzzing (36befb8)
- add unicode arabic/korean benches (4961de0)
- rework unicode approach (3eb7cbf)
- avoid updating matcher if nothing changed (e4fc06c)
- unicode prefilter typos (0123732)
- support unicode
CaseMatching::Smart(06c9494) - case insensitive unicode matching (88459c2)
- unicode smith waterman (0bf1fa8)
UnicodeMatchingenum to control unicode behavior (ca2f547)- swap out bolero for proptest (5544781)
match_iterAPI,fuzzy_matchiter ext (af7cebf)- add
match_list_paralleltoMatcher, restructure (4fd9590) Matcher::match_oneand extensive docs (c778119)- simplify nix flake (e4f9dba)
- match_end_col sort tests (ae9d0b6)
- gate prefilter overread behind safe_read (#80) (7892da7)
- prefilter typo chunk boundaries (9312dce)
- match_end_col sort bench (599c950)
- keep
match_listandmatch_list_indicesfiltering in sync (34c8bac) - assert nucleo returns no intermediate snapshots (98139d9)
- multi-byte unicode char incorrect indices (c853a1b)
- incorrect
score_fits_in_u8calculation (59a17d8) match_onenot inlined (bd87378)- arm neon movemask (35208a8)
- unicode incorrect indices (c9ee4b3)
- many typos, miri bug, naming, docs (14d2f19)
- match delimiters between greedy and sw (9cb9979)
- incorrect alignment indices on unicode (e5c7bc5)
- move sw backends under sw::simd::backend (441b78c)
- move prefilter backends under prefilter::backend (523d9eb)
- move prefilter algorithm into algo (121851f)
- specialize matcher by backend (e582817)
- simplify prefilter wrappers (9ce2b5e)
- simplify smith waterman wrappers (8d10c81)
- move
smith_waterman::simdtosmith_waterman(393aed0) - create
Matcheronce in benchmarks (9af3b6c) - drop prefilter
Backend::broadcast(3c386b2) - unicode matching helper, backwards scan (2ed88a4)
- split up prefilter/algo file (eb60749)
- move gap impls to
smith_waterman::algo(6297c90) - fix missing
self.needs_unicodecase (c03999a)
- misc rewriting and cleanup (119b78c)
- update benches and prefilter docs (dd7bbf6)
- update benchmarks (c56dac9)
- unicode (5ee37ee)
- mark unicode gap docs as text (3aeb1dc)
- update benchmarks (50c718f)
- add note about NEON prefilter performance (7f8defb)
- match lib.rs docs to README (7c8d7e0)
- misc typos and renames (6edeb89)
- update benchmarks (899c473)
- add keywords/categories (e87e0bd)
- proper casing for nucleo/fzf (d5f9282)
- drop number for fuzzy_match slowdown (c56f614)
- avx512 shift right lanes (0287fd5)
- trim prefilter match windows (b1cbddf)
- specialize avx2 prefilter no typo (6923519)
- specialize avx512 prefilter typos (d5b4c57)
- add avx512 prefilter masked loads (4f2d57a)
- move target features to matcher dispatch (5c9145b)
- increase parallel chunk size (88f52fb)
- avoid sorting on empty needle (114d188)
- per-specialization hot loops (82bae12)
- add prefilter backend parity cases (32436c5)
- swap proptest for bolero, integration tests, expand suite (d2941c3)
- fuzzing (55ea87c)
- extra unicode cases (75ccfe1)
- share generator, simplify sw backend tests (c248438)
- @leonardcser made their first contribution in #80
0.9.0 - 2026-04-04
- add scalar implementation fallback (#76) (3aff5b5)
- track match end column position via
match_end_colfeature (#75) (53be326)
- update fzf comparison on docs.rs (8b59da3)
- use radix sort for sorting
Matches (#74) (8b4d19c)
- @Xeonacid made their first contribution in #76
0.8.3 - 2026-03-10
- Optimize latest rewrite (#72) (cd448bd)
- zero out missing null matrix rows (a672ae8)
- dont skip prefilter for max typos >= 3 in sse (f2ab3fb)
- 256-bit SSE smax_u16 combining 8 bit lanes (b64cdd2)
- drop fzf comparison (4862d4a)
- fix fzf bench, thanks @junegunn (edf7a58)
- fix fzf bench spacing and formatting (efc3f88)
- fix readme example (6c69acd)
- update fzf benchmarks (97ac04d)
- drop a few instructions for gap extension (5bec7b1)
0.8.2 - 2026-02-20
- guard against overflow on
score_haystack(b972e79) - dont skip chunks when typos are allowed (aaaa652)
- zero out null matrix rows (7162754)
- misc clarifications (fb11ae3)
- rename one shot and parallel benchmarks (e4ac174)
- update benchmarks (cc93ef2)
- add fzf benchmark (1d8c210)
0.8.1 - 2026-02-19
- drop reference implementation (7a4b861)
- alllll the docs (78b62c4)
0.8.0 - 2026-02-19
- intra sequence smith waterman (bbcf283)
- matcher, many bonuses, prefilter perf (cfca682)
- drop v1 and nightly, adopt v2 (ae0fcdd)
- move matchers into structs, add parallel matching (eb0aa7f)
- runtime feature detection for prefilter, reorganize matcher (4c9ac62)
- flatten score matrix, wip incremental matcher (bf4ccae)
- generic SIMD vectors (dc9cb6d)
- a very slow incremental matcher (6c20e92)
- double pumped SSE256, runtime feature detection, drop aligned (f99eb90)
- vector tests, drop par sort, assert needle len (9d34e4b)
- aarch64 support, matrix fixes, prefilter runtime feature detection (6877319)
- test idx_u16 implementation (777ed94)
- guard against typos leading to all matches (f1d6171)
- drop nightly toolchain!! (86c54f0)
- indices and alignment api (#61) (8a8a5be)
- add
match_iterandmatch_iter_indicestoMatcher(96581ca) - add 2 typo and 3 typo benchmarks (5432842)
- skip prefiltering for typos >= 3 (5e996de)
- attempt to subtract with overflow (#55) (4abc19d)
- prefix score bonus (22403bf)
- gaps not propagating past 16 bytes (b4ffb66)
- dont sort parallel when sort is false (563e8ee)
- store and use adjacent match mask, minor gap perf (114218d)
- max typos off by one (85e6bba)
- drop guard against typos leading to all matches (4a6eb14)
- matrix struct, use match masks in alignment (2bf5878)
- update prefilter safety (7385671)
- update readme and benchmarks (0e3033e)
- fix skim link (04256c0)
match_iterexample (da481cb)- minor edits to smith waterman section (59e3e6e)
- clarify overlapping load (b08f281)
- preprocess bonuses (5cf59a2)
- @raui100 made their first contribution in #55
0.7.0 - 2026-02-03
- build on latest nightly (#54) (45dd259)
- drop
min_scoreoption (8d7c445) Options -> Config,Scoringoptions,index_in_haystack -> index(539cbef)- remove unused modules from api, docs (e5ad501)
- use ref borrowing for config (#47) (b7f2b5f)
- initial (2adc343)
- cleanup and rename (8bc2eee)
- add index_in_haystack to match (50a22da)
- reduce prefix bonus (2cc6511)
- adjust scoring to encourage delimited/capitalized matches (d4c715d)
- temporarily disable capitalization bonus (3e7d321)
- exact match bonus (1773ea4)
- matching case bonus, delimiter fixes (a5089ca)
- tests (c25a00a)
- drop useless simd_max(zero) (8c3037f)
- drop useless select and simplify code (#3) (f053b13)
- enforce 128 bit SIMD, avoid 256 bit (0d42d37)
- matched character indices (d632d11)
- add delimiter bonus on colon (78aa772)
- add debug, clone, copy to options (7c2aa46)
- implement smith_waterman using a generic function (#6) (8f174de)
- wip score matrix (df9107e)
- non-simd reference implementation (a960f12)
- add iai benchmark (0ea8d8f)
- alignment for typo count (4016d65)
- add debug trait to SimdNum (5ecc9ba)
- prefilter with typo proof of concept (65ce6aa)
- rework benchmarks (e798541)
- update reference implementation (0e1d186)
- rework iai benchmark (0abc726)
- replace prefilter with max typos option (da006cc)
- filter by max typos, minor perf improvements (fa3bd32)
- bitmask prefilter (6d08a89)
- indicate exact matches (#14) (75c9dc5)
- drop
memchrdependency (bf27dba) - update rand/rand_distr (283e4c4)
- increase score bonus for matching case (6415483)
- increase max length to 1024 (1a2a201)
- reintroduce prefiltering when haystack is too long (1c86f18)
- prepare to move smith_waterman inner loop into its own function, and for the incremental matching API (be141ae)
- enable capitalization bonus (5ba2cbc)
- incremental matching api (2e1c635)
- compute all_time_max_score after score_matrix (8e694d6)
- add benchmark (af6623c)
- avoid sorting for incremental matcher (63711eb)
- restructure codebase (4cc3699)
- use case matching ignore for nucleo benchmark (14718d6)
- lazy and stack allocated bucket initialization (8c7686d)
- drop lazy bucket initialization (1b5ea29)
- increase benchmark sample count from 1000 to 10000 (86b515e)
- expose
IncrementalMatcherandmatch_list(6329b44) - add serde
SerializeandDeserializederives (a472695) - support any string type (9007ef1)
- no delimiter bonus for delimiter chars (d96d203)
- split up simd code, add matched indices support (2c96213)
- runtime instruction detection (44482c3)
- decrease gap penalties (4a1d113)
- probably broken skim benchmark (d981215)
- ignore haystacks shorter than needle - max typos (bd9be77)
- avoid processing unreachable matrix elements (#29) (c23d1ab)
- stop calculating typos after reaching max typos (#30) (0742f8c)
- add greedy fallback matcher (a308373)
- multithreading (#32) (6fd0960)
- flake dev shell with aarch64 and x86_64 targets (b982c62)
- fallback to greedy matching on >512, rather than >1024 (004cb63)
- increase gap penalty, reduce delimiter/capitalization bonus (7a8cd28)
- offset prefix bonus (2701d9f)
- drop
SimdNumin favor of fixedu16score (a51b58e) - SIMD string interleave (fd31411)
- use
x86-64-v3for benchmarking (2744cfb) - use multiversion, generic interleave (1246f97)
- multiversion bitmask, misc tuning (50d1815)
- prefilter multiversion and cleanup (06914dd)
- SIMD intrinsics interleave (92f67d8)
- reference implementation offset prefix bonus (afe55ea)
- modularize and update benchmarks (0e52f55)
- upgrade to rust 2024 (1c003ed)
- simd and intrinsics prefilter (#43) (8637faf)
- (bench) return results from routine (#13) (0bbeb41)
- dont give capitalization bonus on first character (284aa89)
- add missing buckets (3a8f894)
- add more smith_waterman_macro bucket (#1) (d910bec)
- prefilter (1f7d3f9)
- prefilter not ignoring case (5e6e4c6)
- bench crate name (f2ae831)
- capitals on needle never matching (36e564b)
- add missing bitand to macro (bba669b)
- get current column scores as mutable ref (570d68d)
- remove unnecesary conversion to u16 (77f0ba5)
- properly ignore capitalization on prefix (81be460)
- matched indices with typos (a9d07fe)
- ensure minimum length of 1 for generate_haystack (4107c75)
- ignore exact match test for incremental matcher for now (330243e)
- support different string types per arg (74ff035)
- add dot delimiter to reference implementation (31f9ae0)
- avoid capitalization bonus on capital after lower (a84ebfe)
- out of bounds and div by zero panics (57bb136)
- conditional compile avx2 and avx512 paths (6d0fa67)
- overflow on long needles with small haystack (8de16e4)
- prevent thread count go to 0 (#41) (cbf566d)
- ensure score matrix dimensions >=1x1 (8c1153a)
- (bucket) make generic on SimdNum (a301a74)
- (smith_waterman) traits instead of bounds (b198250)
- (smith_waterman) always return u16 slice (1408b37)
- remove dead procedural macro code (48f6c59)
- remove unused first char multiplier (7e6e120)
- rename
curr_col_score_simdstocurr_col_scores(16be4d0) - make smith_waterman generic on number of simd lanes (c2fbb36)
- impl simd traits with a macro (2dfb23a)
- make constants u16 again (#12) (096163b)
- clean up needle_len (c23db08)
- minor cleanups / clippy (2d33e60)
- move smith waterman inner loop into its own function (59e6754)
- simplify prepare_haystack (5709568)
- prefilter method selection (6faf2f5)
- rename expandable vec to threaded vec (d6d3e0b)
- add note for downloading benchmark data (aca1794)
- add basic algorithm description (e3325e9)
- add note about typo resistance (005e443)
- add benchmarks (edc713a)
- benchmarks formatting (6fc46e9)
- update benchmarks (6ce6b70)
- clarify how 2+ typos works (90a276c)
- cleanup readme (48d2f36)
- fix typo (a535bd7)
- add description and license to Cargo.toml (6421984)
- add ideas section (5bf7e6f)
- clarify algorithm (d490de7)
- update benchmarks, elaborate on implementation (f232a0c)
- fix indentation in implementation section (1448e19)
- benchmarks grammar (bd63226)
- add repository to Cargo.toml (021d2eb)
- clarify long list tip (6b65d87)
- update benchmarks (~1.25x speed-up) (3150714)
- fix out of date match_* docs (ca69df5)
- drop emojis from benchmarks (a026b01)
- (typos) compute max score and position idx using simd (#11) (f2d0797)
- make EXACT_MATCH_BONUS a u16 (5c7ef42)
- remove unneeded arrays (825467f)
- simplify haystack -> simd (116d061)
- move constants to SimdNum trait (ff9e75b)
- prefix_mask doesn't need to be simd (610f490)
- map needle slice directly, convert to N type in loop (917f1da)
- left_gap_penalty_masks doesn't need to be an array (00be248)