# cffi changelog > cffi release notes. - Vendor: cffi - Category: Frameworks & Libraries - Official site: https://github.com/python-cffi/cffi - Tracked by: What's New (https://whatsnew.fyi/product/cffi) - Harvested from: GitHub (python-cffi/cffi) - 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 ### v2.1.1 - Date: 2026-08-03 - Version: v2.1.1 - Original notes: https://github.com/python-cffi/cffi/releases/tag/v2.1.1 - Permalink: https://whatsnew.fyi/product/cffi/releases/v2.1.1 ##### What's Changed * Minimize internal Python API usage for interpreter and thread state sampling where possible. Avoids breaking ABI change in Python >= 3.15.0b4 (https://github.com/python-cffi/cffi/pull/269). **Full Changelog**: https://github.com/python-cffi/cffi/compare/v2.1.0...v2.1.1 ### v2.1.0 - Date: 2026-07-06 - Version: v2.1.0 - Original notes: https://github.com/python-cffi/cffi/releases/tag/v2.1.0 - Permalink: https://whatsnew.fyi/product/cffi/releases/v2.1.0 * Added support for Python 3.15 and support for C extensions generated by CFFI to target the new ``abi3t`` free-threaded ABI. * Dropped support for Python 3.9. * Added ``cffi-gen-src`` CLI to generate CFFI C extension source for alternate build backend support. * Fixed crashes inside ``__delitem__``. * Fixed "string too big" error under MSVC. * Fixed mingw builds. * Added support for arm64 iOS wheels. ### v2.0.0 - Date: 2025-09-08 - Version: v2.0.0 - Original notes: https://github.com/python-cffi/cffi/releases/tag/v2.0.0 - Permalink: https://whatsnew.fyi/product/cffi/releases/v2.0.0 ##### What's Changed * Add Python 3.14 support. * Add CPython free-threaded support (3.14t+ only) - huge thanks to the folks at Quansight Labs for all the work to get this one sorted! * Drop Python <= 3.8 support. * Fix order dependency affecting nested type size calculation (#148). **Full Changelog**: https://github.com/python-cffi/cffi/compare/v1.17.1...v2.0.0 ### v2.0.0b1 - Date: 2025-07-28 - Version: v2.0.0b1 - Original notes: https://github.com/python-cffi/cffi/releases/tag/v2.0.0b1 - Permalink: https://whatsnew.fyi/product/cffi/releases/v2.0.0b1 - Labels: Pre-release ##### What's Changed * Add Python 3.14 support. * Add CPython free-threaded support (3.14t+ only). * Drop Python <= 3.8 support. * Fix order dependency affecting nested type size calculation (#148). **Full Changelog**: https://github.com/python-cffi/cffi/compare/v1.17.1...v2.0.0b1 ### v1.17.1 - Date: 2024-09-04 - Version: v1.17.1 - Original notes: https://github.com/python-cffi/cffi/releases/tag/v1.17.1 - Permalink: https://whatsnew.fyi/product/cffi/releases/v1.17.1 * Fix failing ``distutils.msvc9compiler`` imports under Windows (#118). * ``ffibuilder.emit_python_code()`` and ``ffibuiler.emit_c_code()`` accept file-like objects (#115). * ``ffiplatform`` calls are bypassed by ``ffibuilder.emit_python_code()`` and ``ffibuilder.emit_c_code()`` (#81). **Full Changelog**: https://github.com/python-cffi/cffi/compare/v1.17.0...v1.17.1 ### v1.17.0 - Date: 2024-08-06 - Version: v1.17.0 - Original notes: https://github.com/python-cffi/cffi/releases/tag/v1.17.0 - Permalink: https://whatsnew.fyi/product/cffi/releases/v1.17.0 * Add support for Python 3.13. * Free-threaded CPython builds (i.e. `python3.13t` and the `3.13t` ABI) are not currently supported. * In API mode, when you get a function from a C library by writing `fn = lib.myfunc`, you get an object of a special type for performance reasons, instead of a ``. Before version 1.17 you could only call such objects. You could write `ffi.addressof(lib, "myfunc")` in order to get a real `` object, based on the idea that in these cases in C you'd usually write `&myfunc` instead of `myfunc`. In version 1.17, the special object `lib.myfunc` can now be passed in many places where CFFI expects a regular `` object. For example, you can now pass it as a callback to a C function call, or write it inside a C structure field of the correct pointer-to-function type, or use `ffi.cast()` or `ffi.typeof()` on it. **Full Changelog**: https://github.com/python-cffi/cffi/compare/v1.16.0...v1.17.0 ### v1.17.0rc1 - Date: 2024-05-23 - Version: v1.17.0rc1 - Original notes: https://github.com/python-cffi/cffi/releases/tag/v1.17.0rc1 - Permalink: https://whatsnew.fyi/product/cffi/releases/v1.17.0rc1 - Labels: Pre-release * Add support for Python 3.13. * In API mode, when you get a function from a C library by writing fn = lib.myfunc, you get an object of a special type for performance reasons, instead of a . Before version 1.17 you could only call such objects. You could write ffi.addressof(lib, “myfunc”) in order to get a real object, based on the idea that in these cases in C you’d usually write &myfunc instead of myfunc. In version 1.17, the special object lib.myfunc can now be passed in many places where CFFI expects a regular object. For example, you can now pass it as a callback to a C function call, or write it inside a C structure field of the correct pointer-to-function type, or use ffi.cast() or ffi.typeof() on it. * Build wheels for musllinux aarch64. ### v1.16.0 - Date: 2023-09-28 - Version: v1.16.0 - Original notes: https://github.com/python-cffi/cffi/releases/tag/v1.16.0 - Permalink: https://whatsnew.fyi/product/cffi/releases/v1.16.0 * Add support for Python 3.12. With the removal of ``distutils`` from Python 3.12, projects using CFFI features that depend on ``distutils`` at runtime must add a dependency on ``setuptools`` to function under Python 3.12+. CFFI does not declare a runtime ``setuptools`` requirement to avoid an unnecessary dependency for projects that do not require it. * Drop support for end-of-life Python versions (2.7, 3.6, 3.7). * Add support for PEP517 builds; ``setuptools`` is now a required build dependency. * Declare ``python_requires`` metadata for Python 3.8+. This allows unsupported Pythons to continue using previously released sdists and wheels. * Move project source under ``src/``; a more standard layout that also enables CI to more easily catch packaging errors. ### v1.16.0rc2 - Date: 2023-09-26 - Version: v1.16.0rc2 - Original notes: https://github.com/python-cffi/cffi/releases/tag/v1.16.0rc2 - Permalink: https://whatsnew.fyi/product/cffi/releases/v1.16.0rc2 - Labels: Pre-release * Fix packaging issue in v1.16.0rc1. * Rearrange project sources (`src/` layout) so packaging tests can properly detect similar issues in the future. **Full Changelog**: https://github.com/python-cffi/cffi/compare/v1.16.0rc1...v1.16.0rc2 ### v1.16.0rc1 - Date: 2023-09-25 - Version: v1.16.0rc1 - Original notes: https://github.com/python-cffi/cffi/releases/tag/v1.16.0rc1 - Permalink: https://whatsnew.fyi/product/cffi/releases/v1.16.0rc1 - Labels: Pre-release * Add support for Python 3.12. With the removal of ``distutils`` from Python 3.12, projects using CFFI features that depend on ``distutils`` at runtime must add a dependency on ``setuptools`` to function under Python 3.12+. CFFI does not declare a runtime ``setuptools`` requirement to avoid an unnecessary dependency for projects that do not require it. * Drop support for end-of-life Python versions (2.7, 3.6, 3.7). * Move project home to `python-cffi/cffi` on GitHub. * Add support for PEP517 builds; ``setuptools`` is now a required build dependency. * Declare ``python_requires`` metadata for Python 3.8+. This allows unsupported Pythons to continue using previously released sdists and wheels. * Add missing calls to `PyObject_GC_UnTrack` to [avoid ResourceWarning](https://foss.heptapod.net/pypy/cffi/-/issues/553) 15c4b71d5e3f2295c0e4773e99b23ac751e02534