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 8+, GCC 8+, MSVC2019+, and the CUDA NVCC compiler are officially supported. Others (MinGW, Cygwin, Intel, ..) 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