// search the answers below, or jump to a section
Two ways to run Bitaxe Baller — pick whichever fits.
A real native desktop app on both Mac and Windows. Click the icon, a window opens with the dashboard. No terminal, no Python install, no config files. The Mac build is signed + Apple-notarized; the Windows installer isn't yet code-signed (SmartScreen will prompt on first launch — one-click bypass).
.dmg from the home page, drag Bitaxe Baller to Applications, launch from Spotlight or Applications. On first launch macOS may show "Bitaxe Baller is an app downloaded from the internet. Are you sure?" — click Open. After that, it never asks again..exe installer from the home page and run it. It's a real Inno Setup installer: per-user install (no admin prompt), creates a Start Menu shortcut, registers a proper Uninstall entry under Settings → Apps → Installed apps. The first launch will trigger SmartScreen ("Windows protected your PC") because the binary isn't yet code-signed — click More info → Run anyway. We'll fix this with a signing cert once download volume justifies the cost. The app is open source on GitHub if you want to verify it before running.Bitaxe Baller ships as a native Umbrel community app — install it alongside Bitcoin Core, Mempool, Electrs, etc., and your fleet stays monitored 24/7 without leaving your Mac open. Same UI as the desktop apps, just running on your Umbrel.
http://umbrel.local or the IP your Umbrel uses).https://github.com/465media/umbrel-bitaxe-baller-store and confirm. Bitaxe Baller appears in the store.http://umbrel.local:13700 (Umbrel's app proxy) or directly at http://umbrel.local:13701.Data persists at ~/umbrel/app-data/bitaxe-baller/data/ on your Umbrel — config.json, logs/, and (Pro) the SQLite history db. Survives reinstalls and Umbrel updates. The community-store repo source is at github.com/465media/umbrel-bitaxe-baller-store if you want to audit the manifest before installing.
Heads up on ports: Umbrel runs Bitaxe Baller on ports 13700 / 13701 instead of the usual 5050 to avoid clashing with other Umbrel apps. The mDNS publisher still announces bitaxe-baller.local, so phones and laptops on the same LAN can hit either URL.
The dashboard works from a clone of the GitHub repo. You'll get the same UI but in your browser instead of a native window.
git clone https://github.com/465media/bitaxe-baller.git
cd bitaxe-baller
python3 -m venv venv && source venv/bin/activate
pip install -r requirements.txt
python app.py
# then open http://localhost:5050 (or :80 with sudo)
Requires Python 3.11+. Works on macOS, Linux, and Windows (via WSL or native Python). Full instructions in the README.
On the host machine (the Mac or Windows PC running the app), the dashboard appears in its own native window when you launch Bitaxe Baller. No browser tab needed.
From other devices on your LAN (phone, iPad, laptop), the same dashboard is reachable in any browser at:
http://bitaxe-baller.local (or :5050 if the app fell back to that port) — via mDNS / Bonjour, no IP neededhttp://<host-ip>:5050 — fallback if mDNS isn't available on the deviceEither paste your Bitaxe's IP (the one shown on its OLED) into the "+ add device" form, or hit ⚡ scan network and Bitaxe Baller will find it for you. Click the resulting card to open the device's full detail page.
No matches — try a different word, or contact support.
This usually means the page is loaded via a hostname (like localhost or bitaxe-baller.local) and the LAN-info request hasn't returned yet. It should resolve within a second. If it stays stuck, your firewall or browser extensions may be blocking the call to /api/lan-info.
If you see "Bitaxe Baller can't be opened because Apple cannot check it for malicious software", you likely got an unsigned build, or notarization hasn't propagated yet. Right-click (or Control-click) the app and choose Open; macOS will give you a different prompt with an "Open" button. Future signed releases won't show this.
Until we add Windows code signing, expect "Windows protected your PC" on first launch. Click More info, then Run anyway. The app is open source — you can verify its contents on GitHub.
The app tries to bind port 80 (so you get a clean URL like http://bitaxe-baller.local) and falls back to :5050 if it can't (typical when not running as root). When falling back to 5050, the URL becomes http://bitaxe-baller.local:5050. Both work; the only difference is whether you have to type the port. Run the CLI version with sudo to get port 80 cleanly. The packaged Mac/Windows apps handle this for you.
Three usual culprits:
The recommendation engine waits ~3 minutes after a device is added or its benchmark is reset before producing real tuning suggestions. This avoids firing on noisy startup data. Just give it a few minutes.
The home page outlines each device card based on the highest-severity recommendation:
The "Max" preset runs at 625 MHz / 1225 mV — that's near the chip-degradation threshold for the BM1370 and is intended for short benchmark sweeps, not 24/7 operation. For daily use we'd recommend Mild OC or Balanced. Always watch the VR temperature — that's the part that fails first on overclocked boards.
The Bitaxe firmware applies pool config only on a fresh stratum connection. Make sure "restart device after apply" is checked when you submit the pool form (it's on by default). If you unchecked it, manually click the restart button at the top of the device detail page.
The home page groups miners by coin, which Baller auto-detects from each miner's pool URL and payout address. That works for most pools — but a legacy 1… / 3… address is byte-for-byte identical between Bitcoin and Bitcoin Cash, and if your pool is a private IP (your own node, e.g. a BTC and a BCH node on the same Umbrel), there's no other hint to go on. In that case Baller can't tell the chains apart and falls back to BTC — so a BCH miner lands in the BTC group.
The fix: pin the chain manually. Open the miner's detail page; on the line under its name (model · firmware · uptime) there's a chain dropdown. Pick the right coin and the miner immediately moves to the correct group — with no change to the miner itself.
A few notes:
Remote access lets you reach your Bitaxe Baller dashboard from anywhere — your phone on cell data, a laptop at a coffee shop, a tablet on a different network. No port forwarding, no VPN, no fixed IP.
It's free. As of v1.16.5 you no longer need Pro. Free accounts can view their first miner remotely (and in the phone app); Pro shows your full fleet. The per-tier limit is enforced on our relay server, not in the app.
Two ways to view remotely:
How to turn it on (desktop): open the Pro modal (the chip in your dashboard's top-right header), find the Remote access section, and click Turn on — the status flips to green ("Connected") within a second. Pairing a phone turns it on automatically.
How it works under the hood: your desktop app opens an outbound WebSocket to our relay; it accepts no inbound connections, so nothing on your network is exposed. Remote browsers and phone apps connect to the same relay and get routed to your local app. All product logic — tuning, safety bounds, alerts — stays on your machine. The relay is dumb routing, and it's what caps free-tier views to one miner.
Security: Pro sessions use your license key; phone pairings use a short-lived pair code that the app exchanges for a per-device token (revocable any time from the desktop's Pair section). Sessions are 24-hour signed tokens. Turn remote access off in the Pro modal and every connection closes immediately. If you ever suspect a leak, deactivate at bitaxeballer.com/account and the relay drops all sessions tied to your key.
Read-only for now: the remote view lets you monitor your fleet — hashrate, temps, efficiency, severity — but tuning, scanning, and adding devices stay on the LAN dashboard.
The Bitaxe Baller mobile app is a viewer for the fleet your desktop install is already monitoring. Pair it to your desktop once, and it shows your miners wherever you are.
1. Get the app (free to download): iPhone / iPad — App Store · Android — Google Play.
2. Pair it to your desktop: on your desktop dashboard, open the Pro modal (chip, top-right) and find Pair iPhone or Android. Click Pair a new device — a QR code and a 22-character pair code appear, and remote access switches on automatically. In the app's pairing screen, scan the QR with your camera or type the code. The code expires after 60 seconds; click Generate a new code if it runs out.
3. That's it — the app shows your fleet's hashrate, temps, and stats, updating live over the relay. Free accounts see their first miner; Pro shows every miner.
No app reinstall needed for free remote access — if you already have the app, it picks up the free tier automatically once your desktop updates to v1.16.5 or later. Nothing to download again from the App Store or Play Store.
Phone showing a blank fleet? Check two things on the desktop: (1) in the Pro modal, the Remote access status is green ("Connected"); (2) your desktop app is updated to v1.16.5 or later — older versions only allowed Pro remote access, so a free pairing landed on an empty screen. Then reopen the phone app; it reconnects on its own.
Pro is the paid tier launched in v1.8 (2026-05-14). $29 per year, recurring. One license activates on up to 5 desktop installs (Mac, Windows, or Umbrel) — each install monitors unlimited Bitaxe miners on its LAN.
Shipped features:
relay.bitaxeballer.com; view from any browser at relay.bitaxeballer.com or from the iOS / Android app. Free shows your first miner; Pro shows the full fleet. No port forwarding, no VPN. Monitoring is read-only — tuning stays on the LAN dashboard.Shipped in v1.8.2: in-place auto-updates for Pro users on macOS and Windows (Chrome-style — the app downloads new versions in the background and installs on next launch).
Coming next: email + Telegram alert channels, mobile apps (iOS + Android, building on the same relay).
The free tier remains fully featured for single-device monitoring and tuning. Nothing currently in the free tier moves behind a paywall — Pro is purely additive. Buy Pro — $19 intro (then $29) · Full feature breakdown →
After purchase, you'll receive a license key by email (a long hyphenated string). In the dashboard, click the dim grey Pro button in the top-right header. Paste the key, hit Activate Pro. The button turns accent-green and Pro features unlock instantly — no restart needed. The modal then shows your account email, machine label, key suffix, and renewal date.
Moving to a new machine? Open the Pro modal on the old one and click Deactivate this machine to free the slot. Then paste the same key on the new machine.
You can also manage your machines from any browser at bitaxeballer.com/account — sign in with your key + the email you bought with. The portal also has a "Lost your license key? Recover by email" option if you ever lose the original email.
Every Pro feature is configured in one place: the Pro modal. Open it by clicking the PRO chip in the top-right of the dashboard header (next to the theme toggle). The chip is dim grey when Pro is inactive, accent-orange when it's active — clicking either way opens the modal.
Inside the modal, sections appear in order:
Other Pro features that don't live in the modal:
If the PRO chip isn't visible at all, you're running a pre-v1.7 build — restart the app or download the latest from bitaxeballer.com.
Your license stays active through the end of the period you've paid for. After that, the dashboard reverts to the free tier on the next launch — Pro features disappear, but everything you can do with the free tier keeps working. Your local data (device list, tuning history CSVs, SQLite history database, configured alerts) stays on your machine; we never delete anything stored locally. If you reactivate later, the SQLite history will still be there waiting.
The public leaderboard ranks opted-in users by best-share difficulty across four categories: all-time best (career best-share), this week (rolling 7-day window), per-model (top 10 within each Bitaxe model — fair fight for Gamma owners against other Gammas), and lucky (best-share ÷ avg hashrate — small miners can win this against fleet kings on luck).
Free to enter and view. As of v1.12 the leaderboard is open to all users — Pro and free. Free users authenticate with a verified email; Pro users authenticate with their license key. Either way, you opt in via the Pro modal in your desktop app: set a display name, set an email (free tier only), tick "Submit my best shares." First submission per email triggers a one-click verification link to your inbox; clicking it makes you eligible for monthly prizes.
How to turn it on: open the Pro modal (PRO chip, top-right of the dashboard header). In the Public leaderboard section, type a display name (1-30 chars, letters/numbers/spaces/._-), tick "Submit my best shares," click Save. Your devices start showing up on the public board within 5 minutes (or immediately on a new personal-best).
What we send per device: display name, MAC address, model (Gamma / Supra / Ultra / Hex / NerdQaxe), best-share difficulty (career + session), 15-minute average hashrate (for the "lucky" category), app version.
What we do NOT send: your IP, your location, your email, your real name, or your license key in the clear. The server stores only the SHA-256 hash of your license key, so even a full database leak would not reveal license keys.
Display name policy: 1-30 chars, alphanumeric + spaces + ._-. A light profanity blocklist runs server-side; obviously-bad names are rejected with 400. The desktop app doesn't moderate — it just sends what you type, and the server decides.
Turning it off: uncheck "Submit my best shares" and click Save. New submissions stop immediately. Existing entries decay off the public board after 30 days of inactivity (your row simply disappears from the rankings).
Best-share is a lottery. Two devices with identical hashrate can have wildly different best-shares — it's the highest random value pulled from a stream, not a function of total work. A 1.2 TH/s Gamma can absolutely beat a 10 TH/s Supra on best-share. That's why the "lucky" category exists.
On the last day of each month at 23:00 UTC, we draw winners and runners-up per Bitaxe model (Gamma, Supra, Ultra, Hex, NerdQaxe). The math is intentionally model-segregated because different chips have different physical share-rate distributions — pitting a 1.2 TH/s Gamma against a 10 TH/s Supra on raw difficulty isn't a contest, it's hardware physics.
Prizes per model:
Eligibility to win (designed to balance "anyone can play" with "no dominators"):
If you win or place top-5, the email comes to whatever address you used at signup. Check the address you can actually receive at — we don't have a way to recover a wrong email after the draw.
Short version: display name + MAC + model + best-share difficulty + 15-min hashrate are the only things shown publicly. Everything else is kept private and used solely for prize delivery and abuse moderation.
What's stored on the server:
What's NOT stored: your real name, your location, your IP geolocation (we don't look it up), any browser cookies on the leaderboard page, any analytics, any third-party tracking, your other Bitaxe Baller config (devices, tuning settings, pool details — those never leave your machine).
Turn it off entirely: uncheck "Submit my best shares" in the Pro modal and click Save. New submissions stop immediately. Your existing row decays off the public board after 30 days of no submissions and is then deleted with all its stored data including the captured IP. If you want immediate deletion, contact support.
The free tier sends nothing. Polling, tuning, logging all happen on your local network. The only outbound call is a once-per-hour update check to api.github.com for new releases.
The Pro tier adds one outbound call by default: license validation against bitaxeballer.com/api/license on activation, plus a once-per-24-hour cached re-check. The request contains only your license key — no hashrate, no tuning data, no device info, no telemetry.
If you opt in to remote access (free or Pro), the app also opens an outbound WebSocket to relay.bitaxeballer.com so you can reach your dashboard from outside your LAN. That socket carries your /api/* responses (device telemetry, tuning state) only when a remote browser tab is actually fetching them — idle when no one's looking. Disable it at any time in the Pro modal and the connection closes immediately. All three outbound calls are blockable at your firewall if you want pure airgap; the app degrades gracefully when offline.
One file per device per day, in the logs/ folder next to the app. Filename pattern: <label>_<YYYY-MM-DD>.csv. Open in Excel or pandas to compare tuning settings over time.
Two ways to get help: