Skip to content

Release Notes - Latest Stable Version

Stable Release 26.4.0

Release date 29.04.2026

Requires: LabOne 26.4

Supports: Applications Library 26.4.0

DSL

  • Functionality Added SectionTimingMode.STRICT for sections and acquire loops. When enabled, the compiler raises an error if any timing value (section length, pulse length, repetition time) requires padding to fit the required grid, rather than silently padding. RepetitionMode.AUTO is incompatible with strict mode and also raises an error.
  • Bug Fix Fixed a bug where attrs attributes were incorrectly labeled as both class-attribute and instance-attribute in the documentation.
  • Bug Fix Fixed a bug in the temporary_qpu function, where quantum elements and topology edges were not being copied correctly.
  • Bug Fix Fixed a bug where automatic measure section length in QPU did not take readout pulse into account.
  • Bug Fix Fixed a bug where creating an experiment in a different thread than where LabOne Q was originally imported caused a crash.
  • Bug Fix Fixed a vulnerability issue where a crafted serialized file could cause the deserialization engine to import and invoke arbitrary Python classes, resulting in arbitrary code execution. See ZI-SA-2026-002 for details.

Compiler

  • Functionality Added a new attribute result_properties for CompiledExperiment that for each result handle contains information about the result array (the shape and the axis names).
  • Functionality Long readout pulses on SHFQA devices are now automatically compressed without requiring the can_compress parameter when using hardware with long readout time support.
  • Functionality ModulationType.AUTO on QA devices in integration mode now resolves to HARDWARE only when the device has the LRT option and the acquisition length exceeds 2 µs; shorter acquisitions default to SOFTWARE to avoid silent phase-averaging errors and NCO limitations. Long acquisitions (> 2 µs) without LRT now raise a compile-time error. Spectroscopy mode is unchanged and always resolves to HARDWARE.
  • Functionality Ported event list generation (required for Pulse Sheet Viewer) from Python to Rust for improved performance.
  • Bug Fix Fixed a bug where markers were not held during compressed pulse playback in the output simulator.
  • Bug Fix Fixed a bug where PRNG match sections inside non-compressed sweep loops allocated duplicate command table entries on each sweep step, preventing the SeqC compressor from collapsing repeated bodies and potentially exhausting the command table entries.
  • Bug Fix Fixed a bug where multiplexed SHFQA output channels used invalid oscillator frequencies.
  • Bug Fix Fixed a bug where pulse replacements did not persist over near-time steps in situations where, besides the replacement(s), the near-time loop is used to sweep some pulse properties as well (the pulse being replaced, or another one).
  • Bug Fix Fixed a bug where near-time pulse replacement replaced the wrong waveform if the pulse being replaced was in different positions in different near-time steps (can happen when matching against the near-time loop index and defining structurally different entries for different cases).
  • Bug Fix Fixed a bug where delay compensation for input latency on SHFQA when using LRT was inaccurate. Users are advised to update their integration kernel estimations as this change affects signal latency.
  • Bug Fix Fixed a bug where auto chunking, when chunking was not necessary, produced a different compilation result than when auto chunking was not enabled.
  • Bug Fix Fixed a bug where acquisition delay was not compensated in LRT mode. Users no longer need to manually add a port delay offset to the acquire signal when using long readout.
  • Bug Fix Fixed a bug where match-case against a near-time sweep parameter always executed the first case only.
  • Bug Fix Fixed a bug where axis_name in experiment results contained names of internal derived parameters.
  • Bug Fix Fixed a bug where near-time frequency sweep of QA acquire oscillator with hardware modulation did not work on SHFQA devices with the LRT option without requiring spectroscopy acquisition type.
  • Bug Fix Fixed a bug where loops using SW oscillators were incorrectly compressed (re-rolled), causing all sweep iterations to reuse the same pre-computed waveform regardless of the accumulated oscillator phase.
  • Bug Fix Fixed a bug where hardware modulation was not applied when using a short readout on SHFQA with the LRT option.
  • Bug Fix Fixed a bug where OutputSimulator did not properly decompress long readout (LRT) waveforms on SHFQA, so that simulated output did not match the full hardware playback.
  • Bug Fix Fixed a bug where SHFQA in Spectroscopy mode did not play a readout pulse if can_compress=True passes to a readout pulse while the LRT option is being used.
  • Bug Fix Fixed a bug where PSV crashed if a zero-length trigger was present.

