New Features:
- Added helper functions to
py::arraythat return shape and strides asstd::spanwhen available.
#5974
Bug fixes:
-
Added fallback locking for Python 3.13t where
PyCriticalSection_BeginMutexis unavailable.
#5981 -
Fixed race condition in
py::make_key_iteratorwith free-threaded Python.
#5971 -
MSVC 19.16 and earlier were blocked from using
std::launderdue to internal compiler errors.
#5968 -
Internals destructors were updated to check the owning interpreter before clearing Python objects.
#5965 -
Internals shutdown handling was refined in two iterations before release: an initial finalization-time cleanup was followed by a safety adjustment to avoid late-shutdown
py::castsegfaults.
#5958
#5972 -
Fixed ambiguous
str(handle)construction forobject-derived types likekwargsordictby templatizing the constructor with SFINAE.
#5949 -
Fixed concurrency consistency for
internals_pp_managerunder multiple-interpreters.
#5947 -
Fixed MSVC LNK2001 in C++20 builds when /GL (whole program optimization) is enabled.
#5939 -
Added per-interpreter storage for
gil_safe_call_once_and_storeto make it safe under multi-interpreters.
#5933 -
A workaround for a GCC
-Warray-boundsfalse positive inargument_vectorwas added.
#5908 -
Corrected a mistake where support for
__index__was added, but the type hints did not reflect acceptance ofSupportsIndexobjects. Also fixed a long-standing bug: the complex-caster did not accept__index__inconvertmode.
#5891 -
Fixed
*args/**kwargsreturn types. Added type hinting topy::make_tuple.
#5881 -
Fixed compiler error in
type_caster_genericwhen casting aTimplicitly convertible fromT*.
#5873 -
Updated
py::native_enumbindings to unregister enum types on destruction, preventing a use-after-free when returning a destroyed enum instance.
#5871 -
Fixed undefined behavior that occurred when importing pybind11 modules from non-main threads created by C API modules or embedded python interpreters.
#5870 -
Fixed dangling pointer in
internals::registered_types_cpp_fast.
#5867 -
Added support for
std::shared_ptr<T>when loading module-local or conduit types from other modules.
#5862 -
Fixed thread-safety issues if types were concurrently registered while
get_local_type_info()was called in free threaded Python.
#5856 -
Fixed py::float_ casting and py::int_ and py::float_ type hints.
#5839 -
Fixed two
smart_holderbugs inshared_ptrandunique_ptradoption with multiple/virtual inheritance: -
Constrained
accessor::operator=templates to avoid obscuring special members.
#5832 -
Fixed crash that can occur when finalizers acquire and release the GIL.
#5828 -
Fixed compiler detection in
pybind11/detail/pybind11_namespace_macros.hfor clang-cl on Windows, to address warning suppression macros.
#5816 -
Fixed compatibility with CMake policy CMP0190 by not always requiring a Python interpreter when cross-compiling.
#5829 -
Added a static assertion to disallow
keep_aliveandcall_guardon properties.
#5533
Internal:
-
CMake policy limit was set to 4.1.
#5944 -
Improved performance of function calls between Python and C++ by switching to the "vectorcall" calling protocol.
#5948 -
Many C-style casts were replaced with C++-style casts.
#5930 -
Added
cast_sourcesabstraction totype_caster_generic.
#5866 -
Improved the performance of from-Python conversions of legacy pybind11 enum objects bound by
py::enum_.
#5860 -
Reduced size overhead by deduplicating functions' readable signatures and type information.
#5857 -
Used new Python 3.14 C APIs when available.
#5854 -
Improved performance of function dispatch and type casting by porting two-level type info lookup strategy from nanobind.
#5842 -
Updated
.gitignoreto exclude__pycache__/directories.
#5838 -
Changed internals to use
thread_localinstead ofthread_specific_storagefor increased performance.
#5834 -
Reduced function call overhead by using thread_local for loader_life_support when possible.
#5830 -
Removed heap allocation for the C++ argument array when dispatching functions with 6 or fewer arguments.
#5824
Documentation:
-
Fixed docstring for
long doublecomplex types to usenumpy.clongdoubleinstead of the deprecatednumpy.longcomplex(removed in NumPy 2.0).
#5952 -
The "Supported compilers" and "Supported platforms" sections in the main
README.rstwere replaced with a new "Supported platforms & compilers" section that points to the CI test matrix as the living source of truth.
#5910 -
Fixed documentation formatting.
#5903 -
Updated upgrade notes for
py::native_enum.
#5885 -
Clarified in the docs to what extent bindings are global.
#5859
Tests:
-
Fixed deadlock in a free-threading test by releasing the GIL while waiting on synchronization.
#5973 -
Calls to
env.deprecated_call()were replaced with direct calls topytest.deprecated_call().
#5893 -
Updated pytest configuration to use
log_levelinstead oflog_cli_level.
#5890
CI:
-
Added CI tests for windows-11-arm with clang/MSVC (currently python 3.13), windows-11-arm with clang/mingw (currently python 3.12).
#5932 -
These clang-tidy rules were added:
readability-redundant-casting,readability-redundant-inline-specifier,readability-redundant-member-init
#5924 -
Replaced deprecated macos-13 runners with macos-15-intel in CI.
#5916 -
Restored
runs-on: windows-latestin CI.
#5835