Skip to content

CLI / SDK Quickstart

This tutorial walks you through installing the QubitHub CLI, running your first quantum circuit, and publishing changes — all from the terminal.

Time to complete: ~5 minutes

Terminal window
pip install qubithub

This installs both the Python SDK and the qubithub CLI. Verify the install:

Terminal window
qubithub --version # e.g. qubithub 0.2.0
qubithub --help

Interactive login (opens a prompt):

Terminal window
qubithub login

Enter your email and password when prompted.

Non-interactive login (CI/CD, scripts):

Terminal window
# With an API key
qubithub login --api-key qh_abc123...
# With an environment variable
export QUBITHUB_API_KEY=qh_abc123...

Verify you’re authenticated:

Terminal window
qubithub whoami

List available circuits:

Terminal window
qubithub circuits list

Filter by framework:

Terminal window
qubithub circuits list --framework qiskit

Filter by tag:

Terminal window
qubithub circuits list --tag entanglement

View details of a specific circuit:

Terminal window
qubithub circuits info QubitHub/bell-state

Execute a circuit and watch the results:

Terminal window
qubithub execute QubitHub/bell-state --shots 1024 --watch

The --watch flag polls until the run completes and displays a histogram of measurement results.

Output (example):

✓ Resolved QubitHub/bell-state → abc123
Submitted run run_456 on qiskit_aer (1024 shots)
⣿ Polling... completed
Measurement Histogram (1024 shots)
|00⟩ ████████████████████ 512 (50.0%)
|11⟩ ████████████████████ 512 (50.0%)

For JSON output (useful for scripting), pass the global --format flag before the command:

Terminal window
qubithub --format json execute QubitHub/bell-state --shots 1024 --watch

Clone a circuit to your local machine to inspect it, run it, or use it as a starting point. qubithub clone uses git when it’s available — you get the full commit history — and falls back to a flat HTTP file download otherwise:

Terminal window
qubithub clone QubitHub/bell-state
cd bell-state

A circuit repository typically contains:

  • circuit.py — the quantum circuit code
  • qubithub.toml — circuit manifest (metadata)
  • README.md — documentation
  • metadata.json — auto-generated metadata

Open the files in your editor to see how the circuit works.

When you’ve edited a circuit you own — one you created (see the next step) or a fork of someone else’s — publish a new version with:

Terminal window
qubithub circuits push

The CLI validates your qubithub.toml, uploads all files, and creates a new version.

Scaffold a new circuit project:

Terminal window
qubithub circuits init my-algorithm --framework qiskit

This generates a directory with template files:

my-algorithm/
├── circuit.py # Your circuit code
├── qubithub.toml # Manifest (edit this!)
├── README.md # Documentation
└── .gitignore # Sensible ignore defaults

Edit the files, then push. A brand-new circuit needs --create on its first push so the server registers it:

Terminal window
cd my-algorithm
qubithub circuits push --create
CommandDescription
qubithub loginAuthenticate (interactive or --api-key)
qubithub logoutClear stored credentials
qubithub whoamiShow current user
qubithub execute <repo>Execute a circuit
qubithub clone <repo>Clone a circuit (git, with HTTP fallback)
qubithub circuits listBrowse circuits
qubithub circuits info <repo>Circuit details
qubithub circuits pushUpload local circuit (--create for new)
qubithub circuits init <name>Scaffold new circuit
qubithub circuits fork <repo>Fork a circuit
qubithub circuits metadataShow parsed manifest (-f json|toml)
qubithub runs listList your runs
qubithub runs info <id>Run details and results
qubithub runs cancel <id>Cancel a running execution
qubithub runs statsShow run statistics
qubithub keys createCreate an API key
qubithub keys listList API keys
qubithub keys revoke <id>Revoke an API key
qubithub config set <key> <val>Set a CLI default
qubithub config get <key>Get a CLI default
qubithub config listList all CLI defaults
qubithub config unset <key>Remove a CLI default

The qubithub package also exposes a Python client:

from qubithub import QubitHubClient
from qubithub.models import RunCreateRequest
client = QubitHubClient(api_key="qh_abc123...")
# List circuits
circuits = client.list_circuits(framework="qiskit")
for c in circuits.circuits:
print(f"{c.slug} ({c.framework}) — {c.title}")
# Execute a circuit
run = client.create_run(RunCreateRequest(
circuit_id="<circuit-uuid>",
backend_name="qiskit_aer",
shots=1024,
))