One wire per logical qubit. A bracket names the code a block starts in; a ket is its preparation; a wire without a ket is an open input — the circuit is then a channel on it (the object a diamond-norm error is estimated for).
A code switch is a box naming both codes; gates after it come from the new code.
Gates come from the store: the menu lists what exists for the wire's current code, with
its verification status. When the store has none, you can still place a placeholder — amber
dashed with a small ? badge — to sketch the circuit and submit a
protocol for it later.
Multi-wire gates (CNOT, CZ, CCZ, Toffoli) draw the quantikz control / target; a meter
ends a wire and opens a classical double line.
Magic injection: a block prepared as |T⟩ is consumed by an inject box spanning it and
the data block; its wire ends there with an outcome mi for the fix-up.
Classical feedback: a gate can be conditioned on an earlier outcome
mi; a double line runs from that meter's wire to the gate.
in
prepared as
Run locally
noise
p
shots
Downloads a self-contained .ftqcp.json: the drawn
circuit as a store composite, a channel recipe (measure: "channel") following the page's
decoding workflow (decoding workflow ▸, below the circuit), and every referenced entry.
Or run it offline:
Python ≥ 3.12 and a C++ compiler (xtim builds on install).
pip install "ftqcp[run] @ git+https://github.com/ikim-quantum/ftqcp"
ftqcp run <file>