NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #243 most downloaded on PyPI
rapid fuzzy string matching
Last release 29 days ago
30 Aug 2026
Release timing varies
gaps range from 2 weeks to 5 months
Nearly every release is documented
notes for 60 of the last 60 stable releases
2 versions withdrawn
withdrawn after publishing
7 years old
175 releases · first in 2020
One column per quarter.
add support for slicing in Editops.__getitem__/Editops.__delitem__
Editops.__getitem__/Editops.__delitem__DamerauLevenshtein moduleadded support for KeyboardInterrupt in processor module It might still take a bit until the KeyboardInterrupt is registered, but no longer runs all te
Ctrl + Cfix value range of jaro_similarity/jaro_winkler_similarity in the pure Python mode for the string_metric module
jaro_similarity/jaro_winkler_similarity in the pure Python mode
for the string_metric modulefix value range of jaro_similarity/jaro_winkler_similarity in the pure Python mode for the string_metric module
fix missing atomix symbol on arm 32 bit
add missing symbol to pure Python version which prevented the usage of the fallback implementation
add missing symbol to pure Python which made the usage impossible
## Fixed - fix version number
add as_matching_blocks to Editops/Opcodes
as_matching_blocks to Editops/OpcodesEditopsEditops.apply/Opcodes.applyEditops.remove_subsequenceOpcodeseval(repr(Editop)), eval(repr(Editops)), eval(repr(Opcode)) and eval(repr(Opcodes))Opcodes.__init__added in-tree build backend to install cmake and ninja only when it is not installed yet and only when wheels are available
changed internal implementation of cdist to remove build dependency to numpy
## Fixed - fix missing type stubs
change src layout to make package import from root directory possible
allow installation without the C++ extension if it fails to compile
RAPIDFUZZ_IMPLEMENTATION
which can be set to "cpp" or "python"added pure python fallback for all implementations with the following exceptions:
fix integer wraparound in partial_ratio/partial_ratio_alignment
fix unlimited recursion in LCSseq when used in combination with the process module
taskflow, rapidfuzz-cpp and jarowinkler-cpp
back to wheel, since some package building systems like piwheels can't clone sourcesuse system version of cmake on arm platforms, since the cmake package fails to compile
remove cython dependency for sdist
relax version requirements of dependencies to simplify packaging
Do not include installations of jaro_winkler in wheels (regression from 2.0.7)
rapidfuzz-cpp, jarowinkler-cpp
and taskflowAdd missing Cython code in sdist
fix incorrect score_cutoff handling in token_set_ratio and token_ratio
Do not include installations of jaro_winkler and taskflow in wheels
fix incorrect population of sys.modules which lead to submodules overshadowing other imports
fix signed integer overflow inside hashmap implementation
fix binary size increase due to debug symbols
Levenshtein.editopsAdded fuzz.partial_ratio_alignment, which returns the result of fuzz.partial_ratio combined with the alignment this result stems from
Add back transpiled cython files to the sdist to simplify builds in package builders like FreeBSD port build or conda-forge
Indel.normalized_similarity mistakenly used the implementation of Indel.normalized_distance
remove the rapidfuzz.levenshtein module which was deprecated in v1.0.0 and scheduled for removal in v2.0.0
rapidfuzz.distance.*
string_metric.levenshtein or string_metric.hamming is below max
they do now return max + 1 instead of -1rapidfuzz.levenshtein module which was deprecated in v1.0.0 and scheduled for removal in v2.0.0rapidfuzz.string_metric (will be removed in v3.0.0). Similar scorers are available
in rapidfuzz.distance.*rapidfuzz.string_metric.levenshtein_editops
rapidfuzz.string_metric.levenshtein for max <= 31
using a banded implementationfix bug in new editops implementation, causing it to SegFault on some inputs (see https://github.com/qurator-spk/dinglehopper/issues/64)
fix bug in new editops implementation, causing it to SegFault on some inputs (see qurator-spk/dinglehopper#64)
Fix some issues in the type annotations (see #163)
rapidfuzz.string_metric.levenshtein_editops
O(N * M) to O([N / 64] * M)Added missing wheels for Python3.6 on MacOs and Windows (see #159)
Add wheels for Python 3.10 on MacOs
Fix incorrect editops results (See #148)
Add Wheels for Python3.10 on all platforms except MacOs (see #141)
string_metric.jaro_similarity and string_metric.jaro_winkler_similarity for strings with a length <= 64fixed incorrect results of fuzz.partial_ratio for long needles (see #138)
Added multithreading support to cdist using the argument process.cdist
process.cdistprocess.cdist to set the dtype of the result numpy array (see #132)improved performance of fuzz.ratio
## Changed - Add back wheels for Python2.7
fuzz.partial_ratio uses a new implementation for short needles (<= 64). This implementation is
Fix out of bounds access in levenshtein_editops
all scorers do now support similarity/distance calculations between any sequence of hashables. So it is possible to calculate e.g. the WER as: ```
>>> string_metric.levenshtein(["word1", "word2"], ["word1", "word3"])
1
string_metric.jaro_similaritystring_metric.jaro_winkler_similaritystring_metric.levenshtein_editopsprocess.extractimproved performance of result creation in process.extract
added processor support to levenshtein and hamming
levenshtein and hammingnormalized_hamming and normalized_levenshtein when used with utils.default_process as processorFix a bug in the mbleven implementation of the uniform Levenshtein distance and cover it with fuzz tests
some of the newly activated warnings caused build failures in the conda-forge build
Fixed issue in LCS calculation for partial_ratio (see #90)
utils.default_process is usedadd wheels for a lot of new platforms
is instead of == to compare functions directly by addressfurther improve bitparallel implementation of uniform Levenshtein distance for strings with a length > 64 (in many cases more than 50% faster)
add more benchmarks to documentation
Fix reference counting in process.extract (see #81)
Fix result conversion in process.extract (see #79)
string_metric.normalized_levenshtein supports now all weights
The bitparallel LCS algorithm in fuzz.partial_ratio did not find the longest common substring properly in some cases. The old algorithm is used again
string_metric.normalized_levenshtein supports now the weights (1, 1, N) with N >= 1
Substitution > Insertion + Deletion has no effectthe rapidfuzz.levenshtein module is now deprecated and will be removed in v2.0.0 These functions are now placed in rapidfuzz.string_metric. distance,…
fuzz.partial_ratio
-> Since fuzz.ratio and fuzz.partial_ratio are used in most scorers, this improves the overall performance.process.extract and process.extractOnerapidfuzz.levenshtein module is now deprecated and will be removed in v2.0.0
These functions are now placed in rapidfuzz.string_metric. distance, normalized_distance, weighted_distance and weighted_normalized_distance are combined into levenshtein and normalized_levenshtein.string_metric.normalized_hammingtoken_ratioutf8 usage in the copyright header caused problems with python2.7 on some platforms (see #70)
when a custom processor like lambda s: s was used with any of the methods inside fuzz.* it always returned a score of 100. This release fixes this and
lambda s: s was used with any of the methods inside fuzz.* it always returned a score of 100. This release fixes this and adds a better test coverage to prevent this bug in the future.added hamming distance metric in the levenshtein module
Add missing virtual destructor that caused a segmentation fault on Mac Os
## Added - C++11 Support - manylinux
Your coding agent can read these notes before it upgrades. Set up the MCP server →