qcodes
Python-based data acquisition framework developed by the Copenhagen / Delft / Sydney / Microsoft quantum computing consortium
What it is and what it does
QCoDeS is a Python framework for controlling laboratory instruments and acquiring data from experiments with many adjustable parameters. It was created by a consortium spanning Copenhagen, Delft, Sydney, and Microsoft to support quantum computing research, but its architecture generalizes to any system where a computer needs to set and measure multiple instrument parameters. The framework handles parameter definition, value validation, data storage, and visualization, with particular support for Jupyter notebook workflows.
The package integrates with a substantial ecosystem: it uses h5py and h5netcdf for hierarchical data storage, xarray and dask for multidimensional array handling, matplotlib and pillow for plotting, pyvisa for instrument communication, and several other utilities for metadata, progress tracking, and telemetry. This rich dependency graph means QCoDeS is heavyweight but self-contained—you get a complete measurement stack rather than a bare protocol library.
Use it for:
- Automated parameter sweeps across quantum devices or nanoelectronic samples with live data collection and visualization.
- Laboratory automation for multi-instrument experiments where you need to coordinate voltage, current, temperature, and frequency settings.
- Data acquisition pipelines that require hierarchical storage, metadata tracking, and reproducible experiment logging.
- Interactive measurement notebooks where scientists adjust parameters in real time and inspect results without writing boilerplate control code.
- Instrument driver development and testing using a standardized parameter and command interface.
Worth the install?
AI-flagged interpretation of the facts on this page — verify before relying
QCoDeS is a Python data acquisition and control framework for systems with many computer-controllable degrees of freedom, originally developed for quantum computing experiments but applicable to any instrumentation scenario.
Yes, if you are building a measurement or control system with multiple instruments or parameters. The framework handles the plumbing—parameter validation, data storage, logging—that would otherwise require substantial custom code. The active maintenance, MIT license, and broad dependency set make it production-ready for academic and research labs. Not necessary for simple single-instrument scripts or if you need only raw VISA communication.
Install
qcodes on PyPI
pip
pip install qcodesuv
uv add qcodespoetry
poetry add qcodesInstalling qcodes
Before you install
Low friction installation with a pure-wheel distribution. Active maintenance with a recent release (102 days ago) and ongoing commits. Requires Python 3.11 or later, which may constrain older environments.
License in practice
MIT license permits commercial and private use with minimal restrictions, making it suitable for both academic and industrial instrumentation work.
Quickstart
pip install qcodes
import qcodes
from qcodes import Instrument
# Define an instrument with controllable parameters
class MyDevice(Instrument):
def __init__(self, name, **kwargs):
super().__init__(name, **kwargs)
self.add_parameter('voltage', set_cmd=lambda v: None, get_cmd=lambda: 0)
Requires Python 3.11 or later. Primarily designed for Jupyter notebooks but can run in terminal scripts.
Verify before relying
- Whether the 25 runtime dependencies (including h5py, pyvisa, xarray, dask) are all required for basic usage or if a minimal subset suffices.
- Specific hardware interfaces and instrument drivers supported beyond the framework itself.
- Performance characteristics for large-scale parameter sweeps or high-frequency data collection.
Package facts
| License | MIT (permissive) |
| Python support | supports the current Python release (>=3.11) |
| Install friction | low — pure-Python wheel |
| Runtime dependencies | 25 — broadbean, h5netcdf, h5py, ipywidgets, ipykernel, jsonschema, matplotlib, networkx, numpy, packaging, pandas, pyarrow, pyvisa, ruamel.yaml, tabulate, typing_extensions, tqdm, uncertainties, versioningit, websockets, xarray, cf_xarray, opentelemetry-api, pillow, dask |
| Maintenance | actively maintained — 102 days since the last release |
| Last repo commit | |
| First released | |
| Downloads | 79,075/month — #14,384 on PyPI (30-day window, as of 2026-08-14) |
| Known vulnerabilities | none known (OSV.dev, checked 2026-08-14) |
Evidence: qcodes-0.58.0-py3-none-any.whl
Tags
More Scientific/Engineering packages
NumPy provides an N-dimensional array object…
permissive · top 100 on PyPI
pandaspandas provides fast, flexible data structures…
permissive · top 100 on PyPI
scipyscipy provides numerical algorithms for…
permissive · top 100 on PyPI
scikit-learnscikit-learn provides a comprehensive Python…
permissive · top 1,000 on PyPI
dilldill extends Python's pickle module to…
permissive · top 1,000 on PyPI
multiprocessMultiprocess is an enhanced fork of Python's…
permissive · top 1,000 on PyPI
broadbeanBroadbean composes and manipulates pulse…
permissive · top 15,000 on PyPI
qiskit-experimentsQiskit Experiments provides tools for building,…
permissive · top 15,000 on PyPI
qm-quaQM-QUA is a Python SDK that implements QUA, a…
permissive · top 15,000 on PyPI
cirq-googleProvides access to Google's Quantum Computing…
permissive · top 15,000 on PyPI
cirq-coreCirq-core provides the foundational framework…
permissive · top 15,000 on PyPI
cirqCirq is a Python framework for writing,…
permissive · top 15,000 on PyPI
pennylanePennyLane is a quantum computing framework that…
permissive · top 15,000 on PyPI
pydoePyDOE constructs experimental designs for…
permissive · top 5,000 on PyPI
ophyd-asyncophyd-async provides asynchronous hardware…
permissive · top 15,000 on PyPI
MultiPyVuMultiPyVu provides Python control over Quantum…
permissive · top 15,000 on PyPI