Bitcoin solo/pool mining server — Stratum V1 + V2
  • Rust 81.6%
  • Svelte 9.7%
  • HTML 4.5%
  • TypeScript 1.9%
  • Shell 1%
  • Other 1.1%
Find a file
dvb-projekt 2451b47a73
All checks were successful
CI / Rust clippy (push) Successful in 1m52s
CI / Rust fmt (push) Successful in 1m17s
CI / Rust test (push) Successful in 6m2s
CI / UI (SvelteKit) (push) Successful in 1m20s
CI / Security Audit (push) Successful in 1m23s
docs / build (push) Successful in 36s
Release / Docker Multi-Arch (push) Successful in 22m50s
Release / Binary aarch64-unknown-linux-gnu (push) Successful in 12m15s
Release / Binary x86_64-unknown-linux-gnu (push) Successful in 11m6s
Release / Linux .deb + .rpm (amd64) (push) Successful in 11m52s
Release / Linux .deb + .rpm (arm64) (push) Successful in 12m42s
Release / Linux AppImage (aarch64) (push) Successful in 11m36s
Release / Linux AppImage (x86_64) (push) Successful in 10m41s
Release / Cosign sign artifacts (push) Successful in 26s
Release / Forgejo Release (push) Successful in 38s
chore(release): v1.25.7
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-14 11:00:53 +02:00
.claude docs/packaging: migrate all references to git.warppool.org after GitHub suspension 2026-07-07 15:34:56 +02:00
.github chore: fix three stale internals found during the doc sweep 2026-07-21 10:09:57 +02:00
apps fix(dos): coalesce rejected-share recording instead of spawning per share 2026-08-14 10:49:30 +02:00
crates fix(dos): coalesce rejected-share recording instead of spawning per share 2026-08-14 10:49:30 +02:00
docs chore(release): v1.25.7 2026-08-14 11:00:53 +02:00
marketing-drafts docs(marketing): replace stratum-speed drafts with final announcement copy 2026-07-20 15:11:31 +02:00
packaging chore(release): v1.25.7 2026-08-14 11:00:53 +02:00
scripts docs: full documentation sweep for v1.21.0 + fix repro-verify script 2026-07-21 09:22:36 +02:00
ui chore(release): v1.25.6 2026-08-10 12:18:33 +02:00
.dockerignore dvb-WarpPool v1.0.0 — erste stabile Veröffentlichung 2026-05-28 19:54:54 +02:00
.editorconfig dvb-WarpPool v1.0.0 — erste stabile Veröffentlichung 2026-05-28 19:54:54 +02:00
.gitignore packaging(macos): add build-macos-release.sh + gitignore dist dirs 2026-07-10 06:41:40 +02:00
Cargo.lock chore(release): v1.25.7 2026-08-14 11:00:53 +02:00
Cargo.toml chore(release): v1.25.7 2026-08-14 11:00:53 +02:00
CHANGELOG.md chore(release): v1.25.7 2026-08-14 11:00:53 +02:00
COMMERCIAL-LICENSE.md docs(license): operator responsibilities & disclaimer 2026-06-25 15:24:45 +02:00
CONTRIBUTING.md chore: relicense to AGPL-3.0-or-later + commercial dual-license 2026-06-19 07:06:16 +02:00
cosign.pub chore(release): add project cosign public key 2026-07-07 15:34:56 +02:00
deny.toml chore: relicense to AGPL-3.0-or-later + commercial dual-license 2026-06-19 07:06:16 +02:00
docker-compose.yml docs/packaging: migrate all references to git.warppool.org after GitHub suspension 2026-07-07 15:34:56 +02:00
Dockerfile chore: fix three stale internals found during the doc sweep 2026-07-21 10:09:57 +02:00
dvb-WarpPool Schriftzug.png dvb-WarpPool v1.0.0 — erste stabile Veröffentlichung 2026-05-28 19:54:54 +02:00
dvb-WarpPool_Logo.png dvb-WarpPool v1.0.0 — erste stabile Veröffentlichung 2026-05-28 19:54:54 +02:00
LICENSE chore: relicense to AGPL-3.0-or-later + commercial dual-license 2026-06-19 07:06:16 +02:00
README.md chore(release): v1.25.7 2026-08-14 11:00:53 +02:00
rust-toolchain.toml fix(ci): declare cross-compile targets in rust-toolchain.toml 2026-06-10 15:33:08 +02:00
SECURITY.md docs: post-migration accuracy sweep across all user-facing prose 2026-07-10 19:22:15 +02:00
SUITE.md docs: add WarpPool Suite overview (commercial sidecars, coming soon) 2026-06-27 07:47:13 +02:00

