Interactive Tools

I build these interactive tools just for fun — small visualizers and simulators that bring quantum computing concepts to life. They're meant to make abstract ideas tangible, whether you're a researcher, a student, or just curious about the quantum world.

Qubits and States

1 tool

Where the intuition starts: how a single qubit actually lives on the Bloch sphere, and what gates and measurements do to it.

Interactive Visualizer

Interactive Bloch Sphere

Explore single-qubit pure states on the Bloch sphere in full 3D. Apply gates (\(X\), \(Y\), \(Z\), \(H\), \(S\), \(T\), \(R_{x,y,z}\)) as animated rotations about their axis, read live measurement probabilities and collapse the state, drag \(\theta\)/\(\phi\) sliders — or drive it all from the keyboard.

3D Interactive Animated Gates Measurement Preset States Keyboard Shortcuts
Launch Tool

Error-Correcting Codes

2 tools

Sandboxes for the codes themselves. Inject noise into a real code patch, watch the stabilizers flag it, and see how the code's structure decides what it can protect.

Topological Code

Surface Code Sandbox

Learn Quantum Error Correction end to end. Inject Pauli \(X\), \(Y\), \(Z\) errors — or depolarizing noise — on a distance-\(d\) (up to \(d=9\)) surface-code patch, watch the stabilizers flag syndromes live, then run a minimum-weight matching decoder to correct them and see whether a logical error slipped through.

Matching Decoder Logical Errors Depolarizing Noise Live Syndromes Up to \(d=9\)
Launch Sandbox
qLDPC Code

Gross Code Sandbox

Step beyond the surface code into qLDPC territory. The \([[144,12,12]]\) gross code packs 12 logical qubits into 144 physical ones using weight-6 non-local stabilizers. Inject Pauli errors, then hover any check to trace the six qubits it reaches across the torus.

Bivariate Bicycle \(k=12\) Logicals Weight-6 Checks Tanner Graph Depolarizing Noise
Launch Sandbox

Decoding Algorithms

3 tools

The algorithms that turn a syndrome back into a correction, in the order the field discovered them. Each one runs end to end, one step at a time, with every matrix, message and cluster drawn as it happens.

Graph Matching

MWPM Decoder

The original surface-code decoder, from Dennis, Kitaev, Landahl and Preskill. Every data qubit is an edge of the matching graph and every stabilizer a node, so an error chain is invisible except at its two endpoints: the defects. Watch breadth-first search measure the distance between every pair, the weighted matching graph get assembled, and an exact minimum-weight perfect matching pick the lightest pairing (each defect free to escape to a boundary instead). Then the correction chains go down one at a time and the run ends on the real question: is \(E \oplus C\) a harmless loop, or a logical error?

Perfect Matching Boundary Escapes MWPM vs Greedy Homology Check Step by Step
Launch Decoder
⊥
Near-Linear Time

Union-Find Decoder

Follow the near-linear-time Union-Find decoder run end to end on a random parity-check matrix. Inject an erasure, grow odd clusters by half-edges until every cluster is neutral, then peel the spanning forest leaf by leaf to read off the correction \(\hat e\) — with \(H\), the syndrome \(s = He\), the disjoint-set parent[] array and the residual \(H(e\oplus\hat e)\) all shown live at every step.

Cluster Growth Peeling Decoder Disjoint-Set Live \(H\) Matrix Step by Step
Launch Decoder
Message Passing

BP / OSD / LSD Decoder

Run a quantum-LDPC decoder end to end on a Tanner graph. Watch belief propagation pass soft messages between checks \(C_i\) and qubits \(q_j\) to build per-qubit log-likelihood ratios, then — when BP stalls on a trapping set — finish with OSD (a global most-reliable-basis solve) or LSD (clusters grown around the unsatisfied checks and solved locally). Every message, belief \(\Lambda_j\) and solve of \(H\hat e = s\) is drawn and written out, step by step.

Belief Propagation BP + OSD BP + LSD Live Beliefs Step by Step
Launch Decoder

More Tools Coming Soon

I'm always tinkering with new ideas. More interactive tools are on the way — stay tuned!