Documentation
Reference for the config format, CLI, URL schemes and API. ccminer users: it's a drop-in — it reads your existing ccminer config.
config.json
Single pool — the four fields you'll always set:
Multi-pool failover — pools[] entries are tried in order when the pool above is unreachable. Top-level user/pass are defaults a pool entry can override:
Precedence: CLI flags override config values. Run with ./primo -c config.json — or just ./primo: a config.json in the working directory is loaded automatically. Any long flag name is also a valid config key ("threads", "api-bind", "statsavg", …), and pools[] holds up to 8 entries.
CLI flags
| Flag | Meaning |
|---|---|
| -a <algo> | Algorithm: verus, randomx, scrypt, sha256d |
| -o <url> | Pool URL (stratum+tcp:// or stratum+ssl://) |
| -u <user> | Username — usually wallet address + .worker |
| -p <pass> | Password (often just x) |
| -O <user:pass> | User and password in one flag |
| -t <n> | Thread count (default: all cores) |
| -c <file> | Load config.json (CLI flags override it) |
| -r <n> / -R <s> | Retries per pool / seconds between retries |
| -T <s> | Network timeout |
| -D / -P / -q | Debug / protocol dump / quiet output |
| -N <n> | Hashrate averaging window in samples (statsavg) |
| --cpu-affinity <mask> | Restrict threads to a CPU bitmask (hex). Default: automatic per-core pinning |
| --cpu-priority <0-5> | Mining thread priority 0–5, ccminer scale (default 0 = scheduler untouched) |
| --benchmark | Benchmark offline, no pool connection |
| -b / --api-bind <addr:port> | Bind the monitoring API (default 127.0.0.1:4068) |
| -V / -h | Version / help |
ccminer-compatible: same flags, same config format — drop-in, it reads your existing ccminer config.
URL schemes
stratum+tcp://host:port— plain TCP stratum.stratum+ssl://host:port— TLS;tcps/ssl/tlsare aliases. Certificates are unverified by design — pool certs are self-signed.- Stratum dialects (Verus / standard / Monero) are selected automatically from the algorithm.
Monitoring API
Read-only, ccminer-compatible, on port 4068 (localhost by default). Commands: summary, threads, pool, histo, hwinfo, meminfo, scanlog, help. Speaks the pipe-delimited ccminer protocol and WebSocket, so existing ccminer monitor apps work unchanged. In the APK, "Allow network monitoring" exposes it to your LAN; off means this device only.
Building from source
Requires an ARMv8 CPU with crypto extensions, clang, and the libcurl + libjansson dev headers — the only two runtime dependencies. Full internals documentation lives in the repo (docs/INTERNALS.md, PROVENANCE.md, NOTICE).