# bitmaintech/cgminer architecture

> Architecture diagram of the GitHub repository bitmaintech/cgminer, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-26). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/bitmaintech/cgminer
- Repository: https://github.com/bitmaintech/cgminer

## Overview

cgminer is a multithreaded Bitcoin miner: users configure one or more pools, the miner obtains work, dispatches it to supported FPGA/ASIC hardware, and submits resulting shares. The README also documents a command-line/configuration interface, an optional monitoring/control API, and an optional curses interface. Hardware support is spread across device-specific drivers, with USB and SPI/I2C transport helpers beneath some drivers. The sampled core and transport sources support those internal layers; the README supplies the broader product capabilities, so unsampled subsystem wiring is kept conservative.

Main entry points: [`cgminer.c`](https://github.com/bitmaintech/cgminer/blob/master/cgminer.c) (Work and shares), [`usbutils.c`](https://github.com/bitmaintech/cgminer/blob/master/usbutils.c) (USB transport), [`driver-SPI-bitmine-A1.c`](https://github.com/bitmaintech/cgminer/blob/master/driver-SPI-bitmine-A1.c) (SPI miner drivers), [`driver-avalon.c`](https://github.com/bitmaintech/cgminer/blob/master/driver-avalon.c) (USB miner drivers)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_runtime["Mining runtime"]
  node_core["Mining coordinator<br/>[cgminer.c]"]
  node_work["Work and shares<br/>[cgminer.c]"]
end

subgraph group_pool["Pool connectivity"]
  node_poolio["Pool protocols<br/>[cgminer.c]"]
end

subgraph group_hardware["Mining hardware"]
  node_usbdrivers["USB miner drivers<br/>[driver-avalon.c]"]
  node_spidrivers["SPI miner drivers"]
  node_avalon["Avalon drivers<br/>[driver-avalon.c]"]
  node_bitmain["Bitmain drivers<br/>[driver-bitmain.c]"]
  node_spondoolies["Spondoolies drivers"]
  node_usbtransport["USB transport<br/>[usbutils.c]"]
  node_spitransport["SPI transport<br/>[spi-context.c]"]
  node_i2ctransport["I2C transport<br/>[i2c-context.c]"]
end

subgraph group_control["User control"]
  node_config["Options and config<br/>[cgminer.c]"]
  node_tui["Curses interface<br/>[cgminer.c]"]
  node_api["Miner API<br/>[api.c]"]
end

node_user(("Miner operator"))
node_poolserver(("Mining pool"))
node_devices{{"FPGA and ASIC devices"}}

node_user -->|"sets options"| node_config
node_config -->|"configures"| node_core
node_user -.->|"controls"| node_tui
node_tui -.->|"controls"| node_core
node_user -.->|"requests status"| node_api
node_api -.->|"queries or controls"| node_core
node_core -->|"manages pools"| node_poolio
node_poolio -->|"requests work"| node_poolserver
node_poolserver -->|"returns work"| node_poolio
node_poolio -->|"supplies work"| node_work
node_core -->|"coordinates"| node_work
node_work -->|"dispatches work"| node_avalon
node_work -->|"dispatches work"| node_bitmain
node_work -->|"dispatches work"| node_spondoolies
node_work -->|"dispatches work"| node_usbdrivers
node_work -->|"dispatches work"| node_spidrivers
node_avalon -.->|"uses USB"| node_usbtransport
node_bitmain -.->|"uses USB"| node_usbtransport
node_spondoolies -.->|"uses USB"| node_usbtransport
node_spidrivers -->|"transfers data"| node_spitransport
node_spidrivers -.->|"accesses controls"| node_i2ctransport
node_usbdrivers -->|"transfers data"| node_usbtransport
node_usbtransport -->|"communicates"| node_devices
node_spitransport -->|"communicates"| node_devices
node_i2ctransport -.->|"communicates"| node_devices
node_devices -->|"returns results"| node_work
node_work -->|"submits shares"| node_poolio
node_poolio -->|"submits shares"| node_poolserver

click node_core "https://github.com/bitmaintech/cgminer/blob/master/cgminer.c"
click node_work "https://github.com/bitmaintech/cgminer/blob/master/cgminer.c"
click node_config "https://github.com/bitmaintech/cgminer/blob/master/cgminer.c"
click node_tui "https://github.com/bitmaintech/cgminer/blob/master/cgminer.c"
click node_api "https://github.com/bitmaintech/cgminer/blob/master/api.c"
click node_poolio "https://github.com/bitmaintech/cgminer/blob/master/cgminer.c"
click node_usbdrivers "https://github.com/bitmaintech/cgminer/blob/master/driver-avalon.c"
click node_spidrivers "https://github.com/bitmaintech/cgminer/blob/master/driver-SPI-bitmine-A1.c"
click node_avalon "https://github.com/bitmaintech/cgminer/blob/master/driver-avalon.c"
click node_bitmain "https://github.com/bitmaintech/cgminer/blob/master/driver-bitmain.c"
click node_spondoolies "https://github.com/bitmaintech/cgminer/blob/master/driver-spondoolies-sp10.c"
click node_usbtransport "https://github.com/bitmaintech/cgminer/blob/master/usbutils.c"
click node_spitransport "https://github.com/bitmaintech/cgminer/blob/master/spi-context.c"
click node_i2ctransport "https://github.com/bitmaintech/cgminer/blob/master/i2c-context.c"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_core,node_work toneBlue
class node_poolio toneAmber
class node_usbdrivers,node_spidrivers,node_avalon,node_bitmain,node_spondoolies,node_usbtransport,node_spitransport,node_i2ctransport toneMint
class node_config,node_tui,node_api toneRose
class node_user,node_poolserver,node_devices toneIndigo
```

## Components

### Mining runtime

- [Mining coordinator](https://github.com/bitmaintech/cgminer/blob/master/cgminer.c): `cgminer.c`
- [Work and shares](https://github.com/bitmaintech/cgminer/blob/master/cgminer.c): `cgminer.c`

### Pool connectivity

- [Pool protocols](https://github.com/bitmaintech/cgminer/blob/master/cgminer.c): `cgminer.c`

### Mining hardware

- [USB miner drivers](https://github.com/bitmaintech/cgminer/blob/master/driver-avalon.c): `driver-avalon.c`
- [SPI miner drivers](https://github.com/bitmaintech/cgminer/blob/master/driver-SPI-bitmine-A1.c): `driver-SPI-bitmine-A1.c`
- [Avalon drivers](https://github.com/bitmaintech/cgminer/blob/master/driver-avalon.c): `driver-avalon.c`
- [Bitmain drivers](https://github.com/bitmaintech/cgminer/blob/master/driver-bitmain.c): `driver-bitmain.c`
- [Spondoolies drivers](https://github.com/bitmaintech/cgminer/blob/master/driver-spondoolies-sp10.c): `driver-spondoolies-sp10.c`
- [USB transport](https://github.com/bitmaintech/cgminer/blob/master/usbutils.c): `usbutils.c`
- [SPI transport](https://github.com/bitmaintech/cgminer/blob/master/spi-context.c): `spi-context.c`
- [I2C transport](https://github.com/bitmaintech/cgminer/blob/master/i2c-context.c): `i2c-context.c`

### User control

- [Options and config](https://github.com/bitmaintech/cgminer/blob/master/cgminer.c): `cgminer.c`
- [Curses interface](https://github.com/bitmaintech/cgminer/blob/master/cgminer.c): `cgminer.c`
- [Miner API](https://github.com/bitmaintech/cgminer/blob/master/api.c): `api.c`

### Other components

- **Miner operator**
- **Mining pool**
- **FPGA and ASIC devices**

## Connections

- Miner operator → Options and config: sets options
- Options and config → Mining coordinator: configures
- Miner operator → Curses interface: controls
- Curses interface → Mining coordinator: controls
- Miner operator → Miner API: requests status
- Miner API → Mining coordinator: queries or controls
- Mining coordinator → Pool protocols: manages pools
- Pool protocols → Mining pool: requests work
- Mining pool → Pool protocols: returns work
- Pool protocols → Work and shares: supplies work
- Mining coordinator → Work and shares: coordinates
- Work and shares → Avalon drivers: dispatches work
- Work and shares → Bitmain drivers: dispatches work
- Work and shares → Spondoolies drivers: dispatches work
- Work and shares → USB miner drivers: dispatches work
- Work and shares → SPI miner drivers: dispatches work
- Avalon drivers → USB transport: uses USB
- Bitmain drivers → USB transport: uses USB
- Spondoolies drivers → USB transport: uses USB
- SPI miner drivers → SPI transport: transfers data
- SPI miner drivers → I2C transport: accesses controls
- USB miner drivers → USB transport: transfers data
- USB transport → FPGA and ASIC devices: communicates
- SPI transport → FPGA and ASIC devices: communicates
- I2C transport → FPGA and ASIC devices: communicates
- FPGA and ASIC devices → Work and shares: returns results
- Work and shares → Pool protocols: submits shares
- Pool protocols → Mining pool: submits shares