dvb-WarpPool

dvb-WarpPool

Rust Bitcoin Solo Mining Pool
Stratum V1 + V2 · PWA Operator UI · 1226 Tests · Reproducible Builds

License Rust Tests Platforms Signed


dvb-WarpPool is a from-scratch Rust solo Bitcoin mining pool. The block reward flows directly to your wallet via the coinbase — the pool never holds, forwards, or aggregates your sats. No accounts, no custody, no settlement: when your miners find a block, the reward is yours the moment Bitcoin Core accepts it.

Run it privately for your own rigs or a fixed group of friends, or open it up as a public, non-custodial 0% pool where every visiting miner mines to their own address (per-worker payouts, payout_mode = "per_worker"). Either way the finder is paid directly on-chain — see the Public 0% Solo Pool guide.

Built for self-hosted operators on hardware ranging from a Raspberry Pi 5 to a Ryzen 7 server. Single binary that runs alongside your own Bitcoin Node, exposes a modern PWA admin cockpit, and ships with end-to-end signed, reproducible builds.

Screenshots

Dashboard — pool stats, energy / solar block, live hashrate chart

Dashboard — live pool stats, energy + solar surplus, hashrate chart.

More screenshots (hashrate, overview, workers, hardware detection, miner telemetry, admin)

Hashrate chart with best-share dots
Hashrate — 1-minute buckets with best-share overlay.

Workers + best-shares leaderboard
Workers + best-shares leaderboard.

Pool overview with full stats
Overview — full pool stats.

Hardware detection + profile recommendation
Hardware detection — auto-recommends Small / Medium / Large / Enterprise profile.

Profile comparison table
Profile comparison — connection cap, RAM target, VarDiff, retention windows.

Live vendor telemetry per miner
Miners — live vendor telemetry (temp / power / fan / hashrate).

Devices list
Devices — registered miners with discovery via mDNS.

Admin profile + electricity tariff
Admin → Profile — hot-switch Small / Medium / Large / Enterprise + electricity tariff.

Cross-platform uninstall widget
Admin → Uninstall — cross-platform uninstall preview with optional Bitcoin Core + blockchain (new in v1.0.10).

Features

Mining core

  • Stratum V1 (plain + TLS 1.3) listener with persisted EMA-smoothed VarDiff — per-worker difficulty is restored across reconnects and restarts.
  • Stratum V2 server (NOISE_NX encrypted handshake) with both extended and standard channels. Real per-channel Merkle root, full PoW check, and a working block-submit path on both V1 and Sv2.
  • V1↔V2 translator sidecar — legacy V1 miners can talk to V2 pools and vice-versa, with BIP-320 version-rolling.
  • getblocktemplate + ZMQ hashblock for low-latency job refresh: fresh templates go out within milliseconds of Bitcoin Core seeing a new tip.
  • Coinbase construction with optional pool-fee and operator-donation splits. Default: 100 % to the miner address.
  • Standards-compliant block construction: BIP-34 coinbase height, SegWit witness commitment, and BIP-310 version-rolling (overt ASICBoost) — plus a BIP-54-forward-compatible coinbase locktime (nLockTime = height 1, nSequence ≠ 0xffffffff): Consensus-Cleanup-ready ahead of activation, and valid under today's rules (verified end-to-end against a real regtest block).
  • Network-aware: regtest, signet, testnet4, mainnet — getblocktemplate rules switch automatically (the signet rule is added on signet; a real source of "no template" bugs we ran into and fixed).

