Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

QCoDeS-Plotter

release pre-release

QCoDeS-Plotter, or qPlot, is a PyQt-based data viewer for QCoDeS databases. It is designed for inspecting completed and running experiments, with live refresh, line plots, heatmaps, 1D cut extraction, CSV export, and simple data operations.

Requirements

qPlot supports standard CPython 3.11–3.14. Free-threaded Python and PyPy are outside the supported matrix.

Runtime dependencies are declared in pyproject.toml and are installed automatically when qPlot is installed.

Application development and Git installs use a separately installed native platform wheel for trusted live QCoDeS access. A C compiler is required only when building the native distribution from source.

Native wheels are prepared for Windows x64, macOS ARM64, macOS Intel, and Linux x86_64 (manylinux_2_28, requiring glibc 2.28 or newer). Windows and macOS are the supported desktop platforms. Linux receives headless application, reader and installation validation; its interactive desktop GUI is not yet supported. Linux may need system Qt libraries such as libegl1. Other architectures, 32-bit Windows and musl-based Linux have no native wheel. Their ordinary PyPI installation fails with a missing compatible distribution instead of compiling.

For a supported local database, qPlot now attempts trusted live access first. One application read broker uses one persistent helper to publish the basic run list, detect later commits, fill run metadata progressively, and load the selected run's plain detail view without copying the database. Main-database, WAL, and rollback-journal handles remain read-only; SQLite may update only the exact colocated -shm file as transient WAL coordination state.

Normal qplot, python -m qplot, and qplot.run() launches put the complete qPlot process tree behind a shutdown boundary before Qt or reader helpers can start. The command-line process is the launcher. A public qplot.run() call first starts a dedicated Python launcher, so the calling process, its threads, its QCoDeS writer, and unrelated children stay outside that boundary. POSIX uses a dedicated GUI session/process group whose leader is retained until it is reaped; Windows assigns the GUI atomically to a retained kill-on-close Job Object and keeps the original handles. The API launcher reports only after the GUI tree is gone, through a private authenticated channel whose EOF remains usable even if a caller thread reaps the launcher first. qplot.run() returns 70 for forced shutdown and represents POSIX signal termination without signalling its caller as -signal_number. If the caller receives KeyboardInterrupt, SystemExit, or another control-flow exception while waiting, it sends an irreversible authenticated cancellation and re-raises the original exception only after the launcher has killed and reaped its GUI/helper tree and exited. A dedicated cancellation writer retains partial-send progress; one serialized lifecycle permits exactly one worker creation and start attempt, or one committed write-side-EOF fallback if startup fails. Later interrupts are absorbed until authenticated outcome, launcher EOF, and exit/reap observation are all complete, so they cannot replace the first exception or release a live tree. During that bounded interval qPlot transactionally installs a temporary SIGINT absorber and always restores the exact caller handler, including when an interrupt lands after either signal-handler side effect. Caller-channel EOF triggers the same fail-closed cleanup. A confirmed shutdown therefore has one immutable absolute deadline even if native Qt teardown blocks. The special qplot.run(return_objects=True) form instead runs in the caller's process and returns caller-owned Qt objects; it intentionally does not acquire the launcher's process-tree containment or hard-deadline guarantee.

Snapshot fallback is limited to an unavailable native backend or an explicitly unsupported source or filesystem that the legacy access probe can verify safely. Ordinary fallback selection is basic-only: it renders cached run-list fields and an unavailable detail state without starting a selected-detail reader or preparing an additional selected-detail snapshot. That claim applies only to row selection: fallback metadata and retained preview paths can still create private snapshots. Plot and CSV actions also acquire action-owned snapshots. Automatic trusted live previews and thumbnails are disabled until the Stage 5 scheduler and disk cache are implemented. See Trusted live QCoDeS reader.

Packages

The application distribution is qplotter; its Python imports and console commands remain qplot, qplot-cfg, and qplot-generate-db. The separately built qplotter-native==1.0.0 supplies the protected SQLite reader through qplot_native. The application's exact dependency pin installs the compatible native wheel automatically. Both packages pin the same APSW/SQLite runtime, preserving trusted live reading and database protections.

Contributors can edit the application without a C compiler:

python -m pip install --only-binary=:all: -e ".[dev]"

See Contributing and Distribution for prepublication development using a local native wheel, explicit native source builds, and release validation.

Install

Install qPlot inside a supported Python virtual environment. This checkout prepares the first split PyPI release, application 1.6.0b3 with native 1.0.0; the commands targeting these packages work after publication. Until then, use validated local artifacts as described in Distribution.

Prelude

Windows

Create a folder for qPlot, open it in Terminal, and execute:

py -3.11 --version
py -3.11 -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install -U pip

macOS / Linux

