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.07.0#

Highlights#

  • Inverse high-pass filter allows to correct for distortions introduced by a first-order high-pass filter (such as a bias tee) directly on hardware, i.e.on the QCM outputs. More details please refer to the Firmware section.

  • New Bulk API, double buffering and partial acquisition help the users to speed up experiment with simplified code and improved scalability. More details please refer to the Firmware section.

  • QSM now supports current sourcing by sourcing voltage through a fixed or a changing load. More details please refer to the Firmware section.

  • We significantly improved the Q1ASM user guide.

  • We added exciting new application examples making use of LINQ, both for superconducting and spin qubits.

Firmware - 2.1.0#

New features#

  • Inverse high-pass filter allows to correct for distortions introduced by a first-order high-pass filter (such as a bias tee) directly on hardware, i.e.on the QCM outputs. Based on the cut-off frequency of the high-pass filter, a corresponding time constant can be configured for the inverse high-pass filter in the QCM to counteract these distortions. The inverse high-pass filter supports time constants between 10 ns → 134 ms. See the tutorial for more details.

  • Waveform and weight upload times are reduced by up to half thanks to 16-bit encoding in the native hardware format, which shrinks network payload sizes and bypasses software-side data conversions. No code changes required.

  • Double Buffering on control sequencers reduces experimental deadtime by preloading and compiling the next sequence in the background while the current sequence executes. See the tutorial for more details.

  • The new Bulk API batches multiple per-sequencer commands into a single cluster-wide operation, significantly reducing network latency and delivering faster experimental execution with simplified code and improved scalability. See the tutorial for more details.

  • Partial Acquisition speeds up data retrieval by letting users selectively download only the measurement fields they need (e.g., final threshold results or normalized I/Q values), rather than pulling the full acquisition dataset every time. See the tutorial for more details.

  • QSM now supports current sourcing by sourcing voltage through a fixed or a changing load. Additionally, a safe current range can be set before sourcing current to ensure that the sourced current does not exceed the desired limits for user experiment. See the tutorial for more details.

  • Advanced frequency plan settings are added to the QRC. These settings allow to trade a slight decrease in SFDR (Spurious-Free-Dynamic-Range) for increased output power and input sensitivity for certain frequency ranges. See the tutorial for more details.

Fixes#

  • Fixed incorrect weighted integration results introduced in FW 2.0.0, where acquire_weighted returned data scaled by \(1/4\) with increased noise.

  • Fixed edge case where frequent reference clock changes cause calibration failure.

  • Fixed an issue where toggling the reference source without an external clock cable connected could cause the QRC to enter a kernel panic state, requiring a power cycle to recover. The QRC now handles this scenario without needing a power cycle.

  • Fixed incorrect QCoDeS parameter generation on the QRC. The number of input/output channels is now correctly calculated for QRC and RF modules, matching the physical SMA layout.

  • Fixed misleading function signatures on the QRC where auto-generated partial functions (e.g., get_max_in2_att) accepted a channel keyword argument that could silently override the intended channel. Passing unexpected keyword arguments now raises a runtime error.

  • Fixed the issue where multiple modules have the identical MAC address, causing constant disconnection issues on the modules. The fix applies retroactively to already-deployed modules and prevents recurrence on new units.

  • Fixed the issue that Sequencer.real_mode_en() was not set back to False by Cluster.reset(). Now whenever the cluster.reset() is called, the Sequencer.real_mode_en() goes back to False (previously True) which is the default value.

  • Fixed the issue that IOChannel.measure_mode() was ignored and coarse mode were used when measuring in QSM. Now once the user sets the measure_mode to one of the four options when sourcing voltage, that measure_mode is considered. The measure_mode is also maintained after the measured value is retrieved. For current sourcing, the measure_mode is set automatically based on the range in which the sourced current is measured at (depends on the chosen load).

Known issues#

  • cluster.update_sequences() silently fails if a sequence is passed as json file. Failure is expected, but the method should throw an exception.

  • QRC(dummy).get_current_frequency_plan() will throw an exception when called. Physical QRCs are not affected.

Qblox Instruments - 1.3.0#

Please refer to the Firmware section.

Qblox Scheduler - 1.0.0b6#

Below are combined changes from 1.0.0b5 and 1.0.0b6.

New feature#

  • Users can now sweep the beta parameter of DRAG-type pulses as a real-time loop variable.

  • Users can now sweep the phi and theta parameters of the Rxy rotation gate as real-time loop variables.

  • Users can now sweep the amplitude of chirp pulses as a real-time loop variable.

  • Users can now sweep the amplitude of ramp pulses as a real-time loop variable.

  • Qblox Scheduler now automatically parallelizes operations across the cluster using the Bulk API, delivering faster experiment execution with no code changes required. Note: it requires firmware 2.1.0.

  • Acquisition coords keys can now be shared between different acquisition channels.

Fixes#

  • Fixed edge case where consecutive phase updates are compiled incorrectly.

Known issues#

  • Plotting a pulse diagram of a schedule with >10000 repetitions can take a very long time. Workaround: reduce the number of repetitions when plotting.

  • cluster.time.sync_ext_trigger(slot=0) raises a Module 0 not connected error.

  • Passing a sequence as a filename e.g. sequence.json to cluster.update_sequences has no effect. Sequences must be passed as Python dicts.

Documentation#

  • We significantly improved the Q1ASM user guide. It features a clearer structure, and detailed explanations of the actions of every instruction on q1 core, rt core and signal path.

  • We added exciting new application examples making use of LINQ, both for superconducting and spin qubits. For example, we show how to use a golden section search in order to significantly speed up qubit tune up.

  • We further improved the documentation for LINQ.

  • And many small improvements across the entire documentation.

2026.04.0#

Highlights#

Performance improvements#

Inverse highpass filter#

Current sourcing in QSM#

Sweeps in QBS#

Firmware - 2.1.0#

Changes#

Fixes#

Qblox Instruments - 1.3.1#

Changes#

Fixes#

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).

  • The QSM ignores IOChannel.measure_mode() and always measures in coarse mode.

Qblox Scheduler - 1.0.0b4#

Changes#

Deprecations#

Fixes#

Documentation#

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.2#

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

Changes - 1.2.0#

  • 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.

Changes - 1.2.2#

  • Expand verbose logging to provide more granular detail during the update sequence.

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.

Fixes - 1.2.2#

  • Fixed Timeout error during device connection when connecting directly to a module.

  • Fixed several inconsistencies that prevented single-module automatic migration from functioning correctly.

  • Fixed logic error in qblox-cfg where –skip-version-check was enabled by default during firmware updates, even if not specified by the user.

  • Pin spirack dependency to a specific stable version to avoid broken upstream releases.

  • Enhance update process robustness by ensuring modules and the CMM are completely rebooted before proceeding or returning control to the user.

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).

  • The QSM ignores IOChannel.measure_mode() and always measures in coarse mode.

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

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

  2. In the event of a firmware-driver incompatibility for firmware 0.13.0, the error message wrongly identifies the version as 0.12.0. When in doubt, please always refer to the compatibility matrix.

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.