Update pybind11 requirement from >=2.10.0 to >=3.0.4#353
Conversation
🤖 Cursor Dependency AnalysisSupply-Chain Malware ReviewChecking how this repo declares and uses pybind11 to judge whether the change surface matches expectations. Verdict: benign Why this reads as safe
Practical takeaway: Use the verdict above together with CI green and a quick glance that the GitHub PR is only the Compatibility AnalysisExploring the repo for pybind11 usage and cross-checking with upstream changes. 1) Where
|
| Location | Role |
|---|---|
pyproject.toml |
PEP 517 [build-system] requires = [..., "pybind11>=3.0.4"] |
src/python_bindings/fastvdf.cpp |
Single extension: PYBIND11_MODULE, py::gil_scoped_release, py::bytes / py::tuple, m.def(...) lambdas only; includes pybind11/pybind11.h only. |
src/CMakeLists.txt |
Python + python -m pybind11 --cmakedir, find_package(pybind11 CONFIG), pybind11_add_module; FetchContent fallback clones tag v2.13.6. |
README.md / .github/workflows/codeql-analysis.yml |
pip install / pip install ... pybind11 (unpinned pip resolution). |
No vendored bindings under extra paths beyond what CMake lists; .flake8 excludes ./src/lib/pybind11 (if present).
2) Overlap with 3.0.4 / listed upstream changes
- Eigen / CMake Eigen3: Not used here — no intersection.
scoped_ostream_redirect/iostream: Not included or used — no intersection.py::dynamic_attr(): Not used — no intersection.std::shared_ptr/reference_internalcasting: Bindings exposebool,string/byte payloads, tuples — noshared_ptrpybind wrappers — no intersection.
Upstream files touched (cast.h, class.h, common.h, type_caster_base.h, iostream.h) match general internals; your code does not call those APIs directly.
3) Risks / unknowns
- CMake vs declared minimum:
FetchContentstill pinsv2.13.6. Builds that rely on that path (whenfind_package(pybind11)fails) can still use 2.x, diverging from>=3.0.4and from “what CI usually gets” via pip. Worth aligning in a follow-up (not strictly part of Dependabot’s one-line bump). - Major 2→3: Residual risk of CMake/toolchain or Python ABI assumptions; your surface API usage is minimal, so source-level breakage is unlikely; CI green on the PR is the main signal.
- Consumers on very old pinned envs: Stricter floor may affect offline / legacy builds that cannot install pybind11 3 — project policy question.
4) Recommendation
Merge-with-caveats: Safe to merge for typical pip/PEP‑517 and normal dev flows given usage; explicit caveat: bump or reconcile GIT_TAG in src/CMakeLists.txt FetchContent fallback (and optionally document minimum in README) so non-pip CMake paths don’t silently stay on 2.13.6.
Malware Scan Summary
- Status: warn
- Warn only mode:
true - Changed upstream files scanned:
23 - Resolution strategy:
commit_list - Changed node/vendor paths:
0 - Changed lockfiles:
0 - Resolved refs: from=
n/ato=n/a - Unicode findings (post-allowlist):
0 - Confusable findings (post-allowlist):
0 - IOC findings (post-allowlist):
0 - Heuristic findings (post-allowlist):
12
Top findings
docs/changelog.md:2086shell_process_spawn ::- py::exec, py::eval, and py::eval_file now add the builtinsdocs/changelog.md:2088shell_process_spawn ::matching exec and eval in pure Python.docs/changelog.md:2774shell_process_spawn ::- Added py::exec() as a shortcut for py::eval<py::eval_statements>().github/workflows/ci.yml:0workflow_path_touch ::path-touch.github/workflows/configure.yml:0workflow_path_touch ::path-touch.github/workflows/nightlies.yml:0workflow_path_touch ::path-touch.github/workflows/pip.yml:0workflow_path_touch ::path-touch.github/workflows/reusable-standard.yml:0workflow_path_touch ::path-touch.github/workflows/tests-cibw.yml:0workflow_path_touch ::path-touch.github/workflows/upstream.yml:0workflow_path_touch ::path-touchpybind11:0ghost_version_or_missing_tag ::>=3.0.4pybind11:0maintainer_drift ::>=2.10.0->>=3.0.4
|
@dependabot rebase |
Updates the requirements on [pybind11](https://github.com/pybind/pybind11) to permit the latest version. - [Release notes](https://github.com/pybind/pybind11/releases) - [Changelog](https://github.com/pybind/pybind11/blob/master/docs/changelog.md) - [Commits](pybind/pybind11@v2.10.0...v3.0.4) --- updated-dependencies: - dependency-name: pybind11 dependency-version: 3.0.4 dependency-type: direct:development ... Signed-off-by: dependabot[bot] <support@github.com>
85193c4 to
8cbff14
Compare
🤖 Cursor Dependency AnalysisSupply-Chain Malware ReviewVerifying what this repository's dependency change touches versus the malware scanner's upstream comparison. Verdict: benign Why this reads as a normal dependency bump, not compromise
Actionable note (not malware): Compatibility AnalysisTracing pybind11 usage and comparing it to upstream changes. 1) Where
|
| Area | Role |
|---|---|
pyproject.toml |
[build-system] requires pulls pybind11 during isolated builds (workspace already has >=3.0.4). |
src/CMakeLists.txt |
PYBIND11_FINDPYTHON ON, resolves CMake dir via python -m pybind11 --cmakedir, find_package(pybind11 CONFIG), optional FetchContent at v3.0.4, then pybind11_add_module(chiavdf …). |
src/python_bindings/fastvdf.cpp |
Only C++ usage: extension module and m.def lambdas. |
README.md / .github/workflows/codeql-analysis.yml |
Document / install pybind11 for setup (not binding logic). |
.flake8 excludes ./src/lib/pybind11; there is no src/lib/pybind11 tree in this checkout (likely stale or optional).
2) Overlap with APIs touched in 3.0.4 (notes / changed headers)
fastvdf.cpp uses PYBIND11_MODULE, py::bytes, py::tuple / py::make_tuple, py::gil_scoped_release, and plain m.def lambdas returning primitives / py::bytes.
It does not use:
- Eigen /
Eigen3CMake integration scoped_ostream_redirect/iostream.hpy::dynamic_attr()py::class_,std::shared_ptr, orreference_internal
So there is no meaningful intersection with the specific fixes called out for 3.0.4 (or the listed commits touching cast.h, class.h, common.h, type_caster_base.h, iostream.h) for this repo’s binding surface.
3) Risks / unknowns
- Constraint change:
>=2.10.0→>=3.0.4drops pybind11 2.x for PEP 517 builds; anyone scripting an old pybind11 pin will need to update (aligned with CMake FetchContent already atv3.0.4). - pybind11 2→3 in general: Major bump can affect exotic APIs; this project’s usage is narrow, so practical risk is low but not zero without a full ABI/API audit.
- Validation: Rely on CI / cibuildwheel and local
pip install -e .after merge; no substitute for green builds across your Python/OS matrix.
4) Recommendation
Merge if CI is green (especially wheel and native builds). Optional note for reviewers: call out that source builds now require pybind11 3.x, consistent with CMake’s v3.0.4 fetch fallback—consider aligning README/CodeQL pip install pybind11 guidance with that minimum if you care about reproducibility.
Malware Scan Summary
- Status: warn
- Warn only mode:
true - Changed upstream files scanned:
23 - Resolution strategy:
commit_list - Changed node/vendor paths:
0 - Changed lockfiles:
0 - Resolved refs: from=
n/ato=n/a - Unicode findings (post-allowlist):
0 - Confusable findings (post-allowlist):
0 - IOC findings (post-allowlist):
0 - Heuristic findings (post-allowlist):
12
Top findings
docs/changelog.md:2086shell_process_spawn ::- py::exec, py::eval, and py::eval_file now add the builtinsdocs/changelog.md:2088shell_process_spawn ::matching exec and eval in pure Python.docs/changelog.md:2774shell_process_spawn ::- Added py::exec() as a shortcut for py::eval<py::eval_statements>().github/workflows/ci.yml:0workflow_path_touch ::path-touch.github/workflows/configure.yml:0workflow_path_touch ::path-touch.github/workflows/nightlies.yml:0workflow_path_touch ::path-touch.github/workflows/pip.yml:0workflow_path_touch ::path-touch.github/workflows/reusable-standard.yml:0workflow_path_touch ::path-touch.github/workflows/tests-cibw.yml:0workflow_path_touch ::path-touch.github/workflows/upstream.yml:0workflow_path_touch ::path-touchpybind11:0ghost_version_or_missing_tag ::>=3.0.4pybind11:0maintainer_drift ::>=2.10.0->>=3.0.4
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 8cbff14. Configure here.
Keep the CMake fallback consistent with the declared pybind11>=3.0.4 build requirement to avoid silently pulling ABI-incompatible 2.x. Co-authored-by: Cursor <cursoragent@cursor.com>

