• v1.28.0 12a2bee025

    v1.28.0
    All checks were successful
    CI / Rust clippy (push) Successful in 1m49s
    CI / Rust fmt (push) Successful in 1m14s
    CI / Rust test (push) Successful in 6m14s
    CI / UI (SvelteKit) (push) Successful in 1m18s
    CI / Security Audit (push) Successful in 1m22s
    docs / build (push) Successful in 8m24s
    Release / Docker Multi-Arch (push) Successful in 23m11s
    Release / Binary aarch64-unknown-linux-gnu (push) Successful in 34m26s
    Release / Binary x86_64-unknown-linux-gnu (push) Successful in 10m14s
    Release / Linux .deb + .rpm (amd64) (push) Successful in 2m2s
    Release / Linux .deb + .rpm (arm64) (push) Successful in 1m48s
    Release / Linux AppImage (aarch64) (push) Successful in 26s
    Release / Linux AppImage (x86_64) (push) Successful in 26s
    Release / Cosign sign artifacts (push) Successful in 30s
    Release / Forgejo Release (push) Successful in 37s
    Stable

    dvb-projekt released this 2026-09-11 08:59:51 +00:00 | 277 commits to main since this release

    dvb-WarpTune: an auto-clock for AxeOS miners as a sidecar next to the pool.
    It holds a temperature target by stepping frequency and core voltage along
    a per-board ladder, with guardrails the firmware does not have, and it
    takes what it needs from the pool: reject reasons per worker and the
    electricity picture. The pool shows what the sidecar does with each
    device. Nothing in the pool talks back to a miner.

    Added

    • New workspace crate warppool-tune and binary dvb-warppool-tune
      (apps/dvb-warppool-tune): the dvb-WarpTune regulator. Reads AxeOS
      telemetry (GET /api/system/info, NerdOS GET /api/v2/settings for the
      board's own option lists), decides on a ladder step every 30 s and, only
      with --live on the command line and live = true per miner, writes
      it back with PATCH /api/system. Guardrails: temperature bands with
      hysteresis and a failsafe one degree under the firmware's own line, VR
      temperature, input voltage and current limits taken from the firmware,
      a thermal power budget per board (thermal_r_c_per_w), a reason-aware
      reject guard, hashrate-vs-expected, step memory for unstable steps, a
      write circuit breaker, read-back verification of every write, and a
      restore of the point the miner had at start on shutdown, reboot or any
      trip. The voltage curve is anchored on the device's own operating point,
      so a hand-tuned miner is never pushed above its proven voltage. Modes
      eco, balanced, max (beyond-spec steps opt-in) and energy.
      Vendor tables for the BM1370 (Bitaxe Gamma) and the BitForge Nano;
      NerdOS boards (NerdAxe, NerdQaxe, NerdOctaxe) bring their own ladders.
    • dvb-WarpTune journal: one JSONL line per decision, write, verification,
      probe error, pool event and mode switch; dvb-warppool-tune journal
      renders it as a table, follows it live, and summarises per miner
      (temperature, power, hashrate, efficiency, proposals per hour, live
      writes, an ambient-based estimate of the board's cooling resistance).
      check-config, probe, ladder and example subcommands.
    • Pool coupling for the sidecar: with sidecar.pool_api set, a miner's
      share counters come from its /api/workers row (the pool attributes
      reject reasons, the firmware does not; ESP-Miner resets its counters on
      reconnect). The row is found through the device's own stratumUser,
      masked wallets included; pool = false or a per-miner pool_api for
      devices on another pool. [energy] enabled = true drives miners in
      energy mode from /api/energy: the surplus mode on PV surplus, Eco at
      or above the expensive rate, Balanced otherwise, with a minimum hold
      between switches.
    • [mining.tune] in the pool config: the daemon polls the sidecar's
      read-only GET /snapshot (tune_poll_loop, same shape as the solar
      provider). GET /api/tune returns the pool's copy with its age;
      /api/miners carries a tune object per device, joined by host,
      resolved IP or device hostname. The Miners tab and the device page show
      a WarpTune badge (mode, frequency, dry run / live / stale / control off)
      with the last decision as tooltip, in all eight UI languages.
    • macOS: scripts/setup-warptune.sh installs the sidecar as a launchd
      agent (dry run by default, --live asks once), with --restart,
      --stop (restores every live miner first), --status, --uninstall;
      guide in scripts/warptune-setup.md.

    Changed

    • Umbrel: the app now maps a second port, 18335 by default
      (APP_DVB_WARPPOOL_API_PORT), to the pool API without the app login, so
      a sidecar on the LAN can read /api/workers and /api/energy. It
      serves the same anonymous GETs as the public pool; the UI port stays
      behind the app proxy and admin endpoints still need a token.

    dvb-WarpPool v1.28.0 — Downloads

    Docker

    git.warppool.org/dvb-projekt/dvb-warppool:v1.28.0 (multi-arch amd64+arm64, ohne v-Präfix)

    Native packages

    • Linux .deb: amd64 + arm64 → apt install ./dvb-warppool_*.deb
    • Linux .rpm: amd64 + arm64 → dnf install ./dvb-warppool-*.rpm
    • Linux AppImage: x86_64 + aarch64 portable
    • Linux tarballs: x86_64 + aarch64 for manual installs
    • macOS .dmg: added shortly after publish (built separately) — or build from source
    • Windows .msi: paused since the forge migration (no Windows runner yet)

    Signatures

    • SHA256SUMS + cosign bundle (SHA256SUMS.bundle, project key)
    • SBOM (SPDX) for all dependencies

    Verify (project public key cosign.pub in the repo root):

    cosign verify-blob \
      --key cosign.pub \
      --bundle SHA256SUMS.bundle \
      SHA256SUMS
    sha256sum --check SHA256SUMS
    

    First-time setup: run dvb-warppool-setup for the first-run wizard.

    Downloads