Operator UI (SvelteKit PWA)

  • Live Server-Sent Events stream for hashrate, blocks-found, share rate, miner status — no polling, no page reloads.
  • Hashrate charts with 24-hour smoothing, per-record best-share dots on a dedicated difficulty axis, top-3 worker medals, per-worker breakdown including coinbase-decoder for the current job.
  • Explorer links for found blocks — block hashes/heights link out to mempool.space, chain-aware (mainnet / signet / testnet4; no link on regtest).
  • i18n (8 languages: EN, DE, ES, FR, IT, JA, PT-BR, ZH) with locale auto-detect + manual switcher, persisted in localStorage.
  • Admin cockpit: profile hot-switch, notifier test-fires, audit-log viewer, API-token CRUD, 2FA setup with QR code, retention/eviction config.
  • Mobile-first responsive design — installable as a PWA, with service worker
    • Web-Push subscriptions.
  • Full-screen screensaver for wall / kiosk displays — idle-triggered looping splash video with a live stat bar (best share, hashrate, miners, blocks, version/update). Configurable per device (idle timeout 5/10/15/30 min, off by default); respects prefers-reduced-motion.

Public wallet pages (per-worker mode)

  • Login-free page per address at /users/<address> — aggregate hashrate, per-rig breakdown, lifetime shares, best-ever share. The same numbers as ckpool-compatible JSON at GET /api/users/<address>, so existing firmware displays and stats tools parse it unchanged.
  • Block odds panel instead of a single "estimated time to block": chance in the next 24 hours, chance within a year, the 50/50 point, and luck so far (expected vs. found blocks). Deliberately no progress bar, no countdown, no near-miss framing — solo mining is memoryless and the panel says so.
  • Owner panel via ownership proof — a miner signs a one-time challenge in their own wallet (BIP-137, or BIP-322 for Taproot bc1p…), which unlocks a privacy toggle and a personal notification target for that address. No account, no key disclosure, no funds moved, and nothing for the operator to configure.
  • Per-wallet alerts for block-found, personal-best share, first entry into the all-time top-100, and rig-offline — delivered to a miner-supplied ntfy topic or webhook, behind the same SSRF guard as outbound webhooks.
  • Operator-side privacy defaults for the wallet directory and leaderboard, plus an announcement banner (Admin → Banner) shown to every visitor.

Authentication & security

  • Argon2id password hashing + JWT session cookie (HttpOnly, optional Secure flag behind TLS).
  • API tokens with sha256-only storage (cleartext shown once on creation), per-token scopes, optional expiry.
  • 2FA TOTP (RFC 6238) with ±1 step skew and one-shot reuse prevention.
  • Audit log for every admin action (login, token-create / revoke, profile-switch, update-applied), filterable per actor.
  • HTTP login throttle with constant-time response (no user enumeration).
  • Stratum DoS hardening: line cap (16 KiB), pre-auth handshake timeout, dedup-set bound, Sv2 connection cap + read_buf cap.
  • Stratum access control (all opt-in, off by default): CIDR allow/deny IP-gate ([ratelimit].ban_cidrs / allow_only + allow_cidrs), a per-IP concurrent-connection cap ([stratum].max_connections_per_ip), a reject-ratio auto-ban ([ratelimit].reject_ban_*), and a payout-address allowlist ([mining].address_allowlist, enforced on V1 authorize and V2 channel-open). Loopback always passes, so local access can't be locked out.
  • In-daemon auto-backup ([backup], off by default): periodic snapshots written by the daemon itself, with a retention count — no external cron needed.
  • Web Push receivers go through an SSRF guard (private / loopback / link-local / CGNAT / localhost are blocked) plus a DNS-rebinding resolve check.
  • SQLite DB + data directory locked down with restrictive POSIX permissions (0600 / 0700, unix-gated).
  • Setup wizard refuses to overwrite an existing secrets.toml.
  • Full security-audit pass on v1.0 (5 attack surfaces, double-verified) — see docs/SECURITY.md for the threat-mitigation matrix.

