MCPcopy Index your code
hub / github.com/wjakob/nanobind

github.com/wjakob/nanobind @v2.13.0

Chat with this repo
repository ↗ · DeepWiki ↗ · release v2.13.0 ↗ · + Follow
2,175 symbols 5,508 edges 147 files 210 documented · 10% updated 2d ago★ 3,62011 open issues

Browse by type

Functions 1,594 Types & classes 580 Endpoints 1
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

nanobind: tiny and efficient C++/Python bindings

Documentation Continuous Integration

  <img alt="nanobind logo" width="800" src="https://github.com/wjakob/nanobind/raw/master/docs/images/logo.jpg">

nanobind is a small binding library that exposes C++ types in Python and vice versa. It is reminiscent of Boost.Python and pybind11 and uses near-identical syntax. In contrast to these existing tools, nanobind is more efficient: bindings compile in a shorter amount of time, produce smaller binaries, and have better runtime performance.

More concretely, benchmarks show up to ~4× faster compile time, ~5× smaller binaries, and ~10× lower runtime overheads compared to pybind11. nanobind also outperforms Cython in important metrics (3-12× binary size reduction, 1.6-4× compilation time reduction, similar runtime performance).

Testimonials

A selection of testimonials from projects that migrated from pybind11 to nanobind.

**IREE** · [LLVM Discourse](https://discourse.llvm.org/t/nanobind-for-mlir-python-bindings/83511/5) > *"IREE and its derivatives switched 1.5 years ago. It has been one of the single best dep decisions I've made. Not only is it much-much faster to compile, it produces smaller binaries and has a much more lean interface to the underlying Python machinery that all adds up to significant performance improvements. Worked exactly like it said on the tin."* — **Stella Laurenzo**, Google
**XLA/MLIR** · [GitHub PR](https://github.com/llvm/llvm-project/pull/118583) > *"For a complicated Google-internal LLM model in JAX, this change improves the MLIR lowering time by around 5s (out of around 30s), which is a significant speedup for simply switching binding frameworks."* — **Peter Hawkins**, Google
**Apple MLX** · [X](https://x.com/awnihannun/status/1890495434021326974) > *"MLX uses nanobind to bind C++ to Python. It's a critical piece of MLX infra and is why running Python code is nearly the same speed as running C++ directly. Also makes it super easy to move arrays between frameworks."* — **Awni Hannun**, Apple
**JAX** · [GitHub](https://github.com/jax-ml/jax/commit/70b7d501816c6e9f131a0a8b3e4a527e53eeebd7) > *"nanobind has a number of [advantages](https://nanobind.readthedocs.io/en/latest/why.html), notably speed of compilation and dispatch, but the main reason to do this for these bindings is because nanobind can target the Python Stable ABI starting with Python 3.12. This means that we will not need to ship per-Python version CUDA plugins starting with Python 3.12."* — **Peter Hawkins**, Google
**FEniCS / DOLFINx** · [GitHub](https://github.com/FEniCS/dolfinx/pull/2820) > *"nanobind is smaller than pybind11, the wrappers build faster and it has significantly improved support for wrapping multi-dimensional arrays, which we use heavily. The nanobind docs are easier to follow on the low-level details, which makes understanding the memory management in the wrapper layer easier."* — **Garth N. Wells**
**PennyLane** · [Release notes](https://docs.pennylane.ai/projects/catalyst/en/stable/dev/release_notes.html) > *"Nanobind has been developed as a natural successor to the pybind11 library and offers a number of advantages like its ability to target Python's Stable ABI."*

Documentation

Please see the following links for tutorial and reference documentation in HTML and PDF formats.

License and attribution

All material in this repository is licensed under a three-clause BSD license.

Please use the following BibTeX template to cite nanobind in scientific discourse:

@misc{nanobind,
   author = {Wenzel Jakob},
   year = {2022},
   note = {https://github.com/wjakob/nanobind},
   title = {nanobind: tiny and efficient C++/Python bindings}
}

The nanobind logo was designed by AndoTwin Studio (high-resolution download: light, dark).

Core symbols most depended-on inside this repo

Shape

Function 952
Method 642
Class 555
Enum 25
Route 1

Languages

C++70%
Python30%

Modules by API surface

include/nanobind/nb_types.h149 symbols
tests/test_classes.cpp137 symbols
tests/test_stl.py108 symbols
tests/test_classes.py103 symbols
tests/test_ndarray.py83 symbols
src/common.cpp80 symbols
tests/test_functions.py76 symbols
include/nanobind/nb_class.h73 symbols
include/nanobind/ndarray.h67 symbols
src/nb_type.cpp64 symbols
src/nb_internals.h58 symbols
include/nanobind/nb_attr.h57 symbols

For agents

$ claude mcp add nanobind \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page