Controller

  • Functionality Added remote controller service for running experiments on remote machines.
  • Functionality Renamed controller API endpoints to match new naming scheme, added stubs for sync controller API.
  • Functionality Near-time Callbacks now receive an object implementing RuntimeContext as their first argument instead of a Session. No changes are required to existing callback function definitions except when they use the accessors to experiment data, calibrations, connection state, or the device setup. In these cases, the required data must be submitted via the function arguments. It is still recommended to rename the parameter from session to runtime_context and update the type hint, if present.
  • Functionality Session now supports automatic system profile fetching and caching when connecting to hardware. Use the new system_profile parameter in the Session constructor to explicitly provide a profile, or let it auto-load from cache when needed.
  • Bug Fix Fixed a bug where hold-off errors from a previous experiment could cause subsequent experiments to crash.
  • Bug Fix Fixed a bug where UHFQA AWG status check failed after AWG ready logic changed in 26.1.0.
  • Bug Fix Fixed a bug where a stale SHFQA integration kernel downsampling factor persists across sequential experiment runs within the same session.
  • Bug Fix Fixed a bug where a read timeout occurred when running LRT after non-LRT, due to LabOne Q enabling MSD by default even for two states for non-LRT experiments. MSD is now explicitly disabled for LRT.
  • Removal Remote controller service: drop the admin reset endpoint, the connection_state field of the /v1/info response, and the implicit on-demand hardware connect. The service now connects at startup via ControllerContainer.create() and aborts if the connection fails.

Workflows

  • Functionality Released the LabOne Q Automation framework and added a tutorial.
  • Functionality Added support for injecting serialized experiment results into workflows via the inject_results option, enabling reuse of previously recorded runs for emulation or testing.
  • Bug Fix Fixed a bug where an incorrect exception was raised when injecting incompatible results in run_experiment.
  • Bug Fix Fixed a bug where deserialization of a compiled experiment that uses local feedback would fail.
  • Bug Fix Fixed a bug where deserialization of a scheduled experiment with RAW acquisition would fail.
  • Removal Removed the deprecated DataStore class and associated SQLite-based data storage functionality.

Applications Library

  • Functionality Released the LabOne Q Workflow Automation framework and added a tutorial.
  • Functionality Added the result_handle argument to the calibration_traces_rotation.calculate_qubit_population_2d function, useful for storing multiple measurement outcomes per qubit.
  • Functionality The TunableTransmon demo_platform(n_qubits) and tunable_transmon_setup(n_qubits) functions were extended to support arbitrary numbers of qubits. Previously they supported at most six. The SHFQC and HDAWG instrument names and addresses in the setup were made unique by appending a count to them.
  • Functionality Added the evaluate_experiment task and evaluation_parameters argument to all experiment workflows that have an update_qpu task.
  • Functionality Added a new "continuous" option for specifying kernel pulses for acquire and measurement integration kernels on TunableTransmons. The new option causes the hardware to integrate for the entire integration length, weighting all samples equally. This is useful for performing very long integrations where the pulse samples would not fit into the device memory.
  • Functionality The functionality to determine the length of the measure section on laboneq.dsl.quantum.QPU was not compatible with all types of qubits. It only worked with tunable transmons. To avoid confusion and bugs with other types of qubits, the functionality has been moved to TunableTransmonOperations.measure_section_length. The method on laboneq.dsl.quantum.QPU will be deprecated and removed in future releases.
  • Bug Fix Fixed a bug in the Applications Library where several analysis methods did not properly support experiment results with multiple shots.
  • Breaking Change For all experiment workflows, all arguments apart from session, qpu, and qubit/qubits/parametric_amplifier are now keyword-only arguments.
  • Documentation Added a new section to the Experiment Workflows tutorial in the Applications Library explaining how to run an experiment workflow on previously measured results saved locally as JSON files.
  • Documentation Fixed incorrect docstrings across experiment and analysis modules where workflow names, parameter references, module paths, and code examples had drifted out of sync with the code.
  • Documentation Updated the How-to Guides landing page in the User's manual to show the experiment workflows before the pulse sequence guides. Also added a link to the single-qubit randomized benchmarking experiment workflow documentation.
  • Documentation Updated the code examples in the reference documentation for the amplitude_fine experiment.
  • Documentation Fixed inaccurate description of the add_reset argument to batch_experiment. The argument adds a reset operation not an active reset operation. Whether the reset is active or passive is determined by the implementation provided by the quantum operations of the QPU.
  • Documentation Added TWPA quantum element to the reference documentation index.
  • Documentation Fixed the link to the contribution guideline in the readme.

