Stark Quantum Independent. Not a vendor.

Essays / Tooling

When a tooling release is actually news

Most quantum software releases are version numbers. A small number change what a practitioner can run, and the difference is visible in the changelog if you know which three questions to ask of it.

Quantum software projects release often, and almost none of it is news. A changelog is mostly bug fixes, and a version number on its own says nothing about whether anybody’s work changed. That is not a complaint about the projects. It is a description of healthy maintenance, and it is the reason a site that covers tooling has to be selective about which releases it reads.

Three questions make a release worth reading. Did a compilation pass change, so that the same source now produces a different circuit? Did anything break? Did access change, so that hardware is reachable that was not reachable before? Anything else can be skipped without loss.

The compilation question

The first is the least visible and usually the most consequential. A quantum program is not what you wrote; it is what the compiler emitted after mapping your circuit onto a device with a fixed connectivity graph and a particular gate set.

Routing decisions insert SWAP operations. Each of those is more two-qubit gates, and two-qubit gates are where the error budget goes. A change in a layout or routing pass therefore changes the fidelity of the same program on the same hardware, without touching the hardware and without anything in the release notes mentioning fidelity at all.

That is why a line in a changelog about a transpiler pass is a stronger signal than a headline about a device, for anyone actually running circuits. The honest way to evaluate it is to compile a circuit you care about before and after and count the two-qubit gates. The release notes will not do that for you, and a benchmark supplied by the project is a benchmark chosen by the project: not wrong for that, but provisional until somebody outside repeats it.

What the recent Qiskit releases show

The Qiskit release feed over the past months is a good illustration of the ratio. The 2.5.1 and 2.5.2 releases are fixes: a deadlock in a single-qubit-gate optimisation pass, a transpiler error message, serialisation and layout bugs. Real work, no consequence for what can be run.

Two things in the same period are different in kind.

The 2.5.0 release added a multi-IR staged pass manager. Compilation stops being a single representation carried from input to output and becomes a pipeline that can change representation between stages. This is ordinary practice in classical compilers and it is a structural change here: it decides what kinds of optimisation are expressible at all.

Across several releases, the project has also been extending a C API. Recent entries add functions to inspect control flow instructions and classical expressions, query registers, draw a circuit, and check the runtime version from C.

Cirq shows the second and third questions in one move. Version 1.6.0, in July 2025, removed the Cirq-Rigetti package outright, having deprecated it a release earlier and made it an opt-in install in the meantime. That is the full arc of a breaking change done properly: deprecation, a migration path, a period where the old way still works if you ask for it, then removal. It is also an access change, because a vendor’s hardware left the default install, and anybody whose code reached that backend through Cirq had work to do.

Why an interface in C is a hardware story

It would be easy to file that under housekeeping. It is worth a second look, and the reason connects to error correction rather than to software taste.

A C API means the compiler can be called from something that is not a Python process. The places where that matters are the places with a deadline: mid- circuit measurement with feed-forward, adaptive circuits that decide what to do next based on an outcome, and the real-time classical layer around error correction, where a published below-threshold memory reported an average decoder latency of 63 microseconds against a 1.1 microsecond cycle time. Nothing with a budget in microseconds is going to call into a Python interpreter.

That is a reading of the direction of travel, not something the release notes claim. The honest version is narrower: an interface now exists that did not before. Whether it becomes load-bearing in the latency-bound path is a different question, and the evidence for it would be somebody building that path, not the interface being published.

What tooling cannot do

It is worth stating the limit plainly, because tooling coverage drifts toward overstatement more easily than hardware coverage does.

No compiler change lowers a physical error rate. Better routing spends fewer gates, so a given circuit fails less often, and better scheduling wastes less coherence. Both are real gains and both are bounded by the device. A transpiler improvement does not move a machine closer to fault tolerance; it gets more out of the machine that exists.

The same caution applies to abstractions that make error correction look closer than it is. A library that lets you write a program in terms of logical qubits is a useful thing to have. It is not evidence that logical qubits at that scale exist to run it on.

How to read the next one

The same three questions, in order, and most releases stop at the first.

Did any compilation pass change? If so, the same source produces a different circuit, and the only way to know whether that is better for your work is to compile and count.

Did anything break? A deprecation with a migration path is a schedule you now have. A removal is work you now have.

Did access change? New hardware exposed, a new backend, a change in what calibration data is published, a pulse-level control path opened or closed. Access changes are what decide whether outside work can verify anything at all.

Everything else is a version number, and version numbers are not news.

Sources