Repository navigation
Releases: ericfitz/sqdist
Releases · ericfitz/sqdist
Release list
v0.6.0
This release is about performance. Where v0.5.0 focused on adding typosquat-detection
capability (--typosquat, --pypi, -n/--normalize), v0.6.0 changes nothing you can see and
a great deal you can measure.
The output contract is unchanged. Every optimization here is output-preserving, verified
byte-for-byte against a full-PyPI-corpus golden baseline, and against per-technique recall over
a labeled typosquat set.
What got faster
Measured on 879,732 PyPI package names, release build, single-threaded:
| Command | v0.5.0 | v0.6.0 | Speedup |
|---|---|---|---|
--string requests --list pypi -t 1 |
3.11 s | 0.20 s | 15.5x |
| same, 30-char query | 5.58 s | 0.16 s | 34x |
--typosquat |
3.46 s | 0.50 s | 6.9x |
--typosquat --pypi |
3.71 s | 0.65 s | 5.7x |
npm corpus (4.39 M names), -t 1 |
18.33 s | 1.13 s | 16.2x |
How
- A two-stage exact emit gate. Candidates are rejected before any distance panel is built:
first a length-difference lower bound, then a bandedO(n*k)k-bounded Damerau that answers
damerau <= kwithout computing the distance. Both tests are exact, so the gate is a pure
short-circuit and never a heuristic filter. - A prepared query. In list mode the
--stringside is normalized and skeletonized once,
not once per candidate. - Fewer allocations per pair — roughly 40 down to 5.
ASCII pairs run the banded kernel on bytes, skipping the char collect entirely.
Notes
- macOS binaries are signed, notarized, and (for the
.pkg) stapled. - Homebrew:
brew tap ericfitz/tap && brew install sqdist - crates.io:
cargo install sqdist
Full Changelog: v0.5.0...v0.6.0