Notifications

Block-found, share-spike, anomaly and admin events fan out to any combination of sinks:

  • ntfy (push) · Telegram · Discord · Slack (incoming webhooks)
  • Email (SMTP with STARTTLS) · VAPID Web Push to the PWA
  • (APNs scaffold present in crates/notifier/ for an iOS sidecar)

Every sink is independently configurable, individually testable from the UI (notifier-test ntfy|telegram|…|all), and rate-limited per sink.

Hardware detection & admin profiles

  • Auto-detects CPU / RAM / NVMe / SATA at startup and recommends an admin profile: Small, Medium, Large, or Enterprise (config ids: klein / mittel / gross / enterprise; the UI shows localized names).
  • Each profile maps to a coherent set of runtime parameters: connection cap, share-validation Rayon pool size, retention windows, network-probe cadence.
  • Hot-switch at runtime via the admin cockpit — V1 and V2 connection caps resize live, no restart needed.
  • Vendor probes for AxeOS / NerdNOS / BitMain / Whatsminer / AvalonQ / BraiinsOS miners surface temps, fan, hashrate, last-share-age in the UI.
  • Vendor-aware VarDiff: the user_agent picks a per-class starting difficulty and target interval — from Antminer-class ASICs down to a NerdMiner V2 ESP32 (~250 KH/s), which uses sub-1 difficulty so it still submits a share roughly every 30 seconds instead of once an hour. Miner requests are honored too: suggest_difficulty seeds the session, d=<x> in the password pins it (both class-clamped), and an idle decay walks quiet workers back down instead of stranding them.
  • mDNS-based LAN discovery rounds out the picture: new miners on the subnet show up automatically.

Energy & health

  • Real-time electricity-tariff integration (incl. solar-surplus signal via Home Assistant) — the admin UI shows running cost and net margin.
  • Health-anomaly detection: peer-count, ZMQ-hashblock lag, share-acceptance rate, vendor-probe failures — each surfaces in /healthz and as warnings in the UI.
  • First-run setup wizard with Bitcoin Core health probes (RPC, ZMQ hashblock, ZMQ rawblock) and optional UPnP port forwarding.

Updates & auto-update

  • dvb-warppool-cli check-update + download-update for the manual workflow (download-update --tag vX.Y.Z pins a specific version or rolls back off a bad release).
  • Daemon-side /api/admin/update-check + /api/admin/update with optional server-side Cosign verification of SHA256SUMS.
  • Periodic background check (configurable cadence, default 24 h) emits an update_available SSE event — the UI shows a banner without operator polling.
  • Atomic swap (<target>.new → POSIX rename → <target>), optional backup of the old binary, systemd OnFailure rollback hook.

Supply chain

  • Release signing: GitHub-era releases (≤ v1.15.0) shipped cosign keyless-OIDC signatures on SHA256SUMS plus SLSA Level 3 provenance. Since the move to the self-hosted forge, images and release assets are signed with the project cosign key (cosign.pub in the repo root).
  • SBOM (SPDX) generated per release via anchore/sbom-action.
  • Reproducible builds — same input → byte-identical output, verifiable via scripts/verify-reproducible.sh.
  • Multi-arch Docker image on git.warppool.org/dvb-projekt/dvb-warppool (linux/amd64 + linux/arm64).
  • Native installers across all major platforms (see Install).

How it compares

A self-hosted solo pool usually comes down to four open-source options. Short version below; the full, source-verified table (with a fair "when the others are the better pick" section) lives in the Comparison handbook page.

