Introduction#

nanobind logo nanobind logo

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).

Documentation formats#

You are reading the HTML version of the documentation. An alternative PDF version is also available.

Dependencies#

nanobinds depends on

  • Python 3.8+ or PyPy 7.3.10+ (the 3.8 and 3.9 PyPy flavors are supported, though there are some limitations).

  • CMake 3.15+.

  • A C++17 compiler: Clang 7+, GCC 8+, and MSVC2019+ are officially supported. Others (MinGW, Intel, NVIDIA, ..) may work as well but will not receive support.

How to cite this project?#

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 version are available here (light) and here (dark).

Table of contents#