Skip to main content

libnvme

MesonBuild PyBuild PyPI PyPI - Wheel GitHub codecov Read the Docs

This is the libnvme development C library. libnvme provides type definitions for NVMe specification structures, enumerations, and bit fields, helper functions to construct, dispatch, and decode commands and payloads, and utilities to connect, scan, and manage nvme devices on a Linux system.

The public specification is the authority to resolve any protocol discrepancies with this library. For more info on NVM Express, please see:

https://nvmexpress.org

Subscribe to linux-nvme@lists.infradead.org for linux-nvme related discussions and development for both kernel and userspace. The list is archived here:

https://lists.infradead.org/mailman/listinfo/linux-nvme

License

Except where otherwise stated, all software contained within this repo is currently licensed LGPL-2.1-or-later, see COPYING for more information.

Keith Busch 2020-02-06


Dependency

libnvme depends on minimum Linux kernel version v4.15, which introduced the /sys/class/nvme-subsystem.

Build from source

Prerequisite

A minimal build depends on a set of build tools

  • gcc
  • ninja
  • meson

Not all feature will be present with such configuration, e.g. the fabrics part of the library wont support authentication or TLS over the nvme-tcp transport.

To enable the optional features install following libraries

`/etc/nvme/config.json`` support:

  • json-c (recommend)

Authentication and TLS over nvme-tcp:

  • openssl
  • keyutils

End point discovery for MI

  • libdbus

Python bindings

  • Python 3 interpreter
  • Python 3 development libraries

Minimal on embedded builds

The reference implemention of the Meson specification is in Python 3. Installing or porting this dependency is not really feasible for embedded project. Though there are two project which implement the Ninja and the Meson API in pure C99

The CI build helper script scripts/build.sh is able to setup and build this project in a minimal setup using samurai and muon and thus only depending on:

  • gcc
  • make
  • git

scripts/build.sh -m muon

To compile libnvme

To configure the project:

meson setup .build

Which will default to build a shared library. To configure for static libraries call

meson setup --default-library=static .build

One nice feature of meson is that it doesn't mix build artifacts (e.g. *.o, *.so, etc.) with source code. In the above example, ".build" is the name of the directory where the build configuration as well as all the build artifacts will be saved. This directory can be named anything as long as it's not an existing source directory. To completely "clean" all the build artifacts, one need only delete the .build directory.

To compile:

meson compile -C .build

To install libnvme

To install libnvme:

meson install -C .build

To run unit tests

To run unit tests:

meson test -C .build

To purge everything

To completely clean all build artifacts, including the build configuration.

rm -rf .build

Supported build options

A few build options can be specified on the command line when invoking meson.

Option Values [default] Description
version-tag none Overwrite the git version string in the binary
htmldir none Installation directory for the HTML documentation
rstdir none Installation directory for the RST documentation
docs [false], html, man, rst, all Install documentation
docs-build [false], true Enable build documentation
python [auto], enabled, disabled Whether to build the Python bindings. When set to auto, the default, meson will check for the presence of the tools and libraries (e.g. swig) required to build the Python bindings. If found, meson will configure the project to build the Python bindings. If a tool or library is missing, then the Python bindings won't be built. Setting this to enabled, forces the Python bindings to be built. When set to disabled, meson will configure the project to not build the Python bindings.
Example: meson setup .build -Dpython=disabled
openssl [auto], enabled, disabled Enables OpenSSL dependent features (e.g. TLS over TCP), adds build dependency on OpenSSL
libdbus auto, enabled, [disabled] Enables D-Bus dependent features (libnvme-mi: End point discovery), adds build dependency on libdbus
json-c [auto], enabled, disabled (recommended) Enables JSON-C dependend features (e.g. config.json parsing), adds build depdency on json-c
keyutils [auto], enabled, disabled Enables keyutils dependent features (e.g. authentication), adds build dependency on keyutils
liburing auto, enabled, [disabled] Enables liburing dependent features (e.g. get log page by uring cmd), adds build depdency on liburing, very questionable feature. Don't enable it

See the full configuration options with

meson configure .build

Changing the build options from the command-line (i.e. w/o modifying any files)

To configure a build for debugging purposes (i.e. optimization turned off and debug symbols enabled):

meson setup .build --buildtype=debug

To enable address sanitizer (advanced debugging of memory issues):

meson setup .build -Db_sanitize=address

This option adds -fsanitize=address to the gcc options. The tests can then be run normally (meson test -C .build).

Note that when using the sanitize feature, the library libasan.so must be available and must be the very first library loaded when running an executable. If experiencing linking issues, you can ensure that libasan.so gets loaded first with the LD_PRELOAD environment variable as follows:

meson setup .build -Db_sanitize=address && LD_PRELOAD=/lib64/libasan.so.6 ninja -C .build test

It's also possible to enable the undefined behavior sanitizer with -Db_sanitize=undefined. To enable both, use -Db_sanitize=address,undefined.

Release files for libnvme 1.16.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for libnvme 1.16.2
File Size Uploaded
libnvme-1.16.2.tar.gz 860.7 kB Details

Release files / libnvme-1.16.2.tar.gz

Download URL libnvme-1.16.2.tar.gz
Size 860.7 kB
Tags Source
SHA-256 checksum
How to use checksums
16e4537f289de775ec9200b2e088125454a82fc1b0474ee6b8832841553bb8ad
BLAKE2b-256 checksum
How to use checksums
ec62a4c0ef8f03c19da6a7ff52793cc6bfd0cd4417e6105386dc983c3386f0f5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.13

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jun 16, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

1.16.2 This release

1 release file

1.16.1

1 release file

1.16

1 release file

1.15

1 release file

1.14

1 release file

1.11.1

1 release file

1.11

1 release file

1.10

1 release file

1.9

1 release file

1.8

1 release file

1.7

1 release file

1.6

1 release file

1.5

1 release file

1.4

1 release file

1.3

1 release file

1.2

1 release file

1.1

1 release file

1.0

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page