WarpPool ckpool public-pool mkpool
Coins BTC BTC BTC 9 chains
Mainnet track record not yet since 2014 yes live
Stratum V2 (2024 spec) ⚠️ branch
TLS for miners
Operator Web UI / API PWA, 8 langs engine only
Owner panel via address-ownership proof (BIP-137 + BIP-322)
Device telemetry + energy
Multi-node failover
Low-latency templates (Core IPC, opt-in)
Difficulty persistence (reconnect + restart)
Tests gating CI 1226 selftest only not in CI monthly cron
Signed + reproducible releases
License AGPLv3 + commercial GPLv3 GPLv3 GPLv3

mkpool is the other modern engine — multi-coin and already on mainnet; WarpPool trades multi-coin for a full operator experience (UI, telemetry, energy, signed packages) on Bitcoin.

WarpPool Suite — commercial sidecars (coming soon)

The OSS core is non-custodial solo — the block reward always goes straight to whoever finds it, no custody. That covers both a private pool (paid to your own address) and a public 0% pool (each visiting miner paid to their own address, per-worker) — both ship in the OSS. If you instead want everyone who contributes hashrate to get paid even without finding a block (shared-reward / PPLNS, which necessarily means custody + a payout ledger), that's the WarpPool Suite: optional commercial sidecars that run beside the pool and talk to it only over the public API.

  • Reward sharing / PPLNS payout engine — pay many miners from your own hot wallet; idempotent, reorg-safe, RBF fee-bumps, float watchtower.
  • Miner portal · operator dashboard ($/€, alerts, controls) · monitoring & backups · accounting / tax export · 8-language setup wizard.

WarpPool Suite — open-source core (available now) + commercial sidecars (coming soon)

Status: the pool is usable today; the sidecars are in preparation — coming soon. Payout paths are proven on-chain on regtest and signet so far; no mainnet block yet. No hashrate or earnings claims. Operating a pool that holds and pays out others' funds also carries obligations the software doesn't (AML/KYC, T&C, DDoS, SLAs) — the operator's responsibility.

Interested? Full overview in SUITE.md — register your interest at dvbprojekt@gmx.de.

Install

Platform How
Umbrel Add the DVB Projekt Community App Store → install dvb-WarpPool.
Docker docker pull git.warppool.org/dvb-projekt/dvb-warppool:1.25.7 (multi-arch amd64 + arm64).
Debian / Ubuntu Download .deb from the releases pagesudo apt install ./dvb-warppool_*.deb.
Fedora / RHEL Download .rpmsudo dnf install ./dvb-warppool-*.rpm.
Linux (other) .AppImage for x86_64 and aarch64.
macOS .dmg for Apple Silicon and Intel — see macOS install notes below.
Windows .msi builds are paused since the forge migration (no Windows build runner yet — returns as soon as one exists). Until then: run via Docker/WSL or build from source.
From source See Build from source below.

Every release artifact ships with SHA256SUMS + a cosign signature (project key — keyless OIDC + SLSA applied to GitHub-era releases ≤ v1.15.0) — see docs/PACKAGING.md for the verification recipes.

First-run setup wizard

On first start the daemon serves a one-page setup wizard on the app port until your config is saved (8 languages, auto-detected):

Part 1 — hardware, mining, location, electricity Part 2 — PV, Bitcoin Core detection, live checks
Setup wizard part 1 Setup wizard part 2

Hardware detection picks a profile recommendation; payout address, expected miners, pool fee, server location and electricity tariff follow. The Bitcoin Core card probes RPC + ZMQ live and offers one-click bitcoin.conf recommendations. The shots show the macOS variant (local bitcoind auto-detected, sleep-prevention card) — on Umbrel/Docker the Bitcoin fields come pre-filled from the container environment instead.

macOS install (unsigned .dmg)

The .dmg is not yet signed with an Apple Developer ID. Without that signature macOS Gatekeeper refuses to verify the bundle and shows the misleading dialog "dvb-WarpPool is damaged and can't be opened". The app itself is fine — Gatekeeper is reacting to the com.apple.quarantine extended attribute that Safari (and any browser) attaches to downloads.