Deprecations

  • Deprecated the methods CompiledExperiment.replace_pulse and CompiledExperiment.replace_phase_increment. NOTE: the methods RuntimeContext.replace_pulse and RuntimeContext.replace_phase_increment are not deprecated and can still be used to apply replacements in NT callbacks (these methods leave the compiled experiment unchanged).
  • Deprecated QPU.measure_section_length. The method is only meaningful for certain types of qubits, so it will be moved to the implementations of QuantumOperations in the laboneq-applications repository instead.
  • Deprecated the legacy serializer provided by laboneq.dsl.serialization and laboneq.core.serialization. These will be removed in LabOneQ 26.7. Use laboneq.serializers instead.

Known Issues

  • Running Gen1 experiments can produce controller warnings indicating RT start conditions on follower devices are not fulfilled (e.g., UHFQA:dev2801: AWG 0 didn't start after 5s); experiments may still execute correctly, but affected Gen1 experiments may take ~20%+ longer due to the additional wait/retry behavior. We are working on a fix and will release it as a patch to 26.1.0 as soon as it is available.
  • Using the reset_signal_oscillator_phase() on signals of type rf_signal is currently not supported.
  • Using OpenQASMTranspiler.batch_experiment with QASM programs that contain native measurement operations will lead to an unexpected shape of the returned data. To ensure the correct shape, measurement operations should be removed from the OpenQASM program, and .batch_experiment should be called with the option field add_measurement=True, which will add the measurement operations to the LabOne Q Experiment during the import step (see our tutorial for more details).
  • Using the internal scope to acquire raw traces on multiple channels of an SHFQA in a single experiment is only possible if the timing of all acquisitions is equal between instrument channels.
  • Using runtime checks of the sequencer playback through the disable_runtime_checks=False argument of session.connect(), is currently not possible when the experiment contains real-time feedback or is using the on-device PRNG. In the latter case, unintended error messages may be produced if the option is used.
  • When using the pipeliner in an experiment by specifying a chunk_count parameter in a sweep, the number of acquire commands in each chunk currently needs to be equal. Typically, this means that the number of sweep steps within each chunk has to be the same.
  • When using OutputSimulator or pulse sheet viewer with an experiment using the pipeliner or near-time sweeping, currently only the first sequence step will be displayed.
  • When delaying logical signal lines of type rf_signal via the delay_signal calibration property, all rf_signals on the same sequencer core must be set to the same delay.
  • When delaying logical signal lines on the SHFQA via the delay_signal calibration property, the delays for the measure and acquire line must be the same; the measure pulse delay is not added to the acquire pulse delay as on the UHFQA. We recommend to use port_delay for now.
  • When creating a section with very short content (below the device's minimum waveform length), the compiler may fail to map the experiment to valid SeqC, and will generate an error. As a workaround in these cases, manually add delays to the sequence.

Pre-Release versions

Previous versions