GitHub - shiftingeden/kawpow-mac: Native Swift+Metal KawPow miner for Apple Silicon (M1-M5+). Clean replacement for thinminerpro. · GitHub
/" data-turbo-transient="true" />
Skip to content
Search or jump to...
Search code, repositories, users, issues, pull requests...
-->
Search
Clear
Search syntax tips
Provide feedback
--><br>We read every piece of feedback, and take your input very seriously.
Include my email address so I can be contacted
Cancel
Submit feedback
Saved searches
Use saved searches to filter your results more quickly
-->
Name
Query
To see all available qualifiers, see our documentation.
Cancel
Create saved search
Sign in
/;ref_cta:Sign up;ref_loc:header logged out"}"<br>Sign up
Appearance settings
Resetting focus
You signed in with another tab or window. Reload to refresh your session.<br>You signed out in another tab or window. Reload to refresh your session.<br>You switched accounts on another tab or window. Reload to refresh your session.
Dismiss alert
{{ message }}
shiftingeden
kawpow-mac
Public
Notifications<br>You must be signed in to change notification settings
Fork
Star
main
BranchesTags
Go to file
CodeOpen more actions menu
Folders and files<br>NameNameLast commit message<br>Last commit date<br>Latest commit
History<br>18 Commits<br>18 Commits
Sources/kawpow-mac
Sources/kawpow-mac
promo
promo
.gitignore
.gitignore
BUGS_AND_FIXES.md
BUGS_AND_FIXES.md
Package.swift
Package.swift
README.md
README.md
config.json
config.json
View all files
Repository files navigation
kawpow-mac
A native KawPow miner for Apple Silicon Macs (M1 through M5+), written in Swift + Metal.
Why
thinminerpro — the closed-source binary used by Unmineable-Mac — does not submit shares on M3+<br>Apple Silicon. The Metal kernel works, but the closed Swift host orchestration is broken on<br>newer chips. This is a clean rewrite using the verified kernel + the public KawPow spec.
Status
✅ Working — accepts shares against unMineable's KawPow pool on<br>modern Apple Silicon (verified on M5 MacBook Air, 2026-05-25). First<br>open-source KawPow miner known to do this on M3+ chips.
M0: kernel verified working on M5 (extracted + tested standalone)
M1: project skeleton + stratum client
M2: target conversion + submit wire format
M3: KawPow per-epoch RANDOM_MATH + DATA_LOADS generator
M4: DAG generation (light cache + 5.5 GB DAG GPU fill in ~30s on M5)
M5: mining loop integration (PSO cache, atomic results, ~2.7 MH/s)
M6: spec-compliant against Ravencoin's official progpow_hash test vectors
M7: live on unmineable — first accepted share at jobId 3d56a,<br>pool replied {"id":3,"result":true,"error":null} ✅
Bugs found and fixed along the way
Full chronicle in BUGS_AND_FIXES.md. Five real<br>algorithm bugs were uncovered between M5 and M6:
Race condition writing results[] from multiple GPU threads (atomic guard added)
PROGPOW Fisher-Yates shuffle ordered sequentially instead of interleaved per spec
Math-op source generation used two rnd() calls when spec uses one (with distinct-source enforcement)
PROGPOW_DAG_ELEMENTS was 4× too small — kernel only addressed the first 1/4 of the DAG
DAG generation used 256 parent-folding rounds; Ravencoin's KawPow spec uses 512 — every DAG item we computed differed from spec, which is why the pool always replied "Invalid share"
Diagnostic harnesses available
Command<br>Purpose
kawpow-mac verify-vectors<br>Run Ravencoin's official ProgPoW test vectors. Passes.
kawpow-mac kernel-vs-cpu<br>Bitwise compare Metal kernel and CPU light-eval
kawpow-mac dag-crosscheck<br>Cross-check GPU DAG fill against CPU spec
kawpow-mac dump-ops<br>Print our generated RANDOM_MATH/DATA_LOADS source
KAWPOW_FORCED_TARGET=…<br>Override kernel target to fast-find shares (for pool format diagnostics)
Build
swift build -c release<br>.build/release/kawpow-mac
Requires macOS 13+ and an Apple Silicon Mac.
Testing it yourself
Two paths: just the miner binary (fast, explicit pool replies in the<br>terminal), or the full Unmineable-Mac app (slower, real end-user UX).
A. Standalone miner — quickest end-to-end test
git clone https://github.com/shiftingeden/kawpow-mac.git<br>cd kawpow-mac<br>swift build -c release
Verify the spec-compliant algorithm against Ravencoin's official test<br>vectors (under 5s, no network needed):
./.build/release/kawpow-mac verify-vectors
You should see all four ✓ lines (mix + final for block 0 and<br>block 49). If any ✗, something is broken in your toolchain — open<br>an issue.
Bitwise CPU↔Metal kernel cross-check (catches Metal driver oddities,<br>~10s including DAG build):
./.build/release/kawpow-mac kernel-vs-cpu
You should see ✓ AGREE — CPU and kernel produce the same mix_hash.
Now actually mine for ~5 min. Drop a config.json next to the binary<br>with your own unMineable worker string (COIN:ADDRESS.WORKER#REFERRAL):
config.json cat > config.json 'EOF'<br>"user": "LTC:YOUR_LTC_ADDRESS_HERE.yourworker",<br>"chosenURL": "kp.unmineable.com",<br>"chosenPort": 3333,<br>"deviceNumber": 0,<br>"intensity":...