Skip to main content

ProjectStatus Version PythonStatus License PythonVersions CxxStatus

The Advanced Recording Format arf is an open standard for storing data from neuronal, acoustic, and behavioral experiments in a portable, high-performance, archival format. The goal is to enable labs to share data and tools, and to allow valuable data to be accessed and analyzed for many years in the future.

arf is built on the the HDF5 format, and all arf files are accessible through standard HDF5 tools, including interfaces to HDF5 written for other languages (e.g. MATLAB, Python, etc). arf comprises a set of specifications on how different kinds of data are stored. The organization of arf files is based around the concept of an entry, a collection of data channels associated with a particular point in time. An entry might contain one or more of the following:

  • raw extracellular neural signals recorded from a multichannel probe

  • spike times extracted from neural data

  • acoustic signals from a microphone

  • times when an animal interacted with a behavioral apparatus

  • the times when a real-time signal analyzer detected vocalization

Entries and datasets have metadata attributes describing how the data were collected. Datasets and entries retain these attributes when copied or moved between arf files, helping to prevent data from becoming orphaned and uninterpretable.

This repository contains:

  • The specification for arf (in specification.md). This is also hosted at https://meliza.org/spec:1/arf/.

  • A fast, type-safe C++ interface for reading and writing arf files

  • A python interface for reading and writing arf files

You don’t need the python or C++ libraries to read arf files; they are just standard HDF5 files that can be accessed with standard tools and libraries, like h5py (see below).

installation

ARF files require HDF5>=1.8 (http://www.hdfgroup.org/HDF5).

The python interface requires Python 3.11 or greater and h5py>=3.11. The last version of this package to support Python 2 was 2.5.1. The last version to support h5py 2 was 2.6.7.

The C++ interface needs only HDF5 and a C++11 compiler; it has no other dependencies. If writing multithreaded code, HDF5 needs to be compiled with --enable-threadsafe. The interface is header-only and does not need to be compiled. The recommended approach is to vendor a tagged version of the project and include the headers.

version information

The specification and implementations provided in this project use a form of semantic versioning (http://semver.org). Specifications receive a major and minor version number. Changes to minor version numbers must be backwards compatible (i.e., only added requirements). The current released version of the ARF specification is 2.2.

Implementation versions evolve independently from the specification. The current versions of the python and C++ packages will write ARF files using the 2.2 spec but can read any 2.x ARF file.

There was no public release of arf prior to 2.0.

access ARF files with HDF5 tools

The structure of an arf file can be explored using the h5ls tool. For example, to list entries:

$ h5ls file.arf
test_0001                Group
test_0002                Group
test_0003                Group
test_0004                Group

Each entry appears as a Group. To list the contents of an entry, use path notation:

$ h5ls file.arf/test_0001
pcm                      Dataset {609914}

This shows that the data in test_0001 is stored in a single node, pcm}, with 609914 data points. Typically each channel will have its own dataset.

The h5dump command can be used to output data in binary format. See the HDF5 documentation for details on how to structure the output. For example, to extract sampled data to a 16-bit little-endian file (i.e., PCM format):

h5dump -d /test_0001/pcm -b LE -o test_0001.pcm file.arf

contributing

ARF has been used by the Meliza lab for auditory systems neuroscience since 2013 and by Dan Meliza since he was a postdoc in 2006. We continue to maintain it, and we welcome comments and contributions from neuroscientists and behavioral biologists interested in using it. We’re particularly interested in use cases that don’t fit the current specification. Please post issues or contact Dan Meliza (dan at meliza.org) directly.

license

The reference implementations are released under the BSD 3-Clause License; see COPYING. The Specification itself (specification.md) is separately licensed under the GNU General Public License version 3 or later.

Release files for arf 3.0.0

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

Source distribution (sdist)

Source distribution for arf 3.0.0
File Size Uploaded
arf-3.0.0.tar.gz 14.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for arf 3.0.0
File Interpreter ABI Platform
arf-3.0.0-py3-none-any.whl Python 3 none any Details

Total release size: 31.2 kB

Release files / arf-3.0.0.tar.gz

Download URL arf-3.0.0.tar.gz
Size 14.1 kB
Tags Source
SHA-256 checksum
How to use checksums
36a021e70d998a1421a0cfc14f07519801bcaa6ad4a9846852c04a613607aaea
BLAKE2b-256 checksum
How to use checksums
32f22467318a68b474d9f1bd7af857dcee67b5df4c04c014878d1ed9fd9cccf3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Aug 8, 2026.

Transparency log

Release files / arf-3.0.0-py3-none-any.whl

Download URL arf-3.0.0-py3-none-any.whl
Size 17.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
e836c179125741816e88a105b4086f4143ebb28e0122447133151dfdfeaa5d2a
BLAKE2b-256 checksum
How to use checksums
4cadf8b5ec9e581fe1ba21f131dbf338e0d201243ef1cad5c32eb79f12aa62e7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Aug 8, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

3.0.0 This release

2 release files

2.7.4

2 release files

2.7.3

2 release files

2.7.2

2 release files

2.7.1

2 release files

2.7.0

2 release files

2.6.7

2 release files

2.6.6

2 release files

2.6.4

2 release files

2.6.3

1 release file

2.6.2

2 release files

2.6.1

2 release files

2.6.0

2 release files

2.5.1

2 release files

2.5.0

2 release files

2.3.0

2 release files

2.2.2

2 release files

2.2.1

4 release files

2.2.0

1 release file

2.1.0

1 release file

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