Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
155 changes: 155 additions & 0 deletions docs/changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,161 @@ Changes will be added here periodically from the "Suggested changelog
entry" block in pull request descriptions.


## Version 3.0.2 (release date TBD)

Bug fixes:

- MSVC 19.16 and earlier were blocked from using `std::launder` due to internal compiler errors.
[#5968](https://github.com/pybind/pybind11/pull/5968)

- Internals destructors were updated to check the owning interpreter before clearing Python objects.
[#5965](https://github.com/pybind/pybind11/pull/5965)

- pybind11 internals were updated to be deallocated during (sub-)interpreter shutdown to avoid memory leaks.
[#5958](https://github.com/pybind/pybind11/pull/5958)

- Fixed ambiguous `str(handle)` construction for `object`-derived types like `kwargs` or `dict` by templatizing the constructor with SFINAE.
[#5949](https://github.com/pybind/pybind11/pull/5949)

- Fixed concurrency consistency for `internals_pp_manager` under multiple-interpreters.
[#5947](https://github.com/pybind/pybind11/pull/5947)

- Fixed MSVC LNK2001 in C++20 builds when /GL (whole program optimization) is enabled.
[#5939](https://github.com/pybind/pybind11/pull/5939)

- Added per-interpreter storage for `gil_safe_call_once_and_store` to make it safe under multi-interpreters.
[#5933](https://github.com/pybind/pybind11/pull/5933)

- A workaround for a GCC `-Warray-bounds` false positive in `argument_vector` was added.
[#5908](https://github.com/pybind/pybind11/pull/5908)

- Corrected a mistake where support for `__index__` was added, but the type hints did not reflect acceptance of `SupportsIndex` objects. Also fixed a long-standing bug: the complex-caster did not accept `__index__` in `convert` mode.
[#5891](https://github.com/pybind/pybind11/pull/5891)

- Fixed `*args/**kwargs` return types. Added type hinting to `py::make_tuple`.
[#5881](https://github.com/pybind/pybind11/pull/5881)

- Fixed compiler error in `type_caster_generic` when casting a `T` implicitly convertible from `T*`.
[#5873](https://github.com/pybind/pybind11/pull/5873)

- Updated `py::native_enum` bindings to unregister enum types on destruction, preventing a use-after-free when returning a destroyed enum instance.
[#5871](https://github.com/pybind/pybind11/pull/5871)

- Fixed undefined behavior that occurred when importing pybind11 modules from non-main threads created by C API modules or embedded python interpreters.
[#5870](https://github.com/pybind/pybind11/pull/5870)

- Fixed dangling pointer in `internals::registered_types_cpp_fast`.
[#5867](https://github.com/pybind/pybind11/pull/5867)

- Added support for `std::shared_ptr<T>` when loading module-local or conduit types from other modules.
[#5862](https://github.com/pybind/pybind11/pull/5862)

- Fixed thread-safety issues if types were concurrently registered while `get_local_type_info()` was called in free threaded Python.
[#5856](https://github.com/pybind/pybind11/pull/5856)

- Fixed py::float_ casting and py::int_ and py::float_ type hints.
[#5839](https://github.com/pybind/pybind11/pull/5839)

- Fixed two `smart_holder` bugs in `shared_ptr` and `unique_ptr` adoption with multiple/virtual inheritance:
- `shared_ptr` to-Python caster was updated to register the correct subobject pointer (fixes #5786).
- `unique_ptr` adoption was updated to own the proper object start while aliasing subobject pointers for registration, which fixed MSVC crashes during destruction.
[#5836](https://github.com/pybind/pybind11/pull/5836)

- Constrained `accessor::operator=` templates to avoid obscuring special members.
[#5832](https://github.com/pybind/pybind11/pull/5832)

- Fixed crash that can occur when finalizers acquire and release the GIL.
[#5828](https://github.com/pybind/pybind11/pull/5828)

- Fixed compiler detection in `pybind11/detail/pybind11_namespace_macros.h` for clang-cl on Windows, to address warning suppression macros.
[#5816](https://github.com/pybind/pybind11/pull/5816)

- Fixed compatibility with CMake policy CMP0190 by not always requiring a Python interpreter when cross-compiling.
[#5829](https://github.com/pybind/pybind11/pull/5829)

- Added a static assertion to disallow `keep_alive` and `call_guard` on properties.
[#5533](https://github.com/pybind/pybind11/pull/5533)

Internal:

- CMake policy limit was set to 4.1.
[#5944](https://github.com/pybind/pybind11/pull/5944)

- Improved performance of function calls between Python and C++ by switching to the "vectorcall" calling protocol.
[#5948](https://github.com/pybind/pybind11/pull/5948)

- Many C-style casts were replaced with C++-style casts.
[#5930](https://github.com/pybind/pybind11/pull/5930)

- Added `cast_sources` abstraction to `type_caster_generic`.
[#5866](https://github.com/pybind/pybind11/pull/5866)

- Improved the performance of from-Python conversions of legacy pybind11 enum objects bound by `py::enum_`.
[#5860](https://github.com/pybind/pybind11/pull/5860)

- Reduced size overhead by deduplicating functions' readable signatures and type information.
[#5857](https://github.com/pybind/pybind11/pull/5857)

- Used new Python 3.14 C APIs when available.
[#5854](https://github.com/pybind/pybind11/pull/5854)

- Improved performance of function dispatch and type casting by porting two-level type info lookup strategy from nanobind.
[#5842](https://github.com/pybind/pybind11/pull/5842)

- Updated `.gitignore` to exclude `__pycache__/` directories.
[#5838](https://github.com/pybind/pybind11/pull/5838)

- Changed internals to use `thread_local` instead of `thread_specific_storage` for increased performance.
[#5834](https://github.com/pybind/pybind11/pull/5834)

- Reduced function call overhead by using thread_local for loader_life_support when possible.
[#5830](https://github.com/pybind/pybind11/pull/5830)

- Removed heap allocation for the C++ argument array when dispatching functions with 6 or fewer arguments.
[#5824](https://github.com/pybind/pybind11/pull/5824)


Documentation:

- Fixed docstring for `long double` complex types to use `numpy.clongdouble` instead of the deprecated `numpy.longcomplex` (removed in NumPy 2.0).
[#5952](https://github.com/pybind/pybind11/pull/5952)

- The "Supported compilers" and "Supported platforms" sections in the main `README.rst` were replaced with a new "Supported platforms & compilers" section that points to the CI test matrix as the living source of truth.
[#5910](https://github.com/pybind/pybind11/pull/5910)

- Fixed documentation formatting.
[#5903](https://github.com/pybind/pybind11/pull/5903)

- Updated upgrade notes for `py::native_enum`.
[#5885](https://github.com/pybind/pybind11/pull/5885)

- Clarified in the docs to what extent bindings are global.
[#5859](https://github.com/pybind/pybind11/pull/5859)


Tests:

- Calls to `env.deprecated_call()` were replaced with direct calls to `pytest.deprecated_call()`.
[#5893](https://github.com/pybind/pybind11/pull/5893)

- Updated pytest configuration to use `log_level` instead of `log_cli_level`.
[#5890](https://github.com/pybind/pybind11/pull/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](https://github.com/pybind/pybind11/pull/5932)

- These clang-tidy rules were added: `readability-redundant-casting`, `readability-redundant-inline-specifier`, `readability-redundant-member-init`
[#5924](https://github.com/pybind/pybind11/pull/5924)

- Replaced deprecated macos-13 runners with macos-15-intel in CI.
[#5916](https://github.com/pybind/pybind11/pull/5916)

- Restored `runs-on: windows-latest` in CI.
[#5835](https://github.com/pybind/pybind11/pull/5835)

## Version 3.0.1 (August 22, 2025)

Bug fixes:
Expand Down