# charset_normalizer changelog > charset_normalizer release notes. - Vendor: charset_normalizer - Category: Frameworks & Libraries - Official site: https://github.com/jawah/charset_normalizer - Tracked by: What's New (https://whatsnew.fyi/product/charset-normalizer) - Harvested from: GitHub (jawah/charset_normalizer) - Entries below: 10 (newest first) What's New is an index, not a publisher: every entry below links to the vendor's own release notes, which are the authoritative source. Entries are labelled where they are hand-curated sample data, pre-releases, or drawn from a secondary source such as a developer blog. ## Releases ### 3.4.9 — Version 3.4.9 - Date: 2026-07-07 - Version: 3.4.9 - Original notes: https://github.com/jawah/charset_normalizer/releases/tag/3.4.9 - Permalink: https://whatsnew.fyi/product/charset-normalizer/releases/3.4.9 ###### Fixed - Regression in our fallback path leading to a decode error. (#771) We've yanked 3.4.8 as a result of that bug. ### 3.4.8 — Version 3.4.8 - Date: 2026-07-06 - Version: 3.4.8 - Original notes: https://github.com/jawah/charset_normalizer/releases/tag/3.4.8 - Permalink: https://whatsnew.fyi/product/charset-normalizer/releases/3.4.8 ##### [3.4.8](https://github.com/Ousret/charset_normalizer/compare/3.4.7...3.4.8) (2026-07-06) ###### Fixed - Wall import time due to cascade codec imports for our multibyte first sort of iana supported codecs (#742) - Unnecessary json import at runtime (#753) - Inverse capitalization not seen by noise detector (#731) ###### Changed - No longer holding a global cache for our noise / coherence measurements. Relax RSS memory usage. - Micro-optimizations in our noise / coherence measurements. - No longer using regex search by default for our preemptive charset mark algorithm. - Raised upperbound of setuptools to v83. - Raised upperbound of mypy(c) to v2.1. ###### Removed - Redundant UTF7 BOM marker (#730) ### 3.4.7 — Version 3.4.7 - Date: 2026-04-02 - Version: 3.4.7 - Original notes: https://github.com/jawah/charset_normalizer/releases/tag/3.4.7 - Permalink: https://whatsnew.fyi/product/charset-normalizer/releases/3.4.7 ##### [3.4.7](https://github.com/Ousret/charset_normalizer/compare/3.4.6...3.4.7) (2026-04-02) ###### Changed - Pre-built optimized version using mypy[c] v1.20. - Relax `setuptools` constraint to `setuptools>=68,<82.1`. ###### Fixed - Correctly remove SIG remnant in utf-7 decoded string. (#718) (#716) ### 3.4.6 — Version 3.4.6 - Date: 2026-03-15 - Version: 3.4.6 - Original notes: https://github.com/jawah/charset_normalizer/releases/tag/3.4.6 - Permalink: https://whatsnew.fyi/product/charset-normalizer/releases/3.4.6 ##### [3.4.6](https://github.com/Ousret/charset_normalizer/compare/3.4.5...3.4.6) (2026-03-15) ###### Changed - Flattened the logic in `charset_normalizer.md` for higher performance. Removed `eligible(..)` and `feed(...)` in favor of `feed_info(...)`. - Raised upper bound for mypy[c] to 1.20, for our optimized version. - Updated `UNICODE_RANGES_COMBINED` using Unicode blocks v17. ###### Fixed - Edge case where noise difference between two candidates can be almost insignificant. (#672) - CLI `--normalize` writing to wrong path when passing multiple files in. (#702) ###### Misc - Freethreaded pre-built wheels now shipped in PyPI starting with 3.14t. (#616) ### 3.4.5 — Version 3.4.5 - Date: 2026-03-06 - Version: 3.4.5 - Original notes: https://github.com/jawah/charset_normalizer/releases/tag/3.4.5 - Permalink: https://whatsnew.fyi/product/charset-normalizer/releases/3.4.5 ##### [3.4.5](https://github.com/Ousret/charset_normalizer/compare/3.4.4...3.4.5) (2026-03-06) ###### Changed - Update `setuptools` constraint to `setuptools>=68,<=82`. - Raised upper bound of mypyc for the optional pre-built extension to v1.19.1 ###### Fixed - Add explicit link to lib math in our optimized build. (#692) - Logger level not restored correctly for empty byte sequences. (#701) - TypeError when passing bytearray to from_bytes. (#703) ###### Misc - Applied safe micro-optimizations in both our noise detector and language detector. - Rewrote the `query_yes_no` function (inside CLI) to avoid using ambiguous licensed code. - Added `cd.py` submodule into mypyc optional compilation to reduce further the performance impact. > [!WARNING] > mypyc changed the usual binary output for the optimized wheel. Beware, especially if using PyInstaller or alike. See https://github.com/jawah/charset_normalizer/issues/714 ### 3.4.4 — Version 3.4.4 - Date: 2025-10-14 - Version: 3.4.4 - Original notes: https://github.com/jawah/charset_normalizer/releases/tag/3.4.4 - Permalink: https://whatsnew.fyi/product/charset-normalizer/releases/3.4.4 ##### [3.4.4](https://github.com/Ousret/charset_normalizer/compare/3.4.3...3.4.4) (2025-10-13) ###### Changed - Bound `setuptools` to a specific constraint `setuptools>=68,<=81`. - Raised upper bound of mypyc for the optional pre-built extension to v1.18.2 ###### Removed - `setuptools-scm` as a build dependency. ###### Misc - Enforced hashes in `dev-requirements.txt` and created `ci-requirements.txt` for security purposes. - Additional pre-built wheels for riscv64, s390x, and armv7l architectures. - Restore `multiple.intoto.jsonl` in GitHub releases in addition to individual attestation file per wheel. ### 3.4.3 — Version 3.4.3 - Date: 2025-08-09 - Version: 3.4.3 - Original notes: https://github.com/jawah/charset_normalizer/releases/tag/3.4.3 - Permalink: https://whatsnew.fyi/product/charset-normalizer/releases/3.4.3 ##### [3.4.3](https://github.com/Ousret/charset_normalizer/compare/3.4.2...3.4.3) (2025-08-09) ###### Changed - mypy(c) is no longer a required dependency at build time if `CHARSET_NORMALIZER_USE_MYPYC` isn't set to `1`. (#595) (#583) - automatically lower confidence on small bytes samples that are not Unicode in `detect` output legacy function. (#391) ###### Added - Custom build backend to overcome inability to mark mypy as an optional dependency in the build phase. - Support for Python 3.14 ###### Fixed - sdist archive contained useless directories. - automatically fallback on valid UTF-16 or UTF-32 even if the md says it's noisy. (#633) ###### Misc - SBOM are automatically published to the relevant GitHub release to comply with regulatory changes. Each published wheel comes with its SBOM. We choose CycloneDX as the format. - Prebuilt optimized wheel are no longer distributed by default for CPython 3.7 due to a change in cibuildwheel. ### 3.4.2 — Version 3.4.2 - Date: 2025-05-02 - Version: 3.4.2 - Original notes: https://github.com/jawah/charset_normalizer/releases/tag/3.4.2 - Permalink: https://whatsnew.fyi/product/charset-normalizer/releases/3.4.2 ##### [3.4.2](https://github.com/Ousret/charset_normalizer/compare/3.4.1...3.4.2) (2025-05-02) ###### Fixed - Addressed the DeprecationWarning in our CLI regarding `argparse.FileType` by backporting the target class into the package. (#591) - Improved the overall reliability of the detector with CJK Ideographs. (#605) (#587) ###### Changed - Optional mypyc compilation upgraded to version 1.15 for Python >= 3.9 ### 3.4.1 — Version 3.4.1 - Date: 2024-12-24 - Version: 3.4.1 - Original notes: https://github.com/jawah/charset_normalizer/releases/tag/3.4.1 - Permalink: https://whatsnew.fyi/product/charset-normalizer/releases/3.4.1 ##### 🚀 We're still raising awareness around HTTP/2, and HTTP/3! Did you know that Internet Explorer 11 shipped with an optional HTTP/2 support back in 2013? also libcurl did ship it in 2014[...] Using Requests today is the rough equivalent of using EOL Windows 8! We promptly invite Python developers to look at the first drop-in replacement for Requests, [namely Niquests](https://github.com/jawah/niquests). Ship with native WebSocket, SSE, Happy Eyeballs, DNS over HTTPS, and so on[...] All of this while remaining compatible with all Requests prior plug-ins / add-ons. It leverages charset-normalizer in a better way! Check it out, you will gain up to being 3X faster and get a real/respectable support with it. ##### [3.4.1](https://github.com/Ousret/charset_normalizer/compare/3.4.0...3.4.1) (2024-12-24) ###### Changed - Project metadata are now stored using `pyproject.toml` instead of `setup.cfg` using setuptools as the build backend. - Enforce annotation delayed loading for a simpler and consistent types in the project. - Optional mypyc compilation upgraded to version 1.14 for Python >= 3.8 ###### Added - pre-commit configuration. - noxfile. ###### Removed - `build-requirements.txt` as per using `pyproject.toml` native build configuration. - `bin/integration.py` and `bin/serve.py` in favor of downstream integration test (see noxfile). - `setup.cfg` in favor of `pyproject.toml` metadata configuration. - Unused `utils.range_scan` function. ###### Fixed - Converting content to Unicode bytes may insert `utf_8` instead of preferred `utf-8`. (#572) - Deprecation warning "'count' is passed as positional argument" when converting to Unicode bytes on Python 3.13+ ### 3.4.0 — Version 3.4.0 - Date: 2024-10-09 - Version: 3.4.0 - Original notes: https://github.com/jawah/charset_normalizer/releases/tag/3.4.0 - Permalink: https://whatsnew.fyi/product/charset-normalizer/releases/3.4.0 ##### 🚀 charset-normalizer is raising awareness around HTTP/2, and HTTP/3! Did you know that Internet Explorer 11 shipped with an optional HTTP/2 support back in 2013? also libcurl did ship it in 2014[...] All of this while our community is still struggling to make a firm advancement in HTTP clients. Now, many of you use Requests as the defacto http client, now, and for many years now, Requests has been frozen. Being left in a vegetative state and not evolving, this blocked millions of developers from using more advanced features. We promptly invite Python developers to look at the drop-in replacement for Requests, [namely Niquests](https://github.com/jawah/niquests). It leverage charset-normalizer in a better way! Check it out, you will be positively surprised! Don't wait another decade. We are thankful to @microsoft and involved parties for funding our work through the Microsoft FOSS Fund program. ##### [3.4.0](https://github.com/Ousret/charset_normalizer/compare/3.3.2...3.4.0) (2024-10-08) ###### Added - Argument `--no-preemptive` in the CLI to prevent the detector to search for hints. - Support for Python 3.13 (#512) ###### Fixed - Relax the TypeError exception thrown when trying to compare a CharsetMatch with anything else than a CharsetMatch. - Improved the general reliability of the detector based on user feedbacks. (#520) (#509) (#498) (#407) (#537) - Declared charset in content (preemptive detection) not changed when converting to utf-8 bytes. (#381)