Skip to main content
Device ID: qbraid:quobly:sim:alloy-forge  ·  15 qubits  ·  silicon spin qubits  ·  free to run  ·  accessed through QbraidProvider
Alloy Forge is Quobly’s physics-based emulator of Pioneer, their 10-qubit silicon spin-qubit QPU. Quobly builds qubits from electron spins in silicon, manufactured on standard CMOS processes, so the error model the emulator reproduces is a semiconductor one rather than the superconducting or trapped-ion behavior you may be used to. The emulator goes wider than the hardware: 15 qubits, in both noiseless and noisy modes, on a linear nearest-neighbor coupling map.
Alloy Forge currently costs 0 credits to run. You still need a qBraid API key, but no Quobly account and no payment. See Pricing.

Quick start

One thing in that output surprises almost everyone: the distribution is not clean, because noise is on by default.

Runtime options

Alloy Forge takes three device options. They are passed as a dict through runtime_options, not as keyword arguments:
Device options do not go in the signature. This raises TypeError:
Put them in runtime_options instead:
shots is the exception — it is a first-class argument of run(). The options documented on the Runtime Options page (transpile, transform, validate, prepare) are a different thing again: those are pipeline steps, set with device.set_options().

noise is on by default

Unlike most simulators on qBraid, Alloy Forge applies its hardware noise model unless you tell it not to. A plain device.run(circuit, shots=200) is a noisy run.
The distinction is the point of the device — a noiseless run of a Bell pair gives you exactly two outcomes, while the noisy run shows what Pioneer’s silicon spin qubits would actually return.

seed makes noisy runs reproducible

Two runs with the same seed return bit-identical counts, noise included:
Use it for anything you need to reproduce: notebooks, tests, tutorials, recorded demos.

Reading the results

Counts match your circuit’s width

Results come back at your circuit’s own width — a two-qubit circuit returns two-bit keys. Qubit ordering is little-endian: qubit 0 is the rightmost bit.

Native gates and the coupling map

Pioneer’s native gate set is RX, RY, RZ for single-qubit rotations and RZZ for the two-qubit interaction. RZZ is only physically available between adjacent qubits on the linear array: 0–1, 1–2, 2–3, and so on. You do not have to write circuits in that gate set. Decomposition happens inside the emulator, after submission:
Unlike Rigetti or IonQ, qBraid does not rewrite your gates for this device. An h/cx circuit reaches Quobly as h/cx and Quobly transpiles it to RX/RY/RZ/RZZ on its side.
You do not have to route your own circuits. A two-qubit gate on non-adjacent qubits is accepted and runs, and the counts come back under the qubit indices you wrote.That is not free, though. To satisfy the connectivity constraint the transpiler places your logical qubits wherever the chain allows, which can be a long way from the indices you named — Alloy Forge then reports each bit at the position of the physical qubit that carried it, and qBraid maps it back for you before returning the result.What a non-local circuit does cost is native two-qubit gates, and the noise model charges for every one of them. Measured against the Pioneer target:A chain costs exactly what you wrote. A star costs about three times as much, and a QFT more than four. If a circuit can be expressed along neighboring pairs (i, i+1), that is the version worth running — not for correctness, but for fidelity.
A GHZ state written as a nearest-neighbor ladder satisfies that constraint with no routing at all:

Execution time

Alloy Forge integrates the physics shot by shot, so the shot count dominates the wall clock, more than circuit width does. The same 4-qubit GHZ circuit: Roughly 20 seconds of fixed overhead plus a per-shot cost. Across a 2-to-9 qubit GHZ sweep at 200 shots, individual jobs ran from 22 s to 89 s.
Develop at 100–200 shots and raise it only for the final run. Batch submission is not supported on this device (profile.batch_job_support is False), so a sweep is sequential — budget the wall clock before you launch one.

Example: measuring noise accumulation

Growing a GHZ chain one qubit at a time is a direct read on how quickly the Pioneer error model accumulates. The metric is the share of shots landing in |0…0⟩ or |1…1⟩, which is 100% for an ideal GHZ state.
Measured on the live device: The noiseless column is flat at 100% by construction; the noisy column is the emulator’s answer to “how big a GHZ state can Pioneer hold together?”

Troubleshooting