Updates the requirements on pybind11 to permit the latest version.
Release notes
Sourced from pybind11's releases.
Changelog
Sourced from pybind11's changelog.
... (truncated)
Commits
d03662fbuild: support Eigen 5 (#6036)3d8aabcBump version from v3.0.3 → v3.0.42c1b391[skip ci] docs: add v3.0.4 changelog updates. (#6041)804e2c1fix: segfault when movingscoped_ostream_redirect(#6033)a15579cci: bump setup-uv to maintained tag scheme (#6035)e2fdf43Handle result from PyObject_VisitManagedDict (#6032)98003e2chore(deps): update pre-commit hooks (#6029)ab392bdfix: avoid copy constructor instantiation in shared_ptr fallback cast (#6028)ad5bc9echore(deps): bump the actions group with 2 updates (#6027)1b49908docs: add v3.0.3and v3.1.0changelog updates. (#6023)Note
Medium Risk
Medium risk because it upgrades the C++/Python binding dependency and the CMake FetchContent pin, which can affect native build and ABI/compatibility across platforms.
Overview
Updates the project’s pybind11 dependency to
>=3.0.4inpyproject.toml.Also updates the CMake fallback that fetches pybind11 to pin
GIT_TAG v3.0.4(fromv2.13.6) when an installed pybind11 package is not found.Reviewed by Cursor Bugbot for commit 825cdb2. Bugbot is set up for automated code reviews on this repo. Configure here.