NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #556 most downloaded on PyPI
libcurl ffi bindings for Python, with impersonation support.
Last release 15 days ago
20 Sep 2026
Ships fairly regularly
a new release about every 3 weeks
Some releases are documented
notes for 16 of 43 stable releases
4 versions withdrawn
withdrawn after publishing
4 years old
102 releases · first in 2022
One column per quarter.
Nothing published for this version
Add support for TLS trust_anchors extension in Chrome 152. You can use the chrome 152 target with https://impersonate.pro , or set the extension by va
Full Changelog: v0.16.2...v0.16.3
Nothing published for this version
fix(build): ship an Android wheel per CPython minor, add 3.14 by @soxoj in #835
Full Changelog: v0.16.1...v0.16.2
Nothing published for this version
Nothing published for this version
Nothing published for this version
🎉 Yet another release with huge updates!
🎉 Yet another release with huge updates!
curl was updated to 8.21 with curl-impersonate 2.0This release focuses on bugfixes and cleanup, especially for http3 and underlying curl-impersonate. Preset fingerprints will be added in next version: 0.16.1 or 0.17.
Full Changelog: v0.15.0...v0.16.0
Nothing published for this version
Nothing published for this version
Nothing published for this version
This is a beta release. But we do want to highlight some changes:
This is a beta release. But we do want to highlight some changes:
CurlOpt.HTTPHEADER_ORDER for setting the order of http headers. The syntax is Host,Cookie,User-Agent, a comma separated list of string.Feel free to try out this beta!
⚠️ Security improvement. If you are accepting urls from others and returning the response to them, you are vulnerable to redirection-based SSRF. Disab…
🎉 Another release with significant changes!
curl-cffi, easier http debugging for both humans and agents. See docs. We also added a skill.allow_redirects or at lease set allow_redirects="safe", see the advisory and the docs.The list of proxy vendors with udp sock5 support is very limited, so I set up 2 servers for testing. You can simply run:
curl-cffi get https://fp.impersonate.pro/api/http3 --proxy socks5://imp:curl-cffi@206.189.95.199:1080 --http3-only
curl-cffi get https://fp.impersonate.pro/api/http3 --proxy socks5://imp:curl-cffi@24.144.88.46:1080 --http3-onlyIf you need more udp socks5 servers from us, click the 👀 emoji to vote.
Full Changelog: v0.14.0...v0.15.0
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
This release contains a few changes that might break the code for some people, hopefully not too many:
This release contains a few changes that might break the code for some people, hopefully not too many:
Personal notes:
I have been holding this version for a while, thinking that I should fix the unintentional macOS version upgrade and implement pro features within this release. But it turns out that 2025 has been a fruitful, but exhausting year for me. Significant number of PRs have been merged since last release, so let's make them available for all.
curl-cffi by @haron in https://github.com/lexiforest/curl_cffi/pull/621Full Changelog: https://github.com/lexiforest/curl_cffi/compare/v0.13.0...v0.14.0
Nothing published for this version
Fix Content-Type header update for non-empty data in set_curl_options by @sarperavci in https://github.com/lexiforest/curl_cffi/pull/658
Full Changelog: https://github.com/lexiforest/curl_cffi/compare/v0.14.0b3...v0.14.0b4
Use conditional imports based on thread backend selection by @Caellian in https://github.com/lexiforest/curl_cffi/pull/625
Full Changelog: https://github.com/lexiforest/curl_cffi/compare/v0.14.0b2...v0.14.0b3
Nothing published for this version
We upgraded minimum linux images from manylinux2014 to manylinux_2_28.
Note:
curl-cffi by @haron in https://github.com/lexiforest/curl_cffi/pull/621Full Changelog: https://github.com/lexiforest/curl_cffi/compare/v0.13.0...v0.14.0b1
Fixed asyncio timeout issue, if you are experiencing this, please update to 0.13.
Fixed asyncio timeout issue, if you are experiencing this, please update to 0.13.
REQUESTS_CA_BUNDLE and CURL_CA_BUNDLE enviroment variable by @henrysky in https://github.com/lexiforest/curl_cffi/pull/611Full Changelog: https://github.com/lexiforest/curl_cffi/compare/v0.12.0...v0.13.0
Add support for building curl_cffi wheels on WoA by @lowkeyrossi in https://github.com/lexiforest/curl_cffi/pull/603
REQUESTS_CA_BUNDLE and CURL_CA_BUNDLE enviroment variable by @henrysky in https://github.com/lexiforest/curl_cffi/pull/611Full Changelog: https://github.com/lexiforest/curl_cffi/compare/v0.12.1b2...v0.13.0b1
Nothing published for this version
Nothing published for this version
Fix WebSocket send fails on second message after sending large message by @ferdimsu in https://github.com/lexiforest/curl_cffi/pull/570
Full Changelog: https://github.com/lexiforest/curl_cffi/compare/v0.11.4...v0.12.0
bugfix: move curl_options to the end of setopt by @lexiforest in https://github.com/lexiforest/curl_cffi/pull/580
Full Changelog: https://github.com/lexiforest/curl_cffi/compare/v0.11.4...v0.12.0b1
bugfix: move curl_options to the end of setopt by @lexiforest in https://github.com/lexiforest/curl_cffi/pull/580
Full Changelog: https://github.com/lexiforest/curl_cffi/compare/v0.11.3...v0.11.4
Nothing published for this version
The response.cookies object now contains only cookies from current request. If you are using the following patterns and hit a redirect, you will need
The response.cookies object now contains only cookies from current request. If you are using the following patterns and hit a redirect, you will need a session.
import curl_cffi
r = curl_cffi.get("https://httpbin.org/redirect")
# ❌ Cookie from previous redirect may be lost.
do_something(r.cookies)
s = curl_cffi.Session()
r = s.get("https://httpbin.org/redirect")
# ✅ Use a session instead, to retrive all cookies in the session
do_something(s.cookies)
Full Changelog: https://github.com/lexiforest/curl_cffi/compare/v0.11.1...v0.11.2
Nothing published for this version
Added support for HTTP/3, except for Windows.
Added support for HTTP/3, except for Windows.
>>> import curl_cffi
>>> from curl_cffi import CurlHttpVersion
>>> r = curl_cffi.get("https://cloudflare-quic.com", http_version=CurlHttpVersion.V3ONLY)
>>> r.status_code
200
>>> r.http_version == CurlHttpVersion.V3
True
Also added new targets: tor145, safari184, safari184_ios, chrome136.
Full Changelog: https://github.com/lexiforest/curl_cffi/compare/v0.10.0...v0.11.0
Nothing published for this version
🎉 We are very proud to present support for HTTP/3!
🎉 We are very proud to present support for HTTP/3!
>>> import curl_cffi
>>> from curl_cffi import CurlHttpVersion
>>> r = curl_cffi.get("https://cloudflare-quic.com", http_version=CurlHttpVersion.V3ONLY)
>>> r.status_code
200
>>> r.http_version == CurlHttpVersion.V3
True
Windows wheels failed to build, we will fix that later.
Full Changelog: https://github.com/lexiforest/curl_cffi/compare/v0.10.0...v0.11.0b1
We added support for using curl_cffi directly
We added support for using curl_cffi directly
import curl_cffi as cc
r = cc.get("https://www.example.com")
websocket.recv hangs by @lexiforest in https://github.com/lexiforest/curl_cffi/pull/510Full Changelog: https://github.com/lexiforest/curl_cffi/compare/v0.9.0...v0.10.0
Nothing published for this version
bugfixes and Firefox135 support.
bugfixes and Firefox135 support.
It has been a while since our last stable release 0.7.4, here is what changed since then. Note that this will be the last release to support Python 3.
It has been a while since our last stable release 0.7.4, here is what changed since then. Note that this will be the last release to support Python 3.8.
quote parameter to specify which character should be percent-encoded in path and query by @lexiforest in https://github.com/lexiforest/curl_cffi/pull/405.get, .post, ...) by @novitae in https://github.com/lexiforest/curl_cffi/pull/490Full Changelog: https://github.com/lexiforest/curl_cffi/compare/v0.7.4...v0.9.0
Fixed typo by @BobbedBob in https://github.com/lexiforest/curl_cffi/pull/480
.get, .post, ...) by @novitae in https://github.com/lexiforest/curl_cffi/pull/490Full Changelog: https://github.com/lexiforest/curl_cffi/compare/v0.8.1b9...v0.9.0b2
Do not use this release, not working on 3.12
Do not use this release, not working on 3.12
ALPN enable/disable by @novitae in https://github.com/lexiforest/curl_cffi/pull/470
Full Changelog: https://github.com/lexiforest/curl_cffi/compare/v0.8.1b8...v0.8.1b9
refactor: Split WebSocket support into separate sync/async implementations by @dolfies in https://github.com/lexiforest/curl_cffi/pull/449
Full Changelog: https://github.com/lexiforest/curl_cffi/compare/v0.8.0b7...v0.8.1b8
Make Session.cookies a property, use session._cookies for Cookies object by @Velocidensity in https://github.com/lexiforest/curl_cffi/pull/446
Windows build is still not available.
Full Changelog: https://github.com/lexiforest/curl_cffi/compare/v0.8.0b6...v0.8.0b7
Added Chrome 131 support. Note that Windows packages are missing due to compile time issues.
Added Chrome 131 support. Note that Windows packages are missing due to compile time issues.
Nothing published for this version
Nothing published for this version
Fixed the url quote error, again.
Fixed the url quote error, again.
Full Changelog: https://github.com/lexiforest/curl_cffi/compare/v0.7.3...v0.7.4
Content-Type headers were forcefully updated
Fix serious bugs in 0.7.2:
Nothing published for this version
feat: add better type hints for impersonate and session by @vvanglro in https://github.com/lexiforest/curl_cffi/pull/359
Full Changelog: https://github.com/lexiforest/curl_cffi/compare/v0.7.1...v0.7.2
Added Cookies.get_dict(), for compatibility with requests.
Cookies.get_dict(), for compatibility with requests.subdomains attribute.Full Changelog: https://github.com/yifeikong/curl_cffi/compare/v0.7.0...v0.7.1
Full change log: https://curl-cffi.readthedocs.io/en/latest/changelog.htm
Full change log: https://curl-cffi.readthedocs.io/en/latest/changelog.htm
Full Changelog: https://github.com/yifeikong/curl_cffi/compare/v0.6.4...v0.7.0
Add coustomized ja3 and akamai fingerprints support by @yifeikong in https://github.com/yifeikong/curl_cffi/pull/331
Full Changelog: https://github.com/yifeikong/curl_cffi/compare/v0.7.0b6...v0.7.0b7
Nothing published for this version
Use tmpdir for libcurl-impersonate artifacts on Linux builds by @bjia56 in https://github.com/yifeikong/curl_cffi/pull/265
base_url to BaseSession by @lebr0nli in https://github.com/yifeikong/curl_cffi/pull/279default_encoding parameter to [set|autodetect] the encoding if the charset is missing from the headers by @deedy5 in https://github.com/yifeikong/curl_cffi/pull/284Full Changelog: https://github.com/yifeikong/curl_cffi/compare/v0.6.3b1...v0.7.0b4
Your coding agent can read these notes before it upgrades. Set up the MCP server →