QuipNetwork/quip-minerPublic

The quip network mining stack. This includes a coordinator and links all of the official quip network miners.

AI summary: The core mining stack and coordinator for the Quip Network's quantum-inspired Substrate chain.

Stars
11.6K
Forks
159
Watchers
33
Open issues
3
Open PRs
0
Contributors
~3
Commits
1.4K
Branches
13

PythonAGPL-3.0Created Jan 16, 2026Last push 10d ago

Star history

since Jan 25, 2026
05K10KJan 2026Mar 2026May 2026Jul 2026
11.6K stars as of Jul 28, 2026, tracked back to Jan 25, 2026. Historical curve reconstructed from public GitHub event archives, calibrated to the current total.

Contribution activity

commits per day, last 52 weeks
AugSepOctNovDecJanFebMarAprMayJunJulMonWedFri2025-08-03: 0 commits2025-08-04: 0 commits2025-08-05: 0 commits2025-08-06: 0 commits2025-08-07: 0 commits2025-08-08: 0 commits2025-08-09: 0 commits2025-08-10: 0 commits2025-08-11: 0 commits2025-08-12: 0 commits2025-08-13: 0 commits2025-08-14: 0 commits2025-08-15: 0 commits2025-08-16: 0 commits2025-08-17: 0 commits2025-08-18: 0 commits2025-08-19: 1 commit2025-08-20: 5 commits2025-08-21: 0 commits2025-08-22: 0 commits2025-08-23: 5 commits2025-08-24: 1 commit2025-08-25: 0 commits2025-08-26: 0 commits2025-08-27: 4 commits2025-08-28: 21 commits2025-08-29: 1 commit2025-08-30: 10 commits2025-08-31: 9 commits2025-09-01: 28 commits2025-09-02: 0 commits2025-09-03: 18 commits2025-09-04: 24 commits2025-09-05: 10 commits2025-09-06: 1 commit2025-09-07: 0 commits2025-09-08: 8 commits2025-09-09: 7 commits2025-09-10: 27 commits2025-09-11: 7 commits2025-09-12: 0 commits2025-09-13: 0 commits2025-09-14: 0 commits2025-09-15: 0 commits2025-09-16: 5 commits2025-09-17: 12 commits2025-09-18: 0 commits2025-09-19: 3 commits2025-09-20: 0 commits2025-09-21: 2 commits2025-09-22: 4 commits2025-09-23: 0 commits2025-09-24: 1 commit2025-09-25: 0 commits2025-09-26: 0 commits2025-09-27: 0 commits2025-09-28: 0 commits2025-09-29: 3 commits2025-09-30: 0 commits2025-10-01: 2 commits2025-10-02: 1 commit2025-10-03: 0 commits2025-10-04: 0 commits2025-10-05: 0 commits2025-10-06: 0 commits2025-10-07: 0 commits2025-10-08: 0 commits2025-10-09: 0 commits2025-10-10: 0 commits2025-10-11: 0 commits2025-10-12: 0 commits2025-10-13: 0 commits2025-10-14: 1 commit2025-10-15: 0 commits2025-10-16: 4 commits2025-10-17: 4 commits2025-10-18: 0 commits2025-10-19: 5 commits2025-10-20: 1 commit2025-10-21: 0 commits2025-10-22: 0 commits2025-10-23: 0 commits2025-10-24: 4 commits2025-10-25: 0 commits2025-10-26: 0 commits2025-10-27: 9 commits2025-10-28: 7 commits2025-10-29: 1 commit2025-10-30: 0 commits2025-10-31: 0 commits2025-11-01: 0 commits2025-11-02: 0 commits2025-11-03: 1 commit2025-11-04: 1 commit2025-11-05: 5 commits2025-11-06: 8 commits2025-11-07: 1 commit2025-11-08: 0 commits2025-11-09: 0 commits2025-11-10: 0 commits2025-11-11: 0 commits2025-11-12: 0 commits2025-11-13: 0 commits2025-11-14: 0 commits2025-11-15: 0 commits2025-11-16: 0 commits2025-11-17: 0 commits2025-11-18: 3 commits2025-11-19: 1 commit2025-11-20: 0 commits2025-11-21: 3 commits2025-11-22: 0 commits2025-11-23: 0 commits2025-11-24: 0 commits2025-11-25: 0 commits2025-11-26: 7 commits2025-11-27: 1 commit2025-11-28: 4 commits2025-11-29: 4 commits2025-11-30: 0 commits2025-12-01: 3 commits2025-12-02: 3 commits2025-12-03: 0 commits2025-12-04: 0 commits2025-12-05: 0 commits2025-12-06: 0 commits2025-12-07: 0 commits2025-12-08: 0 commits2025-12-09: 0 commits2025-12-10: 0 commits2025-12-11: 0 commits2025-12-12: 3 commits2025-12-13: 0 commits2025-12-14: 0 commits2025-12-15: 0 commits2025-12-16: 0 commits2025-12-17: 0 commits2025-12-18: 0 commits2025-12-19: 0 commits2025-12-20: 0 commits2025-12-21: 0 commits2025-12-22: 0 commits2025-12-23: 0 commits2025-12-24: 0 commits2025-12-25: 0 commits2025-12-26: 0 commits2025-12-27: 0 commits2025-12-28: 0 commits2025-12-29: 0 commits2025-12-30: 0 commits2025-12-31: 0 commits2026-01-01: 0 commits2026-01-02: 0 commits2026-01-03: 0 commits2026-01-04: 0 commits2026-01-05: 0 commits2026-01-06: 0 commits2026-01-07: 0 commits2026-01-08: 0 commits2026-01-09: 0 commits2026-01-10: 0 commits2026-01-11: 0 commits2026-01-12: 0 commits2026-01-13: 0 commits2026-01-14: 0 commits2026-01-15: 4 commits2026-01-16: 9 commits2026-01-17: 0 commits2026-01-18: 0 commits2026-01-19: 0 commits2026-01-20: 0 commits2026-01-21: 0 commits2026-01-22: 0 commits2026-01-23: 0 commits2026-01-24: 0 commits2026-01-25: 0 commits2026-01-26: 0 commits2026-01-27: 0 commits2026-01-28: 0 commits2026-01-29: 0 commits2026-01-30: 0 commits2026-01-31: 0 commits2026-02-01: 0 commits2026-02-02: 0 commits2026-02-03: 0 commits2026-02-04: 14 commits2026-02-05: 1 commit2026-02-06: 0 commits2026-02-07: 0 commits2026-02-08: 0 commits2026-02-09: 0 commits2026-02-10: 0 commits2026-02-11: 0 commits2026-02-12: 0 commits2026-02-13: 0 commits2026-02-14: 0 commits2026-02-15: 0 commits2026-02-16: 0 commits2026-02-17: 0 commits2026-02-18: 0 commits2026-02-19: 0 commits2026-02-20: 0 commits2026-02-21: 0 commits2026-02-22: 0 commits2026-02-23: 0 commits2026-02-24: 0 commits2026-02-25: 0 commits2026-02-26: 0 commits2026-02-27: 0 commits2026-02-28: 0 commits2026-03-01: 0 commits2026-03-02: 13 commits2026-03-03: 0 commits2026-03-04: 0 commits2026-03-05: 6 commits2026-03-06: 3 commits2026-03-07: 0 commits2026-03-08: 1 commit2026-03-09: 2 commits2026-03-10: 0 commits2026-03-11: 0 commits2026-03-12: 7 commits2026-03-13: 0 commits2026-03-14: 4 commits2026-03-15: 0 commits2026-03-16: 5 commits2026-03-17: 3 commits2026-03-18: 4 commits2026-03-19: 0 commits2026-03-20: 0 commits2026-03-21: 0 commits2026-03-22: 0 commits2026-03-23: 15 commits2026-03-24: 12 commits2026-03-25: 31 commits2026-03-26: 1 commit2026-03-27: 0 commits2026-03-28: 0 commits2026-03-29: 0 commits2026-03-30: 1 commit2026-03-31: 3 commits2026-04-01: 13 commits2026-04-02: 19 commits2026-04-03: 5 commits2026-04-04: 0 commits2026-04-05: 0 commits2026-04-06: 0 commits2026-04-07: 6 commits2026-04-08: 1 commit2026-04-09: 0 commits2026-04-10: 0 commits2026-04-11: 0 commits2026-04-12: 0 commits2026-04-13: 0 commits2026-04-14: 0 commits2026-04-15: 20 commits2026-04-16: 35 commits2026-04-17: 15 commits2026-04-18: 0 commits2026-04-19: 0 commits2026-04-20: 0 commits2026-04-21: 10 commits2026-04-22: 13 commits2026-04-23: 14 commits2026-04-24: 4 commits2026-04-25: 0 commits2026-04-26: 0 commits2026-04-27: 0 commits2026-04-28: 0 commits2026-04-29: 0 commits2026-04-30: 3 commits2026-05-01: 0 commits2026-05-02: 0 commits2026-05-03: 0 commits2026-05-04: 0 commits2026-05-05: 0 commits2026-05-06: 0 commits2026-05-07: 0 commits2026-05-08: 0 commits2026-05-09: 0 commits2026-05-10: 0 commits2026-05-11: 0 commits2026-05-12: 3 commits2026-05-13: 16 commits2026-05-14: 6 commits2026-05-15: 17 commits2026-05-16: 0 commits2026-05-17: 7 commits2026-05-18: 1 commit2026-05-19: 1 commit2026-05-20: 9 commits2026-05-21: 15 commits2026-05-22: 5 commits2026-05-23: 57 commits2026-05-24: 8 commits2026-05-25: 3 commits2026-05-26: 8 commits2026-05-27: 0 commits2026-05-28: 6 commits2026-05-29: 38 commits2026-05-30: 59 commits2026-05-31: 63 commits2026-06-01: 14 commits2026-06-02: 3 commits2026-06-03: 174 commits2026-06-04: 20 commits2026-06-05: 0 commits2026-06-06: 0 commits2026-06-07: 0 commits2026-06-08: 0 commits2026-06-09: 6 commits2026-06-10: 0 commits2026-06-11: 0 commits2026-06-12: 0 commits2026-06-13: 0 commits2026-06-14: 0 commits2026-06-15: 0 commits2026-06-16: 1 commit2026-06-17: 0 commits2026-06-18: 6 commits2026-06-19: 0 commits2026-06-20: 0 commits2026-06-21: 0 commits2026-06-22: 2 commits2026-06-23: 4 commits2026-06-24: 7 commits2026-06-25: 2 commits2026-06-26: 0 commits2026-06-27: 0 commits2026-06-28: 10 commits2026-06-29: 14 commits2026-06-30: 2 commits2026-07-01: 0 commits2026-07-02: 14 commits2026-07-03: 20 commits2026-07-04: 15 commits2026-07-05: 4 commits2026-07-06: 0 commits2026-07-07: 1 commit2026-07-08: 0 commits2026-07-09: 0 commits2026-07-10: 0 commits2026-07-11: 1 commit2026-07-12: 0 commits2026-07-13: 4 commits2026-07-14: 1 commit2026-07-15: 0 commits2026-07-16: 4 commits2026-07-17: 2 commits2026-07-18: 0 commits2026-07-19: 5 commits2026-07-20: 0 commits2026-07-21: 1 commit2026-07-22: 0 commits2026-07-23: 0 commits2026-07-24: 0 commits2026-07-25: 0 commits2026-07-26: 0 commits2026-07-27: 0 commits2026-07-28: 0 commits2026-07-29: 0 commits2026-07-30: 0 commits2026-07-31: 0 commits2026-08-01: 0 commits
1,260 commits in the last yearLessMore

