NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
Python package to defang and fang indicators of compromise from text.
Last release 3 months ago
17 Jun 2026
Ships unpredictably
gaps range from 2 weeks to 3.6 years
Some releases are documented
notes for 14 of 41 stable releases
Nothing withdrawn
no release was ever pulled
9 years old
41 releases · first in 2017
Fixed ReDoS catastrophic backtracking in fang() (#149). Thirteen patterns used \ *[brackets]\ * — two unbounded space quantifiers around a bracket cla
fang() (#149). Thirteen patterns used \ *[brackets]\ * — two unbounded space quantifiers around a bracket class — which an adversarial run of spaces could force into super-polynomial backtracking (a ~400-byte input pinned a CPU core for seconds), reachable through the public fang() API on untrusted text. The flanking spaces are now bounded to \ {0,3}, keeping matching linear while preserving capture-group numbering and match semantics.Performance improvements
Performance improvements
fang() on text without defang markers by skipping literal-keyed regex passes (DOT, dot/punto/punkt, AT/ET/ARROBA, xxxx://) when none of the trigger substrings are present — the same idea as the existing bracket short-circuit, generalized to a per-mapping requires_any literal gate. Output is unchanged. Roughly 1.8x faster on bracket-free input and ~4x faster on plain prose; bracket-heavy input also benefits when it defangs with brackets rather than the literal words.One column per quarter.
Python version upgrade and improvements
Python version upgrade and improvements
fang() by skipping bracket-related regex passes when the input contains no bracketsdefang() by replacing the regex-mapping loop with direct str.replace calls for http/https and two precompiled regexes for . and @fang() no longer mistakes literal dot/DOT text inside URL hostnames for a defanged separator (#112). Lowercase dot is now only fanged when bordered by brackets or by hyphens on both sides (so accounts.dot-example.online is preserved). Bare uppercase DOT is only fanged when it sits inside a token with no real . and is not adjacent to other uppercase letters (so WWW.MDOT.EXAMPLE.VIP/pay is preserved while fooDOTcom still fangs to foo.com).a,b,c,d) to require each octet to be in the valid IPv4 range 0-255, so strings like 999,999,999,999 no longer match the IPv4 fang pattern (#121)setup.py, setup.cfg, and mypy.ini (configuration consolidated into pyproject.toml)bump2version (versions are managed directly in pyproject.toml and ioc_fanger/__init__.py)uv is now the supported way to test/lint/develop. Docker is retained only to generate and compare a Linux benchmark baseline that matches CI.requirements.txt and requirements_dev.txt (use uv sync --locked --group dev to set up a dev environment)Bump version: 4.2.0 → 4.2.1
Bump version: 4.2.0 → 4.2.1
\ (#99)Bump version: 4.1.0 → 4.2.0
Bump version: 4.1.0 → 4.2.0
Bump version: 4.0.0 → 4.1.0
Bump version: 4.0.0 → 4.1.0
a.]b was fanged as: a.b. Now, a.]b will not be changed when fanging.Bump version: 3.4.1 → 4.0.0
Bump version: 3.4.1 → 4.0.0
ldap are properly preserved
http!://example.com/test.php; if you are regularly seeing this fanging strategy used and would like this to be readded, please raise an issueBump version: 3.4.0 → 3.4.1
Bump version: 3.4.0 → 3.4.1
Bump version: 3.3.0 → 3.4.0
Bump version: 3.3.0 → 3.4.0
Bump version: 3.2.3 → 3.3.0
Bump version: 3.2.3 → 3.3.0
Limited replacement of characters between http(s) and :// by changing (https?)(?!s)\\S*?:// to (https?)\\S{0,2}?://
Reduced false positives by not fanging periods and commas with spaces after them (#47) (e.g. previously a. [b] was fanged as a.b] - we've updated this
a. [b] was fanged as a.b] - we've updated this to prevent false positives so that a. [b] is not fanged)Improving handling of "http" surrounded by angle brackets
Reverting to use regexes rather than grammars (for the sake of performance)
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →