Releases#

Warning

Do not power-cycle the cluster during a firmware upgrade. Updating from below firmware 1.0 may take longer than usual due to an upgrade of the operating system. If you encounter any issues, please reach out to our support team.

Note

With qblox_instruments 1.2, we introduced an automatic update procedure. This is the recommended way to update the cluster.

If the host PC has internet access, you can use qblox-cfg <ip> update to automatically update to the most recent firmware version.

When updating from firmware <1.0, use qblox-cfg <ip> update --auto-migrate to automatically migrate the operating system during the update.

2026.04.0#

Highlights#

LINQ-message based feedback#

Firmware 2.0 marks a major leap forward, fundamentally expanding what can be achieved with real-time control, feedback, and system integration. With a significant upgrade of our LINQ-based architecture, we are unlocking a new class of capabilities that were previously out of reach or required complex host-side orchestration. For the first time, users can easily exchange data (whether bits, full I/Q values, or precise time tags and more) between any sequencer in a cluster. This enables truly distributed, low-latency feedback loops across the system. Combined with a dedicated feedback queue and a much richer instruction set, the Q1 sequencer becomes significantly more expressive, making advanced real-time algorithms and custom compiler development far more accessible.

Explore the possibilities in the user guide!

Improved Q1 instruction set#

With firmware 2.0, we improved the instruction set and classical processing capabilities of our sequence processors. Among other changes, the update brings singed number support, multipliers, improved jump instructions and the ability to set and get register values from the host PC. All these changes are backwards compatible.

Real sequencer mode#

There are many use cases where it is necessary to combine modulated and unmodulated pulses on the same output. With real sequencer mode, available for QCM and QRM, this is now possible from a single sequencer - reducing complexity of the programs, and enabling more complex experiments.

Check it out in the user guide!

QSM module#

This release is not only about firmware. It is also accompanied by the introduction of the new QSM module, extending Qblox capabilities into high-performance DC control and measurement. With 8 I/O channels and integrated current and voltage sensing, it complements our RF platform and strengthens our position as a full-stack solution provider : from ultra-stable DC to high-frequency control up to 18.5 GHz.

Check it out in the user guide!

Firmware - 2.0.0#

New features#

  • Add LINQ-based feedback

  • Support 0 as the duration of q1asm instructions for indefinite wait times in real-time execution

  • Add support for the QSM

  • Added support for Real Sequencer Mode in QCM and QRM

  • Add is_dc_cluster and bp_serial_number field to *DESCribe? command

  • Add support for int16_t encoding for wave/weight upload, improving upload speeds

Fixes#

  • The Q1asm instruction asr now does an arithmetic bit shift instead of a logical bit shift

  • Fixed: Cluster.reset() was slow if a QRC is present.

  • Fixed: It is no longer necessary to reset the cluster when changing the reference clock with a QRC present.

Qblox Instruments - 1.2.1#

Compatible with all device firmware versions >= 0.13.0, <3.0.0.

New features#

  • Add --auto-migrate flag used with firmware packages >=1.0 to automatically migrate modules on firmware versions <1.0.

  • Expose the Real Sequencer Mode via the QCoDeS parameter real_mode_en, defined on QRM and QCM sequencers. When this mode is enabled, path 0 is simply amplitude-modulated with the NCO, while path 1 bypasses the NCO and is summed with path 0 after modulation. The combined path is usable as the I path in the channel map, while the Q path is not used.

  • Add Cluster.get_sequencer_registers, Cluster.set_sequencer_registers, Sequencer.get_register, Sequencer.get_registers, Sequencer.set_register, Sequencer.set_registers, which allow the user to set and get register values of the Q1 processor. Note that the sequencers must be stopped (Sequencer.stop_sequencer()) when using these functions. This feature is only supported for clusters running firmware v2.0.0 and higher.

  • Add is_dc_cluster and bp_serial_number info to qblox-cfg describe.

  • Increase cluster firmware update timeout from 240 to 480 seconds to accommodate complex module configurations.

  • Handle empty responses during firmware update polling; now raises a descriptive ConnectionError with recovery steps if a module becomes unresponsive.

Fixes - 1.2.0#

  • In Cluster objects with a dummy connection, io_channel.get_scope_data() on a QTM IO channel will now return a mock value of the correct type.

  • Fixed outdated parameter values incorrectly persisting after automatic mixer calibration.

  • Fixed Error when connecting to a cluster containing only a CMM and no other modules.

Fixes - 1.2.1#

  • Automatic migration update no longer fails due to incorrect firmware compatibility checks.

Known issues#

  • Sequencer.real_mode_en() is not set back to False by Cluster.reset(). Workaround: Disable real sequencer mode explicitly with Sequencer.real_mode_en(False).

Qblox Scheduler - 1.0.0b4#

New features#

  • Add the Callback experiment step, which allows you to schedule an arbitrary callback function.

  • Operations on ports associated with a real_output channel now allow complex-valued pulses. The real (or path 0) value is modulated as usual, but the imaginary (or path 1) value is not modulated, and summed with the real value after the NCO stage.

  • Support loading hardware configuration in YAML format through HardwareAgent

  • Add support for plotting marker pulses in both mpl and plotly pulse diagrams.

  • Re-export many more functions and classes in the package top-level init.py file. You can now access everything via a single import:

    import qblox_scheduler as qs
    
    schedule = qs.Schedule("example")
    schedule.add(qs.Measure("q0"))
    
  • Let the HardwareAgent create clusters with a dummy configuration (mocking the connection to a physical cluster) when not specifying the ip address in the hardware configuration, or when passing the argument create_dummy_connection=True.

  • Added support for conditional operations with the ThresholdedTriggerCount acquisition protocol.

Deprecations#

  • Use of amp and gain as pulse parameters in favor of amplitude.

  • It is advised for acquisitions not to use AVERAGE, SUM bin modes (except trace acquisitions), and instead use AVERAGE_APPEND which is compatible, and has even more features.

  • Removed the TimeableSchedule re-export in the package top-level init.py file.

Fixes#

  • Attempt to connect_clusters() before compiling a schedule in HardwareAgent.

  • Schedule.compile now correctly compiles and returns that last TimeableSchedule in a near-time Schedule.

  • Fix long_chirp_pulse, so that the last part has the correct frequency range, if the total duration is not divisible by the part duration.

  • Add a min_duration parameter to PulseCompensation, so that the backend can handle cases where the pulse to be compensated already has an integration value close to zero.

  • Pin the qcodes dependency to versions <0.57, as versions >=0.57 remove qcodes.utils.helpers.

Documentation#

  • Added five new application examples for semiconductor spin qubits

  • Improved the application examples for color centers

  • Extended pulse output plotting and data visualization options.

  • Streamlined and improved explanations throughout the application examples for better user experience.

  • Improved tutorials and user guide for the QTM.

  • Added tutorials for the QSM.

2025.12.1#

Qblox Instruments - 1.1.1#

Compatible with all device firmware versions >= 0.13.0, <2.0.0.

Fixes#

  • Make SCPI commands discoverable by the Cluster class (e.g. get_system_error, get_num_system_error, check_error_queue, clear_error_queue, identify, and all get_xxx_temperature commands).

Qblox Scheduler - 1.0.0b3#

Fixes#

  • Fix PulseCompensation such that it correctly handles parameterized loops, when compensating for the whole loop.

  • Specifying only a complex_input_channel now also sets the NCO frequency.

2025.12.0#

New hardware#

We released the QRC module, a high density, calibration free module with 6 oputputs and 2 inputs, covering the frequency range 0.1-10 GHz. Check it out in the user guide!

Firmware - 1.0.0#

We upgraded the operating system running on qblox hardware to a custom linux distribution, ensuring long term software stability, scalability and a better upgrade procedure going forward.

Breaking changes#

  • Improved Cluster.reset()

    • Breaking: reset no longer includes clock-related changes (reference source change, LO PLL initialization, and AFE DAC calibration). This change allows to keep a fixed phase between different RF modules, even across resets.

    • New: Added private UI _hardware_reset that includes reset and all clock reinitialization

    • The reset procedure is now significantly faster.

New features#

  • IDN now reports new SCPI compatibility version for both cfg_man and application in the cfgManSCPIVersion and swSCPIVersion fields respectively, in the form of <major>.<minor>. Incompatible changes in the SCPI interface will result in a bump to the major version, backwards-compatible additions will result in a bump to the minor version.

Fixes#

  • Fixed edge case where it was not possible to connect to an empty cluster.

  • Fixed the default value of out_amp_offset for QCM/QRM-RF to match actual hardware defaults.

Known issues#

Qblox Instruments - 1.1.0#

Compatible with all device firmware versions >= 0.13.0, <2.0.0.

New features#

  • Extend support for additional firmware versions. As of v1.1.0, qblox-instruments versions are no longer strictly tied to cluster firmware versions. You may now independently update qblox-instruments to >=1.1.0 and cluster firmware to >=0.13.0 without breaking code or experiments. Access to new features will still require updating one or both.

  • Add support for our new quantum readout & control module (the QRC)

  • qblox-cfg can now retrieve the mac address of the cluster via qblox-cfg describe

  • Add a --timeout flag to qblox-cfg to allow configurable timeout durations. The default is set to 60 seconds.

  • Add a --skip-version-check flag to qblox-cfg <ip> update to skip version compatibility checks between modules and update package. This may be used on modules that run non-standard or early-release builds.

Fixes#

  • Allow to install qblox-instruments using poetry.

Qblox Scheduler - 1.0.0b2#

New features#

  • Add Schedule.repeat() method for repetitions without need for variables.

  • Implement merging of subsequent Rz gates to allow experiments with multiple RZ gates in a row without inserting wait times.

  • Add automatic RF output switching if rf_output_on hardware option is set to "auto".

  • Improve arange API to match Python and numpy’s.

  • Return empty dataset instead of None when no experiment data is available.

  • Raise acquisition bin limits. Limit is computed per module instead of per sequencer.

  • Make DType, arange, and linspace available for import from qblox_scheduler.operations.

  • Add get_unit method to submodules to retrieve the unit of a given parameter.

  • Raise error during compilation and warning during plotting, when the amplitude or gain of a waveform exceeds the maximum allowed amplitude or gain.

  • Add progress bar when hybrid loops are executed.

  • Include a warning about slowness when calling the to_yaml and from_yaml methods of qblox_scheduler models.

Breaking changes#

  • Remove the StitchedPulse class.

Fixes#

  • Fix issue preventing to load a serialized QuantumDevice.

  • Allow YAML serialization of custom DeviceElement and Edge.

  • Allow SSBIntegrationComplex and trigger count acquisition protocols to work on the same sequencer.

  • Pass all instrument types other than Cluster in the hardware configuration to HardwareAgent.

  • Hold the latest compiled TimeableSchedule in HardwareAgent.latest_compiled_schedule when running hybrid loops.

Documentation#

  • Add multiplexing and NCO tutorials for the QRM-RF

  • Add a full suite of tutorials for the QRC.

  • Fixed broken links.

2025.10.2#

Qblox Instruments - 1.0.3#

Compatible with device firmware 0.13.0.

Fixes#

  • Modules no longer report qcodes parameters and methods that belong to other modules.

2025.10.1#

Qblox Instruments - 1.0.2#

Compatible with device firmware 0.13.0.

Fixes#

  • Correctly handle .zip files when updating firmware

  • Fix a KeyError that was sometimes raised on Cluster.get_system_status() shortly after booting by adding a missing INITIALIZE flag

  • Fix RecursionError unintentionally being raised under certain circumstances with python 3.10 and below

2025.10.0#

New hardware#

We released the DC Cluster mainframe, a ground-loop-free, low-noise mainframe enabling ultra-stable, high-resolution DC sourcing and precision measurement. Check it out in the user guide!

Documentation overhaul#

We significantly overhauled the documentation. Some highlights:

Python Support#

The minimum supported Python version has been raised to 3.10. Kindly verify that your installed Python version is 3.10 or above.

Qblox Scheduler - 1.0.0-beta1#

We are proud to announce Qblox Scheduler, our new high level package for Qblox hardware. It features greatly improved usability and syntax, the ability to run loops directly inside the Qblox Cluster and many more. It is currently available as a public beta. Check out the applications section to see it in action, and the user guide for the full details.

Firmware - 0.13.0#

New features#

  • The acquisition memory is increased by more than 20x for QRM, QRM-RF, QTM to 3,000,000 bins for the module (previously 131,071).

Breaking changes#

  • Stopping the Q1 before RT_EXEC started now triggers the Q1_STOPPED state instead of STOPPED

Fixes#

  • Fixed automatic mixer calibration sporadically failing

  • Sequencer status can no longer reach STOPPED state without the RT_EXEC starting or finishing

  • Sequencers with no configured acquisitions no longer return the acq_config of sequencer 0

  • Sequencers without acq no longer try to toggle the irq mask of avg_binning_done

  • Disabled unused LINQ PHYs to reduce the noise

Qblox Instruments - 1.0.0#

Compatible with device firmware 0.13.0.

Erratum

The release notes previously listed firmware 0.12.1 as compatible. This was incorrect.

New features#

  • Performance improvements

    • Significantly improve performance of acquisition retrieval

    • Add Sequencer.update_sequence method to send partial updates to a previously set sequence. This can drastically reduce experiment runtime.

    • Add option as_numpy to Cluster.get_waveforms, Cluster.get_weights, Cluster.get_acquisitions to return data as NumPy arrays instead of Python lists. Passing as_numpy=True can reduce experiment runtime

  • Quality of life

    • Download and install the latest Cluster firmware when running qblox-cfg <ip> update without specifying a firmware file

    • Improve readability of print_readable_snapshot by increasing spacing

    • Improve Module.__repr__ to display a human-readable string when printing a module directly or with Cluster.get_connected_modules()

  • Other changes

    • Return a warning when a Cluster has an invalid serial number when running qblox-pnp list

    • Add option epoch to the accepted io_channel.binned_acq_time_ref QCoDeS parameter set values

    • Add Module.toggle_all_lo method to toggle all local oscillators on the module

Fixes#

  • Resolve an issue that caused firmware updates to fail on some Clusters running 0.9.x firmware

  • Allow non-ascii characters as comments in Q1ASM programs

  • Allow connecting to a Cluster without any modules present

  • Ensure that connected and present QCoDeS parameters always return a consistent value in snapshots, without sending unnecessary SCPI commands

  • Register unknown system status flags as UNKNOWN

Older releases#

You can find older releases in this document.