One-line install (recommended):

  1. Download dvb-WarpPool-v1.25.7-aarch64.dmg (Apple Silicon) or …-x86_64.dmg (Intel) from the releases page.

  2. Run:

    curl -fsSL https://git.warppool.org/dvb-projekt/dvb-WarpPool/raw/branch/main/scripts/macos-install.sh \
        | bash
    

That downloads + runs scripts/macos-install.sh, which auto-picks the newest dvb-WarpPool-v*.dmg from ~/Downloads/, strips the quarantine attribute, copies the .app into /Applications/, re-registers it with LaunchServices, and unmounts the disk image. After it finishes, double-click the app in /Applications or run open /Applications/dvb-WarpPool.app.

Manual fallback, if you prefer to read what's happening:

# 1. Strip quarantine from the downloaded .dmg
xattr -dr com.apple.quarantine ~/Downloads/dvb-WarpPool-v*.dmg

# 2. Open the .dmg + drag dvb-WarpPool.app into /Applications via Finder

# 3. Strip quarantine from the installed .app too
xattr -dr com.apple.quarantine /Applications/dvb-WarpPool.app

# 4. Open
open /Applications/dvb-WarpPool.app

Apple Developer ID signing + notarization is on the roadmap (Phase B) — once that ships, the workaround disappears.

Sleep prevention. The Mac launcher automatically prevents system sleep while the daemon is running (via macOS caffeinate). Without it, the default 3h idle timeout would suspend Bitcoin Core overnight, RPC calls fail, and the hashrate graph drops to 0. Display sleep keeps working — you can let the screen go dark. Visible status: green info card on the admin profile page ("✓ macOS sleep mode disabled").

Tested on

Platform Architecture Max profile¹
Umbrel Home (16 GB) x86_64 Enterprise¹
Umbrel Pro (16 GB) x86_64 Enterprise¹
macOS (Apple Silicon, 8 + cores) aarch64 Enterprise¹
macOS (Intel, 8 + cores) x86_64 Enterprise¹
Raspberry Pi 5 (16 GB, 4 cores) aarch64 Large¹ (cores cap, not RAM)
Raspberry Pi 5 (8 GB, 4 cores) aarch64 Large¹ (NVMe HAT recommended)
Raspberry Pi 4 (4 GB, 4 cores) aarch64 Large¹ (Pi 5 + NVMe HAT preferred)
Docker multi-arch amd64 + arm64 depends on host

¹ Max profile = the hardware ceiling, not the profile you must run. The profile primarily scales pool resource allocations (connection cap, RAM target, Tokio thread pools, share-validator parallelism, retention windows) — see the Profile-Comparison table on /hardware for the concrete per-tier numbers. Solo and Solo + Friends setups happily run at Small or Medium on any of the platforms above. The higher tiers (Large, Enterprise) are designed for community-pool and public-pool scenarios and need commercial extensions that are not part of the OSS scope — reverse-proxy with per-IP rate-limit, payout engine, multi-admin RBAC, DDoS mitigation, T&C / privacy templates, SLA support. See docs/scaling.md for the tier matrix.

The hardware ceiling itself is computed by crates/hwdetect from RAM + logical-core count:

Ceiling RAM Logical cores
Enterprise ≥ 8 GB ≥ 8
Large ≥ 2 GB ≥ 4
Medium ≥ 512 MB ≥ 2
Small < 512 MB or < 2 cores

Full install guide + storage recommendations (NVMe HAT for Pi): see docs/PACKAGING.md.

Run a pool for your friends

The OSS stack is ready for a small TLS-secured pool where 5-10 trusted friends point their miners at your home setup over the internet. You need:

  • A free DuckDNS subdomain (1 min signup)
  • Router port-forward for :3334 (TCP, 3 min)
  • A real Let's Encrypt certificate — fetched automatically by the bundled setup script
./scripts/setup-tls-public.sh

The script installs acme.sh, issues the cert via DNS-01 challenge, drops it into the right place, and sets up 60-day auto-renewal. After a daemon restart, friends point their miners at <yoursubdomain>.duckdns.org:3334 with "TLS: Enabled (Bundled CA)" and they're in.