Create a folder for qPlot, open Terminal there, and execute:

python3 --version
python3 -m venv .venv-mac
source .venv-mac/bin/activate
python -m pip install -U pip

Installing your chosen version

For ordinary installation after a stable PyPI release is available:

python -m pip install --only-binary=:all: qplotter

For the first split beta, explicitly select the prerelease:

python -m pip install --only-binary=:all: qplotter==1.6.0b3

Both commands install the full runtime dependency set as wheels, with no C compiler. To follow subsequent betas, add --pre. Check the selected Python interpreter and platform if pip reports no compatible wheel.

Historical releases retain their old packaging. For example, the earlier full release remains available from its Git tag:

python -m pip install git+https://github.com/lairdgrouplancaster/QCoDeS-Plotter.git@v1.5.0

Replacing an older installation

Older releases used the distribution name qplot. A fresh virtual environment is the simplest replacement. To reuse an environment, close qPlot, uninstall the old distribution and any overlapping split installation before installing the new packages:

python -m pip uninstall -y qplot qcodes-plotter qcodes-plotter-native qplotter qplotter-native
python -m pip install --only-binary=:all: qplotter==1.6.0b3
python -m pip check

Do this even if the old installation was editable. Installing the new name over qplot leaves two distributions owning the same qplot import package and console commands; uninstalling the old one afterward can remove the new installation's files. Settings and measurement databases are outside these packages and are unaffected by pip uninstall.

Troubleshooting

If the version check above reports Python 3.10 or older, install Python 3.11 or newer first and use that launcher instead, for example python3.12 on macOS.

Virtual environments are not portable between operating systems. If the checkout is synced between systems, make sure VS Code is using the interpreter created for the current system:

  • Windows: .\.venv\Scripts\python.exe
  • macOS: ./.venv-mac/bin/python
  • Linux development: ./.venv-linux/bin/python

Check the install

qplot-cfg -version
python -c "import qplot; print(qplot.__file__)"

Run

Start the app from an activated virtual environment:

qplot

To open a database directly:

qplot path/to/database.db

For file-manager Open With and double-click setup, see Opening Databases from the File Manager.

You can also run:

python -m qplot

or start it from Python:

import qplot

qplot.run()

Basic Use

  1. Open qPlot.
  2. Drag a QCoDeS .db file onto the database path field, or use File -> Load Database....
  3. Select a run in the run table.
  4. Plot a measurement using the run-table context menu, or enter a run ID and measurement number at the top of the window. Snapshot fallback sessions may also offer a preview that can be double-clicked.

Plot windows may appear before their data has finished loading. Check the status bar at the bottom of the plot window before assuming a load has failed.

For the installed 1.5.0 release, see its versioned user guide.

Likewise, use the 1.5.0 troubleshooting guide for this release.

For release history, see CHANGELOG.md.

Configuration

On first run, qPlot creates:

~/.qplot/config.json

Useful commands:

qplot-cfg -info
qplot-cfg -version
qplot-cfg -dump
qplot-cfg -find user_preference.theme
qplot-cfg -set_value user_preference.theme dark
qplot-cfg -reset

For all config keys, defaults, validation rules, and contributor notes, see docs/configuration.md.

Development

For development setup, test commands, and contribution workflow, see CONTRIBUTING.md.

For a short map of the codebase, see docs/architecture.md.

For demo data and screenshot workflow notes, see docs/demo-data.md.

For release and packaging notes, see docs/distribution.md.

Local development helper scripts are documented in scripts/README.md.

Metadata

Release files for qplotter 1.6.0b3

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

Source distribution (sdist)

Source distribution for qplotter 1.6.0b3
File Size Uploaded
qplotter-1.6.0b3.tar.gz 1.8 MB Details

Built distribution (wheel)

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

Total release size: 2.5 MB

Release files / qplotter-1.6.0b3.tar.gz

Download URL qplotter-1.6.0b3.tar.gz
Size 1.8 MB
Tags Source
SHA-256 checksum
How to use checksums
3e085ab613b0177e454642a4b7476666fcabac6119bf97a497120e5dae1318ab
BLAKE2b-256 checksum
How to use checksums
d29c42df5745c7297f0028846b6d60ac0f7f64aa6f6164abb2472fb87d000997
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 Oct 11, 2026.

Transparency log

Release files / qplotter-1.6.0b3-py3-none-any.whl

Download URL qplotter-1.6.0b3-py3-none-any.whl
Size 728.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
9f97114315f49666ac1d2138b7623d0b6688c0db721e8feb5f9d7896dbd5c26c
BLAKE2b-256 checksum
How to use checksums
8ed823ed87431e021c20efd990a01090b6473996f3ba4503c0f0a033034b8903
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 Oct 11, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

1.6.0b3 This release

2 release files

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