Signals and awards

derived from tracked data
  • Widely adopted

    11,612 stars

What quip-miner does

The Quip Protocol repository houses the central mining stack for a specialized Substrate-based blockchain. It drives various mining backends (CPU, GPU, and QPU) to solve complex Ising spin model problems required by the chain's QuantumPow consensus mechanism. The software acts as a coordinator: it fetches mining snapshots at every new chain head, distributes the computational workload to search for valid Ising solutions, and submits the resulting proofs back to the network. It bridges traditional blockchain architecture with quantum-annealing-style computational puzzles.

Blockchain developers, node operators, and researchers interested in quantum-inspired consensus mechanisms. Requires deep knowledge of Substrate, Python, and hardware configuration.

  • QuantumPow Consensus: Interfaces directly with the Substrate pallet to submit proofs for Ising model solutions.
  • Multi-Hardware Orchestration: Coordinates mining efforts across CPUs, GPUs (CUDA/Metal), and quantum processors (D-Wave).
  • Chain Head Synchronization: Automatically tracks the blockchain state to fetch the latest mining snapshots.
  • Ising Problem Solver: Implements algorithms to search for low-energy states in complex spin glass models.
  • Substrate Integration: Handles all necessary extrinsics and RPC calls to interact with the underlying network.
  • Experimental V0.2 Architecture: Represents the bleeding edge of the network's decentralized mining development.

Where teams use it

Network Validation

Allows node operators to participate in consensus by running the mining stack and securing the chain.

Hardware Benchmarking

Provides a framework to test the efficiency of different GPUs against complex Ising spin model problems.

Quantum Hardware Integration

Enables researchers with D-Wave access to connect real quantum processors to a public blockchain network.

Consensus Mechanism Research

Serves as a practical implementation for studying alternatives to traditional Proof-of-Work algorithms.

Getting started: pip install -r requirements.txt && python main.py

README

main branch

quip-miner

Experimental software. Use at your own risk. No production warranties.

A Python mining stack for the quip-protocol-rs Substrate chain. Drives CPU SA, GPU (CUDA / Metal / Modal), and QPU (D-Wave) miners against the chain's QuantumPow pallet — fetch the mining snapshot at each new chain head, search for valid Ising solutions, submit QuantumPow.submit_proof extrinsics, repeat.

This is the v0.2 line of the repository (formerly quip-protocol). In v0.1 this codebase shipped its own consensus, P2P (QUIC), block store, REST API, and SPHINCS+ block signer. v0.2 removes all of that — the chain is the source of truth, miners attach to it.

Architecture

                              chain (substrate)
                                     │
                              ws://localhost:9944
                                     │
                  ┌──────────────────┴──────────────────┐
                  │       SubstrateClient (read)         │
                  │   - get_mining_snapshot              │
                  │   - subscribe_new_heads              │
                  │   - submit_extrinsic                 │
                  └──────────────────┬──────────────────┘
                                     │
                  ┌──────────────────┴──────────────────┐
                  │  SubstrateMinerController            │
                  │   - on new head: cancel + fetch +    │
                  │     dispatch                         │
                  │   - on result: encode + submit       │
                  │   - classify receipts                │
                  └──────┬────────────────────┬──────────┘
                         │                    │
                  ┌──────┴──────┐      ┌──────┴──────┐
                  │ MinerCore   │      │ TelemetryApi│
                  │ - handles[] │      │ /api/v1/*   │
                  │ - stats     │      └─────────────┘
                  │ - descriptor│
                  └──────┬──────┘
                         │
                  MinerHandle (per worker process)
                         │
                  BaseMiner.mine_work_item
                  (CPU SA / GPU CUDA|Metal|Modal / QPU)

Component responsibilities (shared/):

module role
signer.py Abstract Signer + Sr25519Signer. Phase 7 adds HybridSigner (sr25519 + ML-DSA-44).
keystore.py sr25519 keystore (0o600 JSON; plaintext seed for dev).
substrate_client.py py-substrate-interface async wrapper; state_call for the mining snapshot.
substrate_types.py SubstrateMiningContext, SubstrateDifficulty, MinerInfo, ExtrinsicReceipt.
substrate_submitter.py MiningResultQuantumProof SCALE encoding + submission.
substrate_miner_controller.py Head subscription, snapshot fetch, dispatch, receipt classification.
miner_core.py Owns persistent MinerHandle workers, hardware descriptor cache, aggregate stats.
miner_bootstrap.py Idempotent fund + register pipeline.
telemetry_api.py HTTP REST surface (/api/v1/status, /system, /stats, /block/*).
base_miner.py Protocol-neutral mine_work_item(context, stop_event) loop.
miner_worker.py 2-process worker scaffolding (parent ↔ child mp.Queue + stop_event).
quantum_proof_of_work.py derive_nonce, generate_ising_model_from_nonce, evaluate_sampleset.

Standalone scripts at repo root:

file role
quip_cli.py quip-miner CLI dispatch (keygen / bootstrap / cpu / gpu / qpu).

Installation

python3 -m venv .quip
source .quip/bin/activate
pip install -U pip setuptools wheel
pip install -e .

Dependencies pulled in by pyproject.toml:

  • substrate-interface>=1.7.4, scalecodec>=1.2 — chain RPC + SCALE
  • dwave-ocean-sdk>=9.0.0,<10, numpy>=1.24.0 — Ising sampling
  • aiohttp>=3.9.0 — telemetry server + faucet
  • click>=8.1.7 — CLI
  • blake3>=1.0.5 — nonce derivation

D-Wave QPU access requires DWAVE_API_KEY in .env (loaded via python-dotenv).

Quick start

In one terminal, bring up the chain:

cd ../quip-protocol-rs
docker compose up -d
docker compose logs -f node1   # confirm blocks being produced

The dev faucet now lives in its own repository (gitlab.com/quip.network/faucet); local-network setup (node + faucet + chain seeding) is handled by the testing repo at nodes.quip.network. Point the miner at a running faucet with --faucet-url; it self-funds and self-registers on first run.

Bootstrap a miner account (generates a keystore, funds it via the faucet, sudo-seeds Difficulty + DefaultTopology on a fresh chain, then submits register_miner):

quip-miner bootstrap \
    --node-url ws://localhost:9944 \
    --faucet-url http://127.0.0.1:8087 \
    --seed-chain

Run the miner:

quip-miner cpu \
    --node-url ws://localhost:9944 \
    --num-cpus 4 \
    --topology zephyr:9,2 \
    --rest-port 8086

In a third terminal, watch chain events for QuantumPow.ProofAccepted (via polkadot.js pointed at ws://localhost:9944), or hit the local telemetry API:

curl http://localhost:8086/api/v1/status   | jq
curl http://localhost:8086/api/v1/stats    | jq
curl http://localhost:8086/api/v1/system   | jq

CLI reference

quip-miner keygen

Generate a fresh sr25519 signing key. Writes a 0o600 JSON keystore with the seed in plaintext (passphrase-encrypted keystores ship in Phase 7).

quip-miner keygen --out ~/.quip-miner/signing.json

quip-miner bootstrap

Idempotent setup: generate keystore (if missing) → request funds from the faucet → submit register_miner. With --seed-chain, also sudo-submits set_difficulty + register_topology if missing.

quip-miner bootstrap \
    --node-url ws://localhost:9944 \
    --signer-key ~/.quip-miner/signing.json \
    --faucet-url http://127.0.0.1:8087 \
    --seed-chain \
    --seed-topology 9,2

Re-runs are no-ops that just verify state.

quip-miner cpu | gpu | qpu

Run the mining controller. All three subcommands share these flags:

  • --node-url ws://... (required) — substrate WS endpoint
  • --signer-key ~/.quip-miner/signing.json — keystore path
  • --topology zephyr:M,T — sampler topology (defaults to zephyr:9,2)
  • --rest-port 8086 — HTTP telemetry port (-1 disables)

The cpu subcommand adds --num-cpus N; gpu adds --gpu-backend {local,metal,modal}; qpu adds --qpu-type and --daily-budget.

Topology binding is enforced at startup: the CLI hashes the configured topology with the same blake2_256(SCALE((sorted_nodes, canonical_edges))) recipe the chain uses, and refuses to start if the hash doesn't match the chain's registered topology.

Telemetry REST API

GET  /health
GET  /api/v1/status                        chain head + miner identity + is_mining
GET  /api/v1/system                        hardware descriptor (cached)
GET  /api/v1/stats                         aggregate MinerCore + controller stats
GET  /api/v1/block/latest                  substrate-fetched chain head
GET  /api/v1/block/{n}                     substrate-fetched block by number
GET  /api/v1/block/{n}/header              header subset
POST /api/v1/solve                         disabled in v0.2 (was direct DWave sample)

Response envelope: {"success": bool, "data": ..., "error": ..., "timestamp": int}.

The legacy /api/v1/peers, /api/v1/join, /api/v1/gossip, /api/v1/heartbeat, and POST /api/v1/block paths are removed — they were P2P / consensus surfaces with no equivalent in substrate mode. The legacy /telemetry/* SSE stream and per-peer aggregator also moved out; consumers should switch to substrate-side events and Prometheus (http://localhost:9615/metrics).

Topology

Mining works against any BoundedVec-bounded graph registered on chain (QuantumPow.RegisteredTopologies). The CLI's --topology zephyr:M,T constructs a dwave-networkx Zephyr graph; the chain's pallets/quantum-pow/src/topology.rs::hash_topology canonicalizes and blake2_256-hashes the result.

bootstrap --seed-chain --seed-topology 9,2 registers Zephyr Z(9,2) (1368 nodes / 7692 edges — the legacy default that matches the chain's difficulty calibration of max_energy_milli=-2_500_000). Smaller graphs (Z(2,2), Z(3,2)) work too but need their own difficulty calibration since their ground-state energy range is much narrower.

Running tests

python -m pytest tests/ -v

Integration tests against the docker chain auto-skip if ws://localhost:9944 isn't reachable. The end-to-end controller test (test_controller_submits_proof_end_to_end) bootstraps inline and asserts at least one QuantumPow.ProofAccepted event lands within 120 seconds.

The cross-language nonce-parity test (test_derive_nonce_parity.py) reads crates/quantum-validation/tests/fixtures/python_parity.json from a sibling quip-protocol-rs checkout. Set QUIP_RUST_FIXTURE_DIR if your checkout is elsewhere.

What changed from v0.1

Removed entirely:

  • The local blockchain stack: shared/block.py, shared/node.py, shared/network_node.py, shared/block_store.py, shared/block_synchronizer.py, shared/block_requirements.py, genesis_block_public.json.
  • The P2P stack: QUIC client/server, SWIM failure detector, peer scorer / ban list, gossip telemetry aggregator, sync wire codecs.
  • The legacy signing path: SPHINCS+ block signer + certificate manager.
  • CLI: quip-network-node and quip-network-simulator are gone. Use quip-miner instead.

Kept (with rewired backends):

  • /api/v1/status, /system, /stats, /block/* (now substrate-backed)
  • The 2-process worker model (MinerHandle ↔ child mp.Queue + stop_event)
  • The Ising sampling code (BaseMiner.mine_work_item, quantum_proof_of_work.*, CPU/GPU/QPU subclasses)
  • The hardware descriptor / aggregate stats (now exposed via MinerCore)

Migration:

  • A v0.1 miner that ran a single mining node now runs a chain node (quip-protocol-rs docker compose) + quip-miner cpu|gpu|qpu against it.
  • Mining rewards now accrue on chain to the registered sr25519 account, not as v0.1 block-proposer credit.

License

AGPL-3.0-or-later. See LICENSE.

View on GitHub

Recent activity

commits and pull requests

Code frequency

additions and deletions
+33.3K-33.3KWeek of 2025-08-03: +0 linesWeek of 2025-08-03: -0 linesWeek of 2025-08-10: +0 linesWeek of 2025-08-10: -0 linesWeek of 2025-08-17: +5,650 linesWeek of 2025-08-17: -714 linesWeek of 2025-08-24: +8,332 linesWeek of 2025-08-24: -4,430 linesWeek of 2025-08-31: +8,522 linesWeek of 2025-08-31: -4,727 linesWeek of 2025-09-07: +7,173 linesWeek of 2025-09-07: -2,225 linesWeek of 2025-09-14: +6,213 linesWeek of 2025-09-14: -2,941 linesWeek of 2025-09-21: +2,556 linesWeek of 2025-09-21: -3,792 linesWeek of 2025-09-28: +7,759 linesWeek of 2025-09-28: -4,059 linesWeek of 2025-10-05: +0 linesWeek of 2025-10-05: -0 linesWeek of 2025-10-12: +2,118 linesWeek of 2025-10-12: -5,654 linesWeek of 2025-10-19: +9,099 linesWeek of 2025-10-19: -5,089 linesWeek of 2025-10-26: +4,183 linesWeek of 2025-10-26: -1,002 linesWeek of 2025-11-02: +6,862 linesWeek of 2025-11-02: -806 linesWeek of 2025-11-09: +0 linesWeek of 2025-11-09: -0 linesWeek of 2025-11-16: +6,064 linesWeek of 2025-11-16: -183 linesWeek of 2025-11-23: +19,260 linesWeek of 2025-11-23: -2,950 linesWeek of 2025-11-30: +2,638 linesWeek of 2025-11-30: -1,589 linesWeek of 2025-12-07: +2,201 linesWeek of 2025-12-07: -967 linesWeek of 2025-12-14: +0 linesWeek of 2025-12-14: -0 linesWeek of 2025-12-21: +0 linesWeek of 2025-12-21: -0 linesWeek of 2025-12-28: +0 linesWeek of 2025-12-28: -0 linesWeek of 2026-01-04: +0 linesWeek of 2026-01-04: -0 linesWeek of 2026-01-11: +5,166 linesWeek of 2026-01-11: -5,481 linesWeek of 2026-01-18: +0 linesWeek of 2026-01-18: -0 linesWeek of 2026-01-25: +0 linesWeek of 2026-01-25: -0 linesWeek of 2026-02-01: +2,874 linesWeek of 2026-02-01: -297 linesWeek of 2026-02-08: +0 linesWeek of 2026-02-08: -0 linesWeek of 2026-02-15: +0 linesWeek of 2026-02-15: -0 linesWeek of 2026-02-22: +0 linesWeek of 2026-02-22: -0 linesWeek of 2026-03-01: +7,938 linesWeek of 2026-03-01: -5,354 linesWeek of 2026-03-08: +18,872 linesWeek of 2026-03-08: -3,206 linesWeek of 2026-03-15: +11,945 linesWeek of 2026-03-15: -14,834 linesWeek of 2026-03-22: +2,520 linesWeek of 2026-03-22: -1,168 linesWeek of 2026-03-29: +5,764 linesWeek of 2026-03-29: -751 linesWeek of 2026-04-05: +4,359 linesWeek of 2026-04-05: -200 linesWeek of 2026-04-12: +14,736 linesWeek of 2026-04-12: -21,732 linesWeek of 2026-04-19: +8,069 linesWeek of 2026-04-19: -1,172 linesWeek of 2026-04-26: +389 linesWeek of 2026-04-26: -12 linesWeek of 2026-05-03: +0 linesWeek of 2026-05-03: -0 linesWeek of 2026-05-10: +17,739 linesWeek of 2026-05-10: -33,300 linesWeek of 2026-05-17: +26,152 linesWeek of 2026-05-17: -15,065 linesWeek of 2026-05-24: +23,862 linesWeek of 2026-05-24: -3,971 linesWeek of 2026-05-31: +25,249 linesWeek of 2026-05-31: -22,536 linesWeek of 2026-06-07: +370 linesWeek of 2026-06-07: -23 linesWeek of 2026-06-14: +729 linesWeek of 2026-06-14: -396 linesWeek of 2026-06-21: +1,661 linesWeek of 2026-06-21: -724 linesWeek of 2026-06-28: +17,503 linesWeek of 2026-06-28: -5,566 linesWeek of 2026-07-05: +703 linesWeek of 2026-07-05: -72 linesWeek of 2026-07-12: +2,560 linesWeek of 2026-07-12: -202 linesWeek of 2026-07-19: +868 linesWeek of 2026-07-19: -77 linesWeek of 2026-07-26: +0 linesWeek of 2026-07-26: -0 linesAug 3, 2025Jul 26, 2026
+298.7K lines added, -177.3K removed over the last year.

Commits per week

last 52 weeks
2740Week of 2025-08-03: 0 commitsWeek of 2025-08-10: 0 commitsWeek of 2025-08-17: 11 commitsWeek of 2025-08-24: 37 commitsWeek of 2025-08-31: 90 commitsWeek of 2025-09-07: 49 commitsWeek of 2025-09-14: 20 commitsWeek of 2025-09-21: 7 commitsWeek of 2025-09-28: 6 commitsWeek of 2025-10-05: 0 commitsWeek of 2025-10-12: 9 commitsWeek of 2025-10-19: 10 commitsWeek of 2025-10-26: 17 commitsWeek of 2025-11-02: 16 commitsWeek of 2025-11-09: 0 commitsWeek of 2025-11-16: 7 commitsWeek of 2025-11-23: 16 commitsWeek of 2025-11-30: 6 commitsWeek of 2025-12-07: 3 commitsWeek of 2025-12-14: 0 commitsWeek of 2025-12-21: 0 commitsWeek of 2025-12-28: 0 commitsWeek of 2026-01-04: 0 commitsWeek of 2026-01-11: 13 commitsWeek of 2026-01-18: 0 commitsWeek of 2026-01-25: 0 commitsWeek of 2026-02-01: 15 commitsWeek of 2026-02-08: 0 commitsWeek of 2026-02-15: 0 commitsWeek of 2026-02-22: 0 commitsWeek of 2026-03-01: 22 commitsWeek of 2026-03-08: 14 commitsWeek of 2026-03-15: 12 commitsWeek of 2026-03-22: 59 commitsWeek of 2026-03-29: 41 commitsWeek of 2026-04-05: 7 commitsWeek of 2026-04-12: 70 commitsWeek of 2026-04-19: 41 commitsWeek of 2026-04-26: 3 commitsWeek of 2026-05-03: 0 commitsWeek of 2026-05-10: 42 commitsWeek of 2026-05-17: 95 commitsWeek of 2026-05-24: 122 commitsWeek of 2026-05-31: 274 commitsWeek of 2026-06-07: 6 commitsWeek of 2026-06-14: 7 commitsWeek of 2026-06-21: 15 commitsWeek of 2026-06-28: 75 commitsWeek of 2026-07-05: 6 commitsWeek of 2026-07-12: 11 commitsWeek of 2026-07-19: 6 commitsWeek of 2026-07-26: 0 commitsAug 3, 2025Jul 26, 2026
1.3K commits in the last 52 weeks.

When work happens

weekday and hour
SunMonTueWedThuFriSat036912151821Sun 0:00 — 2 commitsSun 1:00 — 1 commitsSun 2:00 — 2 commitsSun 3:00 — 0 commitsSun 4:00 — 0 commitsSun 5:00 — 0 commitsSun 6:00 — 0 commitsSun 7:00 — 0 commitsSun 8:00 — 0 commitsSun 9:00 — 1 commitsSun 10:00 — 12 commitsSun 11:00 — 8 commitsSun 12:00 — 1 commitsSun 13:00 — 12 commitsSun 14:00 — 6 commitsSun 15:00 — 6 commitsSun 16:00 — 10 commitsSun 17:00 — 9 commitsSun 18:00 — 8 commitsSun 19:00 — 9 commitsSun 20:00 — 5 commitsSun 21:00 — 6 commitsSun 22:00 — 6 commitsSun 23:00 — 11 commitsMon 0:00 — 4 commitsMon 1:00 — 4 commitsMon 2:00 — 1 commitsMon 3:00 — 1 commitsMon 4:00 — 2 commitsMon 5:00 — 3 commitsMon 6:00 — 0 commitsMon 7:00 — 0 commitsMon 8:00 — 2 commitsMon 9:00 — 3 commitsMon 10:00 — 2 commitsMon 11:00 — 3 commitsMon 12:00 — 6 commitsMon 13:00 — 15 commitsMon 14:00 — 9 commitsMon 15:00 — 13 commitsMon 16:00 — 14 commitsMon 17:00 — 12 commitsMon 18:00 — 9 commitsMon 19:00 — 3 commitsMon 20:00 — 8 commitsMon 21:00 — 10 commitsMon 22:00 — 5 commitsMon 23:00 — 2 commitsTue 0:00 — 4 commitsTue 1:00 — 2 commitsTue 2:00 — 2 commitsTue 3:00 — 3 commitsTue 4:00 — 2 commitsTue 5:00 — 1 commitsTue 6:00 — 0 commitsTue 7:00 — 1 commitsTue 8:00 — 4 commitsTue 9:00 — 0 commitsTue 10:00 — 3 commitsTue 11:00 — 1 commitsTue 12:00 — 1 commitsTue 13:00 — 1 commitsTue 14:00 — 7 commitsTue 15:00 — 3 commitsTue 16:00 — 8 commitsTue 17:00 — 6 commitsTue 18:00 — 8 commitsTue 19:00 — 5 commitsTue 20:00 — 3 commitsTue 21:00 — 8 commitsTue 22:00 — 12 commitsTue 23:00 — 18 commitsWed 0:00 — 12 commitsWed 1:00 — 11 commitsWed 2:00 — 6 commitsWed 3:00 — 5 commitsWed 4:00 — 0 commitsWed 5:00 — 0 commitsWed 6:00 — 0 commitsWed 7:00 — 1 commitsWed 8:00 — 0 commitsWed 9:00 — 8 commitsWed 10:00 — 13 commitsWed 11:00 — 7 commitsWed 12:00 — 16 commitsWed 13:00 — 12 commitsWed 14:00 — 14 commitsWed 15:00 — 12 commitsWed 16:00 — 11 commitsWed 17:00 — 54 commitsWed 18:00 — 63 commitsWed 19:00 — 36 commitsWed 20:00 — 33 commitsWed 21:00 — 30 commitsWed 22:00 — 20 commitsWed 23:00 — 22 commitsThu 0:00 — 20 commitsThu 1:00 — 7 commitsThu 2:00 — 1 commitsThu 3:00 — 1 commitsThu 4:00 — 2 commitsThu 5:00 — 2 commitsThu 6:00 — 2 commitsThu 7:00 — 6 commitsThu 8:00 — 2 commitsThu 9:00 — 12 commitsThu 10:00 — 22 commitsThu 11:00 — 17 commitsThu 12:00 — 13 commitsThu 13:00 — 18 commitsThu 14:00 — 12 commitsThu 15:00 — 10 commitsThu 16:00 — 6 commitsThu 17:00 — 21 commitsThu 18:00 — 13 commitsThu 19:00 — 4 commitsThu 20:00 — 17 commitsThu 21:00 — 3 commitsThu 22:00 — 6 commitsThu 23:00 — 17 commitsFri 0:00 — 9 commitsFri 1:00 — 7 commitsFri 2:00 — 5 commitsFri 3:00 — 0 commitsFri 4:00 — 0 commitsFri 5:00 — 0 commitsFri 6:00 — 0 commitsFri 7:00 — 0 commitsFri 8:00 — 7 commitsFri 9:00 — 6 commitsFri 10:00 — 6 commitsFri 11:00 — 5 commitsFri 12:00 — 11 commitsFri 13:00 — 4 commitsFri 14:00 — 7 commitsFri 15:00 — 8 commitsFri 16:00 — 12 commitsFri 17:00 — 12 commitsFri 18:00 — 12 commitsFri 19:00 — 12 commitsFri 20:00 — 2 commitsFri 21:00 — 9 commitsFri 22:00 — 10 commitsFri 23:00 — 8 commitsSat 0:00 — 14 commitsSat 1:00 — 7 commitsSat 2:00 — 4 commitsSat 3:00 — 3 commitsSat 4:00 — 1 commitsSat 5:00 — 0 commitsSat 6:00 — 0 commitsSat 7:00 — 0 commitsSat 8:00 — 0 commitsSat 9:00 — 2 commitsSat 10:00 — 2 commitsSat 11:00 — 8 commitsSat 12:00 — 8 commitsSat 13:00 — 10 commitsSat 14:00 — 9 commitsSat 15:00 — 23 commitsSat 16:00 — 20 commitsSat 17:00 — 20 commitsSat 18:00 — 3 commitsSat 19:00 — 13 commitsSat 20:00 — 4 commitsSat 21:00 — 3 commitsSat 22:00 — 0 commitsSat 23:00 — 2 commits
Commit volume by weekday and hour (UTC). Larger dots mean more commits.
DateListRankStars gained
Feb 12, 2026daily#23+148
Feb 11, 2026daily#4+322