Full step-by-step guide: docs/solo-friends-setup.md (deutsche Version: docs/solo-friends-setup-de.md)

For larger deployments (community pool, public service) see docs/scaling.md — those tiers need extensions from the WarpPool Suite (commercial sidecars, coming soon — see SUITE.md).

Architecture

dvb-WarpPool/
├── crates/
│   ├── profiles/          # Small/Medium/Large/Enterprise resource tuning
│   ├── config/            # TOML schema (ported from dvb-gopool)
│   ├── hwdetect/          # Hardware detection + profile auto-recommendation
│   ├── stratum-v1/        # Stratum V1 + TLS listener + VarDiff + rate limit
│   ├── stratum-v2/        # Stratum V2 (NOISE_NX) server + client + sessions
│   ├── translator/        # V1 ↔ V2 translator proxy (extended channels)
│   ├── bitcoin-rpc/       # Bitcoin Core JSON-RPC + ZMQ
│   ├── job-builder/       # Block template → Stratum job
│   ├── share-validator/   # SHA256d share check (parallel)
│   ├── storage/           # SQLite + tiered retention + audit log
│   ├── api/               # Axum HTTP + SSE + auth (JWT, 2FA, API tokens)
│   ├── telemetry/         # Prometheus + miner vendor APIs
│   ├── notifier/          # ntfy/Telegram/Discord/APNs/SMTP
│   ├── health/            # Bitcoin Core health checks + anomaly detection
│   ├── autoupdate/        # Self-update: release-asset check + download/swap
│   ├── uninstall/         # Cross-platform uninstall helper
│   └── simulator/         # Sim miner, sim node, sim failures
├── apps/
│   ├── dvb-warppool-daemon/        # Main pool binary (V1+V2 hostable in parallel)
│   ├── dvb-warppool-cli/           # Admin CLI
│   ├── dvb-warppool-sim/           # Test-simulator CLI
│   ├── dvb-warppool-setup/         # First-run setup wizard
│   ├── dvb-warppool-translator/    # V1↔V2 translation-proxy sidecar
│   └── dvb-warppool-mac-launcher/  # macOS app-bundle launcher (caffeinate + supervision)
├── ui/                    # SvelteKit PWA
└── docs/                  # ARCHITECTURE.md, SECURITY.md, TESTING.md

Build from source

cargo build --release
cargo test --workspace
cargo run --bin dvb-warppool-daemon -- --config packaging/etc/config.example.toml
cargo run --bin dvb-warppool-sim   -- scenario solo-block-found

Build artifacts land in ~/.cache/dvb-WarpPool/target (outside iCloud, see .cargo/config.toml).

Documentation

The full documentation (Architecture / Getting Started / Packaging / Security / Sv2 phase history / Roadmap) is published via mdBook:

License

dvb-WarpPool is dual-licensed:

  • Open source — AGPL-3.0-or-later. Use, modify, and self-host it freely. The AGPL's copyleft (including its network-use clause) means that if you run a modified version as a network service, you must offer your users the corresponding source. Running it unmodified, or self-hosting privately, or publishing your changes under the AGPL, needs nothing further.
  • Commercial license (coming soon). If the AGPL doesn't fit your deployment — e.g. running a closed-source modified pool as a service, or bundling WarpPool into a proprietary product — a commercial license is being finalized alongside the WarpPool Suite. See COMMERCIAL-LICENSE.md and register your interest at dvbprojekt@gmx.de.

Releases up to and including v1.5.0 were published under MIT OR Apache-2.0 and remain available under those terms; the AGPL applies from the following commit onward.

Contribution

Unless you state otherwise, any contribution you intentionally submit for inclusion in this work is licensed under AGPL-3.0-or-later, and you grant DVB-Projekt the right to also distribute it under the commercial license above, so the dual-licensing model can be maintained. See CONTRIBUTING.md.