Skip to content

Protocol changelog

The kernel WebSocket protocol is at v1 — the version shipped since the protocol stabilized, documented in the Kernel API section.

  • Additive changes — new message types, new optional request fields, new fields on responses — can land in any release without notice. Clients must ignore unknown fields and unknown response types.
  • Breaking changes — removing or renaming fields, changing semantics of existing messages — ship only with a protocol version bump and an entry in this table.
  • Every protocol-relevant change is also announced in the repo CHANGELOG.
App versionProtocol change
0.13.0Additive: new messages lintlint_result (ruff diagnostics for the buffer) and formatformat_result (ruff-formatted text). Python-only; both degrade to empty/no-op when ruff is absent, never blocking. See execution messages.
0.12.0Additive: new message debug_tracedebug_trace_result — the Quantum Debugger’s per-gate state trajectory. Returns one step per gate (plus an initial `
0.11.0Additive: new message transpiletranspile_result — runs a Qiskit preset PassManager for a target (optional basis_gates, optional coupling_map, optimization_level 0–3) and returns before/after CircuitSnapshots, depth/two-qubit/gate-count deltas, and pass-by-pass data (each pass that changed the circuit, with the signed gate counts it added — routing SWAPs, basis rewrites). Qiskit-only (the only framework with an introspectable compiler); a non-Qiskit circuit answers with a transpile_unsupported_framework error. Powers the Transpiler Explorer. See execution messages.
0.10.0Additive: qec_snapshot’s payload gains an optional dem_text field — the flattened detector error model as text (str(dem.flattened())), present only when the graph is truncated. It lets a client parse and render the full detector graph itself, with no kernel-side edge cap (Nuclei does this with a WebAssembly parser). Absent when the graph fits, so the common case pays nothing. See QEC messages.
0.7.0Protocol v1.2 (PRD 10 Phase F): new message qec_estimateqec_estimate_result — Azure Quantum Resource Estimator over Q# source or OpenQASM 3, returning physical-qubit/runtime/code-distance/T-factory headline numbers plus the full estimator document. See QEC messages.
0.7.0Protocol v1.2 (PRD 10 Phase C): new message qec_materializeqec_circuits — runs a campaign entry source’s nuclei_circuits(noise) and returns its labeled circuit texts. Experiment schema v2 lands app-side (type: sweep unchanged, type: qec_campaign added; schema-1 files remain valid forever). See QEC messages.
0.7.0Protocol v1.2 (PRD 10 Phase B): sinter campaigns as managed kernel jobs — qec_campaign_start (ack qec_campaign_started; streaming qec_campaign_progress throttled to progress_interval_s, default 1s; final qec_campaign_result with sinter-native csv), qec_campaign_cancel (ack qec_campaign_cancelled, then a partial result), and qec_decode_sample (one decoded shot for the detector-graph overlay). One campaign at a time per kernel (campaign_already_running); resume via existing_stats_csv never re-samples completed tasks; campaigns deliberately take no seed (sinter has no seeding API). See QEC messages.
0.7.0Protocol v1.2 (PRD 10 Phase A, all additive): Stim stabilizer circuits are a kernel framework — Python code building stim.Circuit objects routes through the normal pipeline, and a new language: "stim" value on parse/execute treats code as raw .stim text (parsed by stim.Circuit(text), never Python exec). Stim results honestly report sampler-only output: empty state_vector/probabilities/bloch_coords. See QEC messages.
0.7.0Protocol v1.2: new message qec_generateqec_generated (built-in QEC circuit text from stim’s generator set) and new message/sidecar qec_snapshot — sent automatically between snapshot and result for Stim circuits, and requestable on demand with an adjustable DEM edge cap (5,000 default, explicit truncated flag, never silent). The environment response’s packages may now include stim, sinter, pymatching, and fusion_blossom.
0.6.0Protocol v1.1 (PRD 09 Phase B, all additive — old clients keep working unchanged): execute gains two optional request fields, params ({string: number}) and seed (integer). params is injected into the Python exec namespace as params (always a dict, {} when omitted); for Q# it binds by name to the entry operation’s declared arguments (Double/Int only — see Q# parameter binding). seed requests reproducible sampling from the underlying simulator and seeds Python’s random/numpy.random before exec. See execution messages.
0.6.0Protocol v1.1: execute’s result response gains two optional fields — metrics ({string: float}, always present, populated via the newly-injected record_metric(name, value) Python function; empty when nothing was recorded) and seed_honored (boolean, present only when the request carried a seed, omitted otherwise). See schemas.
0.6.0Protocol v1.1: new message type environment → response environment, reporting the kernel’s Python version, platform string, and installed framework versions (qiskit, qiskit_aer, cirq, cudaq, qsharp — absent keys mean “not installed”). See the message catalog.
0.5.1hardware_dismiss request added (additive): removes a job record from the kernel’s registry and the persistent job store without cancelling provider-side work. Reply is hardware_job_dismissed; unknown ids succeed (already-gone semantics). See the message catalog.
0.5.0Optional language field ("python" | "qsharp") added to parse, execute, and hardware_submit requests. Omitted by older clients, in which case framework detection stays regex-based — fully backward compatible.
0.5.0Q# source-mode routing: when language is "qsharp", or the source matches Q# syntax, code routes to the QDK adapter instead of Python exec.
0.5.0Reset added to the canonical gate vocabulary in CircuitSnapshot (emitted by the Q# adapter for mid-circuit |0⟩ preparation).
0.5.0hardware_submit semantics for Q#: source compiles to QIR before submission, with the profile selected per target — see submitting Q#. Provider allowlist for Q# is simulator and azure — every other provider answers with an error message.
≤ 0.4.xProtocol v1 baseline: parse / execute / run_python plus the hardware_* family as documented in the message catalog.