PyNWB provides a high-level Python API for reading and writing NWB formatted HDF5 files. This section will provide a broad overview of the functionality provided for reading and writing neurophysiology data into NWB files.

Software Architecture

PyNWB Software Architecture

Overview of the high-level software architecture of PyNWB.

NWB Format

The NWB Format is built around two concepts: TimeSeries and Modules.

TimeSeries are objects for storing time series data, and Modules are objects for storing and grouping analyses. The following sections describe these classes in further detail.


NWB files are represented in PyNWB with NWBFile objects. NWBFile objects provide functionality for creating TimeSeries datasets and Modules, as well as functionality for storing experimental metadata and other metadata related to data provenance.


TimeSeries objects store time series data. These Python objects correspond to TimeSeries specifications provided by the NWB format specification. Like the NWB specification, TimeSeries Python objects follow an object-oriented inheritance pattern. For example, the class TimeSeries serves as the base class for all other TimeSeries types.

The following TimeSeries objects are provided by the API and NWB specification:


Modules are objects that group together common analyses done during processing of data. Module objects are unique collections of analysis results. To standardize the storage of common analyses, NWB provides the concept of an Interface, where the output of common analyses are represented as objects that extend the Interface class. In most cases, you will not need to interact with the Interface class directly. More commonly, you will be creating instances of classes that extend this class. For example, a common analysis step for spike data (represented in NWB as a SpikeEventSeries object) is spike clustering. In NWB, the result of kind of analysis will be reprsented with a Clustering object.

The following Interface objects are provided by the API and NWB specification: