# progranism/bitcoin-javascript-miner architecture

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

- Interactive diagram: https://gitdiagram.com/progranism/bitcoin-javascript-miner
- Repository: https://github.com/progranism/bitcoin-javascript-miner

## Overview

JsMiner is a pre-alpha, browser-based educational Bitcoin miner. The documented workflow starts mining from the webpage, obtains a hard-coded sample getwork job, sends it to a Web Worker, scans nonces using SHA-256, and reports progress or a candidate nonce to the page. The source confirms no live pool communication or work submission; the page implementation was not sampled, so its internal UI details are limited to the README description.

Main entry points: [`work-manager.js`](https://github.com/progranism/bitcoin-javascript-miner/blob/master/work-manager.js) (Work manager), [`miner.js`](https://github.com/progranism/bitcoin-javascript-miner/blob/master/miner.js) (Nonce scanner), [`index.html`](https://github.com/progranism/bitcoin-javascript-miner/blob/master/index.html) (Mining page), [`sha256.js`](https://github.com/progranism/bitcoin-javascript-miner/blob/master/sha256.js) (SHA-256 chunk)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_interface["Browser interface"]
  node_page["Mining page<br/>[index.html]"]
end

subgraph group_coordination["Mining coordination"]
  node_manager["Work manager<br/>[work-manager.js]"]
  node_job["Sample job data<br/>[work-manager.js]"]
end

subgraph group_worker["Worker hashing"]
  node_worker["Nonce scanner<br/>[miner.js]"]
  node_sha["SHA-256 chunk<br/>[sha256.js]"]
end

node_user(("Miner user"))

node_user -->|"starts mining"| node_page
node_page -->|"invokes mining"| node_manager
node_manager -->|"loads sample"| node_job
node_manager -->|"starts worker"| node_worker
node_job -->|"supplies job"| node_worker
node_worker -->|"calls hashing"| node_sha
node_worker -->|"posts updates"| node_manager
node_manager -->|"updates display"| node_page

click node_page "https://github.com/progranism/bitcoin-javascript-miner/blob/master/index.html"
click node_manager "https://github.com/progranism/bitcoin-javascript-miner/blob/master/work-manager.js"
click node_job "https://github.com/progranism/bitcoin-javascript-miner/blob/master/work-manager.js"
click node_worker "https://github.com/progranism/bitcoin-javascript-miner/blob/master/miner.js"
click node_sha "https://github.com/progranism/bitcoin-javascript-miner/blob/master/sha256.js"

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_page,node_user toneBlue
class node_manager,node_job toneAmber
class node_worker,node_sha toneMint
```

## Components

### Browser interface

- [Mining page](https://github.com/progranism/bitcoin-javascript-miner/blob/master/index.html): `index.html`

### Mining coordination

- [Work manager](https://github.com/progranism/bitcoin-javascript-miner/blob/master/work-manager.js): `work-manager.js`
- [Sample job data](https://github.com/progranism/bitcoin-javascript-miner/blob/master/work-manager.js): `work-manager.js`

### Worker hashing

- [Nonce scanner](https://github.com/progranism/bitcoin-javascript-miner/blob/master/miner.js): `miner.js`
- [SHA-256 chunk](https://github.com/progranism/bitcoin-javascript-miner/blob/master/sha256.js): `sha256.js`

### Other components

- **Miner user**

## Connections

- Miner user → Mining page: starts mining
- Mining page → Work manager: invokes mining
- Work manager → Sample job data: loads sample
- Work manager → Nonce scanner: starts worker
- Sample job data → Nonce scanner: supplies job
- Nonce scanner → SHA-256 chunk: calls hashing
- Nonce scanner → Work manager: posts updates
- Work manager → Mining page: updates display
