Python package to defang and fang indicators of compromise from text.
Last release 2 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
Release timeline
41 releases since 2017One column per quarter.
Releases
- 5.1.117 Jun 2026
Release notes
Open source →Fixed
- Fixed ReDoS catastrophic backtracking in
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 publicfang()API on untrusted text. The flanking spaces are now bounded to\ {0,3}, keeping matching linear while preserving capture-group numbering and match semantics.
- Fixed ReDoS catastrophic backtracking in
- 5.1.011 Jun 2026
Additional notes
Open source →Changed
- Faster
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-mappingrequires_anyliteral 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.
- Faster
- 5.0.013 May 2026
Additional notes
Open source →Added
- Python 3.10, 3.11, 3.12, 3.13, and 3.14 support
Changed
- Migrated from pip/setuptools to uv for dependency management and packaging
- Switched build backend from setuptools to hatchling
- Replaced flake8, black, isort, and pylint with ruff for linting and formatting
- Faster
fang()by skipping bracket-related regex passes when the input contains no brackets - Faster
defang()by replacing the regex-mapping loop with directstr.replacecalls forhttp/httpsand two precompiled regexes for.and@
Fixed
fang()no longer mistakes literaldot/DOTtext inside URL hostnames for a defanged separator (#112). Lowercasedotis now only fanged when bordered by brackets or by hyphens on both sides (soaccounts.dot-example.onlineis preserved). Bare uppercaseDOTis only fanged when it sits inside a token with no real.and is not adjacent to other uppercase letters (soWWW.MDOT.EXAMPLE.VIP/payis preserved whilefooDOTcomstill fangs tofoo.com).- Constrained the comma-separated IP fang regex (
a,b,c,d) to require each octet to be in the valid IPv4 range0-255, so strings like999,999,999,999no longer match the IPv4 fang pattern (#121)
Removed
- Support for Python 3.7, 3.8, and 3.9 (minimum is now 3.10)
setup.py,setup.cfg, andmypy.ini(configuration consolidated intopyproject.toml)bump2version(versions are managed directly inpyproject.tomlandioc_fanger/__init__.py)- Docker-based local development;
uvis now the supported way to test/lint/develop. Docker is retained only to generate and compare a Linux benchmark baseline that matches CI. requirements.txtandrequirements_dev.txt(useuv sync --locked --group devto set up a dev environment)
- 4.2.127 Sept 2022
Additional notes
Open source →Fixed
- Fixed incorrect find regex producing overly broad fanging of any character preceeded with a
\(#99)
- Fixed incorrect find regex producing overly broad fanging of any character preceeded with a
- 4.2.017 Sept 2022
Additional notes
Open source →Changed
- (Internal) Moving regexes from json files to Python files for improved readability (#50)
- 4.1.013 Sept 2022
Additional notes
Open source →Changed
- Simplifying regexes which find surrounding brackets to only fang characters surrounded by brackets on both sides (#85)
- e.g. With previous versions of this library, this:
a.]bwas fanged as:a.b. Now,a.]bwill not be changed when fanging.
- e.g. With previous versions of this library, this:
- Simplifying regexes which find surrounding brackets to only fang characters surrounded by brackets on both sides (#85)
- 4.0.014 Jul 2022
Additional notes
Open source →Fixed
- Refined parsing so schemes like
ldapare properly preserved- We have dropped support for fanging certain, uncommon fanging strategies like
http!://example.com/test.php; if you are regularly seeing this fanging strategy used and would like this to be readded, please raise an issue
- We have dropped support for fanging certain, uncommon fanging strategies like
Removed
- Support for Python < 3.7
- Refined parsing so schemes like
- 3.4.123 Feb 2022
Additional notes
Open source →Fixed
- IP address fanging so that we fang only comma separated numbers bordered by whitespace or the start/end of a line (#71)
- 3.4.04 Feb 2022
- 3.3.017 Apr 2021
- 3.2.39 Apr 2021
- 3.2.27 Apr 2021
Release notes
Open source →Fixed
- Reduced false positives by not fanging periods and commas with spaces after them (#47) (e.g. previously
a. [b]was fanged asa.b]- we've updated this to prevent false positives so thata. [b]is not fanged)
- Reduced false positives by not fanging periods and commas with spaces after them (#47) (e.g. previously
- 3.2.16 Apr 2021
Release notes
Open source →Fixed
- Fixing lint errors
- Improving handling of "http" surrounded by angle brackets (#48)
- 3.2.09 Mar 2021
Release notes
Open source →Added
- Benchmarks to tests (#41)
Changed
- Reverting to use regexes rather than grammars (for the sake of performance) (#38)
- 3.1.422 Jan 2021
Nothing published for this version
- 3.1.328 Sept 2020
Nothing published for this version
- 3.1.228 Aug 2020
Nothing published for this version
- 3.1.126 Feb 2020
Nothing published for this version
- 3.1.010 Feb 2020
Nothing published for this version
- 3.0.182 Jan 2020
Nothing published for this version
- 3.0.1625 Sept 2019
Nothing published for this version
- 3.0.154 Jun 2019
Nothing published for this version
- 3.0.144 Jun 2019
Nothing published for this version
- 3.0.1212 Apr 2019
Nothing published for this version
- 3.0.112 Apr 2019
Nothing published for this version
- 3.0.927 Mar 2019
Nothing published for this version
- 3.0.826 Mar 2019
Nothing published for this version
- 3.0.69 Mar 2019
Nothing published for this version
- 3.0.530 Jan 2019
Nothing published for this version
- 3.0.428 Jan 2019
Nothing published for this version
- 3.0.312 Dec 2018
Nothing published for this version
- 3.0.22 Dec 2018
Nothing published for this version
- 3.0.114 Nov 2018
Nothing published for this version
- 3.0.013 Aug 2018
Nothing published for this version
- 2.0.412 Mar 2018
Nothing published for this version
- 2.0.312 Mar 2018
Nothing published for this version
- 2.0.224 Jan 2018
Nothing published for this version
- 2.0.124 Jan 2018
Nothing published for this version
- 1.0.012 Dec 2017
Nothing published for this version
- 0.1.216 Oct 2017
Nothing published for this version
- 0.1.110 Oct 2017
Nothing published for this version