Skip to content

Releases: qBraid/qBraid

qBraid-SDK 0.11.1

24 Feb 17:57
148a1ff

Choose a tag to compare

Release 0.11.1 (Feb 24, 2026)

Summary

Added

  • Added IonQJob.cost() method to retrieve job cost information from the IonQ API (#1121)

Improved / Modified

  • Updated IonQ provider to use v0.4 API, including support for multi-circuit jobs, updated job status mappings (runningstarted), and enhanced measurement probability transformations (#1121)
  • Added degraded status handling for IonQ devices (#1121)
  • Refactored QbraidJob.result() to use qbraid_core.services.runtime.schemas.Result directly: removed dependency on ExperimentMetadata classes, added single ResultData.from_object(result, experiment_type) that builds from the core Result’s resultData, and pass time_stamps and cost through as Result details instead of metadata dump (#1123)
  • Refactored ResultData subclasses to handle API camelCase keys (measurementCounts, numSolutions, etc.) in their from_dict implementations; GateModelResultData.from_dict now uses .get() and a known-keys filter instead of mutating a copy (#1123)
  • QASM3-to-Braket conversion now supports QASM3 strings with physical qubits via a try/except workaround when PyQASM validation or transform fails (#1123)

Removed

  • Removed qbraid.runtime.experiment module (ExperimentMetadata, GateModelExperimentMetadata, AnnealingExperimentMetadata, AhsExperimentMetadata) and related tests; native job results now rely on the core Result schema and ResultData.from_object only (#1123)

Fixed

  • Fixed IonQ job submission to use updated API field names (targetbackend) and proper job type specification (#1121)
  • Fixed error mitigation parameter handling for IonQ jobs, now correctly nested under settings (#1121)

Dependencies

  • Add upper bound on pulser-core and pulser-simulation dev dependencies to >=1.4.0,<1.7.0 (#1122)
  • Increased upper bound on qbraid-qir dependency from <=0.5.0 to <=0.5.1 (#1123)

PRs Merged

  • Update: IonQ provider for qbraid runtime with ionq v0.4 by @TheGupta2012 in #1121
  • upper bound on pulser dep by @ryanhill1 in #1122
  • Result data + platform v2 post-release updates by @ryanhill1 in #1123
  • Bump project version to 0.11.1 by @github-actions[bot] in #1124

Full Changelog: v0.11.0...v0.11.1

qBraid-SDK 0.11.0

08 Feb 20:20
f861e1f

Choose a tag to compare

Release 0.11.0 (Feb 8, 2026)

Summary

Improved / Modified

Introduced several changes primarily focused on standardizing program serialization using the new Program schema from qbraid-core, refactoring the analog/ahs program modules, and updating dependencies for compatibility with qBraid Platform V2:

  • All serialize methods in program classes (analog, annealing, gate_model, etc.) now return a Program object from qbraid_core.services.runtime.schemas, replacing custom dictionary formats. This ensures a consistent API for program submission across all quantum program types.
  • The ahs module has been renamed to analog, with all relevant class and import names updated (e.g., AHSEncoderAnalogHamiltonianEncoder). This includes file renames and updates to __init__.py, ensuring clarity and alignment with terminology.
  • The ExperimentType, JobStatus, and DeviceStatus enums are now imported directly from qbraid_core, removing the local definition and reducing duplication.

Dependencies

  • Upgraded to qbraid-core>=0.2.0 to support qBraid Platform migration to V2 endpoints. See migration guide.

qBraid-SDK 0.10.2

08 Feb 16:51
4a6aeb0

Choose a tag to compare

Release 0.10.2 (Feb 8, 2026)

Summary

Deprecated

  • Deprecated qBraid V1 quantum jobs endpoints in favor of new V2 endpoints. See the API migration guide.

Which SDK version do I need?

Use case Install
Access legacy jobs (read results from a downloaded JSON file) pip install qbraid==0.10.2
Submit new quantum jobs through qBraid pip install qbraid>=0.11.0

Accessing legacy jobs: Download your jobs data from https://account-v2.qbraid.com/quantum-jobs, then use qBraid-SDK 0.10.2 to load and inspect results:

from qbraid.runtime import QbraidProvider, QbraidJob

provider = QbraidProvider(legacy_jobs_path="/path/to/legacy-qbraid-jobs.json")

job = QbraidJob("qbraid_device_id-jovyan-qjob-123abcmel6e9scpfm1zg", client=provider.client)

print(job.status())
# <COMPLETED: 'job has successfully run'>

result = job.result()

print(result.details["metadata"]["openQasm"])
# 'OPENQASM 2.0;\ninclude "qelib1.inc";\n\nqreg q[1];\ncreg c[1];\n\nmeasure q[0] -> c[0];'

print(result.data.get_counts())
# {'0': 99, '1': 1}

Submitting new jobs: As of February 8th, job submission via the native QbraidProvider requires qBraid-SDK 0.11.0 or later. Versions below 0.11.0 can no longer submit jobs to qBraid devices.

These changes apply only to job submission and management via the qBraid API. The AWS, Azure, IonQ, and OQC runtime providers are unaffected.

Read more: qBraid V2 platform migration.

PRs Merged

  • Set python version for gh pages [no ci] by @ryanhill1 in #1109
  • Add: legacy jobs support for QbraidProvider by @TheGupta2012 in #1116
  • Bump project version to 0.10.2 by @github-actions[bot] in #1117

Full Changelog: v0.10.1...v0.10.2

qBraid-SDK 0.10.1

14 Jan 04:23
d8cfa53

Choose a tag to compare

Release 0.10.1 (Jan 14, 2025)

Summary

Added

  • Added AzureQuantumDevice.avg_queue_time() method which returns int average queue time in min (#1097)

Improved / Modified

  • Added a transformation for programs targeting IonQ devices, converting all i gates to rz(0). This transformation is useful because IonQ devices do not support the identity gate directly. (#1102)
  • Updated number of shots used in Amazon Braket remote tests to minimum of 100 to match new lower bound of providers like IonQ (enforced by AWS, server-side) (#1089)
  • Updated QASM2 to QASM3 transpiler weight from 0.7 to 1.0 to reflect improved conversion reliability. (#1082)
  • For Amazon Braket devices, users can now use environment variables to define region name ("AWS_REGION") and endpoint url ("BRAKET_ENDPOINT"). This is useful when an application wraps over qBraid and does not have direct access to qBraid Provider class or AwsSession class. (#1100)

Removed

  • Removed qbraid-core[runner] dependency from qbraid[qir] extra. The only additional package that was being installed was psutil in order to support a function that tracks memory usage during a subprocess call to qir-runner. But people are mainly interested in this "extra" for the qbraid-qir conversions, and since this is outside of that scope, better to take it out and keep the dependencies lean. (#1083)

Fixed

  • Fixed OQCDevice.get_next_window() method with more robust ISO datetime string handling (#1097)
  • Fixed BraketQuantumTask.result() to correctly handle AnalogHamiltonianSimulationQuantumTaskResult given the fact the partial measurement qubits aren't applicable to that job/result type. (#1097)
  • Fixed OQC runtime tests by padding the date-time month/day with leading zero to ensure valid ISO format (#1103)

Dependencies

  • Updated qbraid-core requirement from >=0.1.39 to >=0.1.44,<0.2.0 (#1108)

PRs Merged

  • Reset CHANGELOG by @ryanhill1 in #1068
  • Change DOI link and badge in README.md by @ryanhill1 in #1069
  • Update test_pytket_draw & bump qbraid_core version by @ryanhill1 in #1070
  • Update pennylane requirement from <0.42 to <0.43 by @dependabot[bot] in #1073
  • Update qcs-sdk-python requirement from <0.21.20,>=0.21.12 to >=0.21.12,<0.21.21 by @dependabot[bot] in #1071
  • Fix automation for deploying to GitHub Pages on release by @Copilot in #1076
  • Update amazon-braket-sdk requirement from <1.103.0,>=1.83.0 to >=1.83.0,<1.104.0 by @dependabot[bot] in #1077
  • Update pytket-braket requirement from <0.45,>=0.30 to >=0.30,<0.46 by @dependabot[bot] in #1078
  • Remove qbraid-core[runner] from qir extra by @ryanhill1 in #1083
  • Update qcs-sdk-python requirement from <0.21.21,>=0.21.12 to >=0.21.12,<0.21.22 by @dependabot[bot] in #1080
  • Update amazon-braket-sdk requirement from <1.104.0,>=1.83.0 to >=1.83.0,<1.105.0 by @dependabot[bot] in #1081
  • update shots count in braket remote tasks to 100 by @ryanhill1 in #1089
  • Bump actions/checkout from 5 to 6 by @dependabot[bot] in #1088
  • Update amazon-braket-sdk requirement from <1.105.0,>=1.83.0 to >=1.83.0,<1.107.0 by @dependabot[bot] in #1087
  • Update weight to 1 for qasm transpilation by @TheGupta2012 in #1082
  • Update qcs-sdk-python requirement from <0.21.22,>=0.21.12 to >=0.21.12,<0.21.23 by @dependabot[bot] in #1091
  • Multi-provider runtime improvements + bug fixes by @ryanhill1 in #1097
  • fix oqc rt datetime format in test by @ryanhill1 in #1103
  • Replace i gate to rz(0) for IonQ devices by @yitchen-tim in #1102
  • Handle region and endpoint from environ for AWS devices by @yitchen-tim in #1100
  • Update amazon-braket-sdk requirement from <1.107.0,>=1.83.0 to >=1.83.0,<1.108.0 by @dependabot[bot] in #1099
  • Update qbraid-qir requirement from <=0.4.0,>=0.2.0 to >=0.2.0,<=0.5.0 by @dependabot[bot] in #1095
  • Bump codecov/codecov-action from 5.5.1 to 5.5.2 by @dependabot[bot] in #1096
  • Update sphinx-rtd-theme requirement from <3.1,>=1.3 to >=1.3,<3.2 by @dependabot[bot] in #1105
  • qbraid-core upper bound by @ryanhill1 in #1108
  • Bump project version to 0.10.1 by @github-actions[bot] in #1107

New Contributors

  • @Copilot made their first contribution in #1076

Full Changelog: v0.10.0...v0.10.1

qBraid-SDK 0.10.0

14 Oct 20:36
06fdcdc

Choose a tag to compare

Release 0.10.0 (Oct 14, 2025)

Summary

Improved / Modified

  • Support circuits that use non-contiguous qubit indices on IonQ device and simulators through Amazon Braket. A measurement is added to every unused qubit up to the max qubit index. The results are filtered such that it only returns the results for the original measurements. (#1059)
  • Change project license from GPL-3.0 to Apache-2.0. (#1064)

Dependencies

  • Updated cirq-core and cirq-ionq requirements from >=1.3,<1.6 to >=1.3,<1.7 (#1063)

PRs Merged

  • Pad measurement to non-contiguous qubits for IonQ device by @yitchen-tim in #1059
  • Reset changelog by @ryanhill1 in #1062
  • Update autoqasm requirement from <0.2,>=0.1.2 to >=0.1.2,<0.3 by @dependabot[bot] in #1056
  • Update pyqasm requirement from <0.6.0,>=0.5.0 to >=0.5.0,<1.1.0 by @dependabot[bot] in #1057
  • Update cirq requirement from >=1.3,<1.6 to >=1.3,<1.7 by @ryanhill1 in #1063
  • Update qcs-sdk-python requirement from <0.21.19,>=0.21.12 to >=0.21.12,<0.21.20 by @dependabot[bot] in #1066
  • Change license to Apache-2.0 by @ryanhill1 in #1064
  • Bump project version to 0.10.0 by @github-actions[bot] in #1067

Full Changelog: v0.9.10...v0.10.0

qBraid-SDK 0.9.10

16 Sep 19:16
18674b1

Choose a tag to compare

Release 0.9.10 (Sep 16, 2025)

Summary

Improved / Modified

  • Updated the QasmParserand transpilation from Cirq to PyQuil to be compatible with Cirq 1.5. Added testing for new behavior in Cirq 1.5.(#1049)

Dependencies

  • Updated cirq-core and cirq-ionq requirements from >=1.3,<1.5 to >=1.3,<1.6 (#1049)
  • Update qiskit-ibm-runtime dependency from >=0.25.0,<0.42 to >=0.39.0,<0.42 (#1052)

PRs Merged

  • Reset changelog + bump dev version by @ryanhill1 in #1044
  • Bump codecov/codecov-action from 5.5.0 to 5.5.1 by @dependabot[bot] in #1046
  • Bump actions/setup-python from 5 to 6 by @dependabot[bot] in #1047
  • Update pytket-braket requirement from <0.44,>=0.30 to >=0.30,<0.45 by @dependabot[bot] in #1045
  • QASM Parser and Related Transpilation Updated for Compatibility with Cirq v1.5 by @bdg221 in #1049
  • Update amazon-braket-sdk requirement from <1.101.0,>=1.83.0 to >=1.83.0,<1.103.0 by @dependabot[bot] in #1050
  • Update qiskit runtime dependency from 0.25.0 to 0.39.0 by @TheGupta2012 in #1052
  • Bump project version to 0.9.10 by @github-actions[bot] in #1053

New Contributors

  • @bdg221 made their first contribution in #1049

Full Changelog: v0.9.9...v0.9.10

qBraid-SDK 0.9.9

01 Sep 21:15
ba1b6b5

Choose a tag to compare

Release 0.9.9 (Sept 1, 2025)

Summary

Added

  • Added opaque runtime_options (dict) argument to QbraidDevice.submit() to include in job payload (#1017)
  • Added Equal1SimulationMetadata and Equal1SimulatorResultData classes to support processing of Equal 1 simulator v0.2.2 job data including base64 encoded "compiledOut" (#1017)

Improved / Modified

  • Skip remote Azure provider tests that now require payed plan (#1024)
  • Adds support for partial measurements on IonQ and Amazon Braket devices by automatically padding circuits with measurements on all qubits while tracking and filtering results to show only the originally measured qubits. (#1028)
  • Replaced execution_mode and device_name fields in the Equal1SimulationMetadata class with ir_type and noise_model to match data returned by Equal1 simulator v0.3.0 (#1035)
  • Moved decoding logic from Equal1SimulatorResultData class to the Equal1SimulationMetadata schema, ensuring that compiled outputs are automatically decoded when metadata is instantiated. For equal1_simulator jobs, the base64 decoded compiled output will now be accessible from a Result object as follows (#1040):
result = job.result()

compiled_output = result.details['metadata']['compiledOutput']

Removed

  • Removed benchmarking module from tests as not relevant or used (#1026)

Fixed

  • Fixed bug that returned a single job instead of a list of jobs after batch job submission in the native provider runtime for QuEra Aquila using Bloqade Analog (#1026)
  • Fixed the boto3.client initialization by adding the region_name parameter in _get_partial_measurement_qubits_from_tags method (#1034)
  • Fixed bug that resulted in AttributeError: 'NoneType' object has no attribute 'service' when checking BraketDevice.availability_window(). Now ensures that AwsDevice.properties is defined using refresh_metadata() before proceeding with availability check. (#1041)

Dependencies

  • Reset Cirq dependency extra upper-bound to <1.5 (#1026)
  • Updated pyqasm requirement from >=0.3.2,<0.5 to >=0.5.0,<0.6.0 (#1032)
  • Updated pennylane requirement from <0.42 to >=0.42.3,<0.43 (#1034)

PRs Merged

New Contributors

Full Changelog: v0.9.8...v0.9.9

qBraid-SDK 0.9.8

22 Jul 21:59
be9d182

Choose a tag to compare

Release 0.9.8 (Jul 22, 2025)

Summary

Improved / Modified

  • Removed legacy pkg_resources logic for loading entry points (qbraid._entrypoints), as support for Python 3.9 has been dropped and the project now requires Python 3.10 or higher. (#1002)
  • Populated basis gates property in profile of AWS Braket provider device (#1003)
  • Emit a UserWarning instead of raising a ValueError when checking for the sum of result probabilities from job to be equal
    to 1 (#1004).
  • House keeping updates (#1012)
    • Removed deprecated modules (qbraid.programs.circuits, qbraid.runtime.qiskit, and qbraid.runtime.braket)
    • Updated readme, contributing, citation, and various project config files.
  • Updated QiskitRuntimeProvider default channel to ibm_quantum_platform in preparation for the sunsetting of the IBM Quantum channel in favor of IBM Cloud. See qiskit-ibm-runtime updated instructions for account setup. (#1011)
  • Implemented autoqasm_to_qasm3 conversion extra in transpiler for support of AutoQASM to QASM3 conversion. Added "autoqasm" program type to program registry. (#1013)

Fixed

  • Fixed handling of IBM job results for different creg names. Specifically, generalized measurements() and get_counts() methods in QiskitGateModelResultBuilder to account for mixed classical register names, and for classical register names other than "c" and "meas". (#1011)

Dependencies

  • Updated qiskit-ibm-runtime requirement from <0.39,>=0.25.0 to >=0.25.0,<0.41 (#991)
  • Updated pydantic requirement from >2.0.0 to >2.0.0,<=2.11.1 (#991)
  • Remove qiskit-qir (deprecated) from qbraid[qir] dependency extras (#1001)
  • Updated amazon-braket-sdk requirement from >=1.83.0,<1.94.0 to >=1.83.0,<1.96.0 (#1018)

PRs Merged

  • Remove qiskit-qir from qbraid[qir] extra [no ci] by @ryanhill1 in #1001
  • Update amazon-braket-sdk requirement from <1.92.0,>=1.83.0 to >=1.83.0,<1.94.0 by @dependabot[bot] in #998
  • Remove pkg_resources from entrypoints logic by @ryanhill1 in #1002
  • Update pytket-braket requirement from <0.42,>=0.30 to >=0.30,<0.43 by @dependabot[bot] in #999
  • Update qiskit-ibm-runtime requirement from <0.39,>=0.25.0 to >=0.25.0,<0.41 by @dependabot[bot] in #991
  • Populate basis gates in AWS Braket devices by @cosenal in #1003
  • fix: alter raise of warning instead of value error for probability sum. by @vprusso in #1004
  • Update pyqasm requirement from <0.4.0,>=0.3.2 to >=0.3.2,<0.5.0 by @dependabot[bot] in #1006
  • Update cirq-core requirement from <1.5,>=1.3 to >=1.3,<1.6 by @dependabot[bot] in #1005
  • housekeeping updates by @ryanhill1 in #1012
  • IBM: handling of job results for different creg names + default platform by @ryanhill1 in #1011
  • Update qbraid-qir requirement from <=0.3.2,>=0.2.0 to >=0.2.0,<=0.4.0 by @dependabot[bot] in #1015
  • autoqasm-qasm3 conversion extra by @LukeAndreesen in #1014
  • Update qcs-sdk-python requirement from <0.21.13,>=0.21.12 to >=0.21.12,<0.21.19 by @dependabot[bot] in #1008
  • prep release by @ryanhill1 in #1018
  • Bump project version to 0.9.8 by @github-actions[bot] in #1019

New Contributors

Full Changelog: v0.9.7...v0.9.8

qBraid-SDK 0.9.7

13 Jun 22:14
979bcda

Choose a tag to compare

Release 0.9.7 (June 13, 2025)

Summary

Added

  • Added CudaQKernel.serialize method that converts cudaq program to QIR string for run_input compatible format for QbraidDevice.submit. (#972)
  • Added support for batch jobs for devices from Azure provider. The AzureQuantumDevice.submit method now accepts single and batched qbraid.programs.QPROGRAM inputs. (#953)
  • Added ax_margins argument to plot_conversion_graph to prevent possible clipping. (#993)

Improved / Modified

  • Updated TimeStamps schema to auto-compute executionDuration from createdAt and endedAt if not explicitly provided. (#983)
  • Enhanced TimeStamps to accept both datetime.datetime objects for createdAt and endedAt (previously only accepted ISO-formatted strings). (#983)
  • Added a measurement_probabilties argument to the GateModelResultData class. (#785)

Removed

  • Removed queue_position from result details, as it is always None and not applicable. (#983)

Fixed

  • Fixed lazy importing bug in plot_histogram method (#972)
  • Fixed bug which caused all braket conversions to be unavailable if cirq was not installed due to an eager top-level import in braket_to_cirq.py which should have been done lazily (#982)
  • Made Pulser unit test version-agnostic to support any installed Pulser version. (#983)
  • Fixed the bug that included unregistered program type in ConversionGraph. (#986)

Dependencies

  • Migrated to setuptools>=77 due to TOML-table based project.license deprecation in favor of SPDX expression in compliance with PEP 639 (#973)
  • Bumped qbraid-core dependency to v0.1.39 (#975)

PRs Merged

New Contributors

Full Changelog: v0.9.6...v0.9.7

qBraid-SDK 0.9.6

02 May 21:56
b447f33

Choose a tag to compare

Release 0.9.6 (May 2, 2025)

Summary

Added

  • Added QbraidJob.async_result() to support async result retrieval using await. (#945)
  • Added QbraidDevice.set_target_program_type, allowing you to set a specific ProgramSpec (from TargetProfile) alias as the default (#952). For example, if a device supports both "qasm2" and "qasm3", you can now restrict transpilation to one format:
from qbraid.runtime import IonQProvider

provider = IonQProvider()

device = provider.get_device("simulator")

device.metadata()["runtime_config"]["target_program_type"] # ['qasm2', 'qasm3']

device.set_target_program_type("qasm2")

device.metadata()["runtime_config"]["target_program_type"] # 'qasm2'

However the original TargetProfile.program_spec value remains frozen:

device.profile.program_spec
# [<ProgramSpec('builtins.str', 'qasm2')>,
#  <ProgramSpec('builtins.str', 'qasm3')>]
  • Added support for Pasqal devices through the AzureQuantumProvider with pulser program type (#947). For example:
import numpy as np
import pulser
from azure.quantum import Workspace
from qbraid.runtime import AzureQuantumProvider

connection_string = "[Your connection string here]"
workspace = Workspace.from_connection_string(connection_string)

provider = AzureQuantumProvider(workspace=workspace)

input_data = {}

qubits = {
    "q0": (0, 0),
    "q1": (0, 10),
    "q2": (8, 2),
    "q3": (1, 15),
    "q4": (-10, -3),
    "q5": (-8, 5),
}
register = pulser.Register(qubits)

sequence = pulser.Sequence(register, pulser.DigitalAnalogDevice)
sequence.declare_channel("ch0", "rydberg_global")

amp_wf = pulser.BlackmanWaveform(1000, np.pi)
det_wf = pulser.RampWaveform(1000, -5, 5)
pulse = pulser.Pulse(amp_wf, det_wf, 0)
sequence.add(pulse, "ch0")

device = provider.get_device("pasqal.sim.emu-tn")

job = device.run(sequence, shots=1)

job.wait_for_final_state()

job.status()  # <COMPLETED: 'job has successfully run'>

result = job.result()

result.data.get_counts()  # {'100110': 1}
  • Added support for transpiling between pyqpanda3 and QASM2 with pyqpanda3 program type (#963)

Improved / Modified

  • Prepped tests for supporting qiskit>=2.0 (#955)
  • Updated the qbraid.runtime.aws.BraketProvider to include an aws_session_token during initialization. Users can now choose to supply their temporary AWS credentials instead of permanent account secrets to access AWS - (#968)
from qbraid.runtime.aws import BraketProvider

aws_access_key = "YOUR_TEMP_ACCESS_KEY"
aws_secret_key = "YOUR_TEMP_SECRET_KEY"
aws_session_token = "YOUR_CURRENT_SESSION_TOKEN"

provider = BraketProvider(aws_access_key, aws_secret_key, aws_session_token)
print(provider.get_devices())

# [<qbraid.runtime.aws.device.BraketDevice('arn:aws:braket:us-west-1::device/qpu/rigetti/Ankaa-3')>,
#  <qbraid.runtime.aws.device.BraketDevice('arn:aws:braket:us-east-1::device/qpu/quera/Aquila')>,
#  ...]

Removed

  • Removed the strict=False parameter from the pydantic_core.core_schema.union_schema() calls in the __get_pydantic_core_schema__ method(s) in qbraid.runtime.schemas.base. strict parameter no longer included in the pydantic-core API for that method as of release v0.2.30, PR #1638. (#946)

Fixed

  • Fixed Amazon Braket remote test by changing catch JobStateError to TimeoutError (#948)
  • Fixed upper bound of html length check in pytket circuit drawer test (#950)
  • Fixed simulator check for Azure target profiles (#956)

Dependencies

  • Added pydantic-core to project requirements (#946)
  • Updated pyqasm dependency to >=0.3.2, <0.4.0 (#964)

PRs Merged

New Contributors

Full Changelog: v0.9.5...v0.9.6