=====================================================
 Cross-platform libraries and tools for NVMe devices
=====================================================

**xNVMe** provides the means to program and interact with NVMe devices from
user space.

The foundation of **xNVMe** is ``libxnvme``, a user space library for working
with NVMe devices. It provides a **C API** for memory management, that is, for
allocating physical / DMA transferable memory when needed. An NVMe command
interface allowing you to submit and complete NVMe commands in a synchronous as
well as an asynchronous manner.

Convenience functions are built-in for common operations and retrieving
parameters essential for I/O applications. Such as your maximum data transfer
size and introducing the concept of a device geometry.

The foundation is as such fairly low-level, sitting right on top of a NVMe
driver. The actual NVMe driver being used by ``libxnvme`` is re-targetable and
can be any one of the GNU/Linux Kernel NVMe driver via ``libaio``, ``IOCTLs``,
and ``io_uring``, the SPDK NVMe driver, or your own custom NVMe driver.

As such, ``libxnvme`` provides a unifying ``C API`` for NVMe tool builders,
application developers, and for anyone wanting their host-defined software to
run on more than a single platform.

On top of ``libxnvme`` a suite of tools and libraries are provided, that is, a
command-line interface for managing your NVMe device named ``xnvme``, and
``lblk`` for commands specific to NVM Namespaces.

For the Zoned Command Set a command-line interface designed specifically for
convenient management of Zoned NVMe devices named ``zoned`` and a C API
``libxnvme_znd.h``.

To evaluate the performance of abstractions introduced by ``xNVMe`` a Fio IO
engine is provided, supporting **conventional** NVMe devices, as well as
**Zoned** devices.

Jump right into the :ref:`sec-getting-started` and with the basics in place you
can explore the :ref:`sec-tools` and the :ref:`sec-c-api`.

Contents:

.. toctree::
   :maxdepth: 2
   :includehidden:

   getting_started/index.rst
   tools/index.rst
   capis/index.rst
   examples/index.rst
   tutorial/index.rst
   python/index.rst
   contributing/index.rst
   compatibility/index.rst
   ci/index.rst

Indices and tables
==================

* :ref:`genindex`
* :ref:`modindex`
* :ref:`search`
