HarbourOS is the only purpose-built OS that runs a production Flux CUMULUS node and Plex Media Server on the same device — fully managed from one dashboard.
Flux is a decentralized cloud infrastructure network. Node operators run Flux software on their hardware and earn FLUX rewards in return for contributing compute, storage, and network resources to the network.
Flux nodes host Docker applications deployed by users and projects across the network. Your Pi becomes part of a global infrastructure layer.
Nodes earn FLUX rewards approximately every 5–6 days (depending on queue position). Rewards are paid automatically to your configured payment address.
CUMULUS is the entry tier and the one supported on Pi 5. NIMBUS and STRATUS require more powerful hardware. All tiers require 1,000 FLUX collateral.
Setting up a Flux node from scratch involves multiple services, config files, RPC credentials, and FluxOS compatibility workarounds. HarbourOS handles all of it.
| Challenge | Without HarbourOS | With HarbourOS |
|---|---|---|
| flux.conf generation | Manual, easy to miss flags | Automatic with all required flags |
| Insight Explorer setup | Must know to add 5 flags | Included by default |
| fluxbenchd credentials | Often wrong after install | Auto-corrected on install |
| P2SH transaction crashes | Manual source patching | Eliminated by insightexplorer=1 |
| Node monitoring | SSH + CLI commands | Web dashboard |
| Wallet & earnings | External explorer | Live in dashboard |
| Benchmark results | CLI only | Live cards in UI |
| Plex coexistence | Manual tuning required | Pre-configured resource balance |
Open the Flux Node tab in the HarbourOS dashboard and click Install. Docker, FluxOS, fluxbenchd, and the correct flux.conf are all configured automatically.
The dashboard polls node status every 30 seconds, benchmark results every 5 minutes, and wallet data every 5 minutes — all cached to avoid hammering the network.
Flux CUMULUS tier has specific hardware requirements. The Raspberry Pi 5 (8 GB) with NVMe meets all of them.
| Component | Minimum | Recommended |
|---|---|---|
| Board | Raspberry Pi 5 (8 GB) | Raspberry Pi 5 (8 GB) |
| Storage | USB 3.0 SSD (≥240 GB) | NVMe via PCIe HAT (≥240 GB) |
| Write speed | 180 MB/s | 350+ MB/s (NVMe) |
| Power supply | 5V/3A (not sufficient) | Official Pi 27W (5.1V/5A) |
| Cooling | Heatsink | Active cooler (fan) |
| Network | 10 Mbps up/down | 100+ Mbps, static IP or DDNS |
| RAM | 7.5 GB available | Pi 5 (8 GB) = 7.9 GB usable |
The Flux Insight Explorer must index approximately 2.6 million blocks during initial setup. This involves millions of database write operations. On a USB SSD this takes 3–5 days; on NVMe via PCIe it completes in the same window but at lower temperature and with more headroom for Plex coexistence.
A microSD card is not viable. The write endurance would be exhausted within weeks, and the throughput (~30 MB/s) would make the initial sync take 3–4 weeks.
PCIe HAT required — Pi 5 exposes a PCIe Gen 2 x1 connector. Compatible HATs: Pineboards HatDrive, Geekworm X1004, Argon ONE M.3, and others.
Four services run together. HarbourOS configures and monitors all of them from a single systemd + PM2 supervision layer.
The most important configuration decision is enabling Insight Explorer mode in flux.conf. This single setting routes FluxOS through its processInsight() code path instead of processStandard(). The standard path crashes on P2SH collateral transactions — a bug that affects all modern Flux nodes using P2SH addresses.
insightexplorer=1, FluxOS's explorer works correctly on all transaction types including P2SH. No FluxOS source files are modified.FluxOS includes an internal block explorer that indexes every transaction in the Flux blockchain. This is required for node confirmation, application deployment tracking, and payment verification. The explorer has two processing modes:
| Mode | Activated by | Code path | P2SH support |
|---|---|---|---|
| Standard | Default (no flag) | processStandard() |
Crashes on P2SH tx |
| Insight Explorer | insightexplorer=1 |
processInsight() |
Full support |
The crash in processStandard() occurs because P2SH transactions don't include an addresses[] array in their scriptPubKey. The standard code reads scriptPubKey.addresses[0] without a null check, throwing an exception that halts the explorer's block processor.
With insightexplorer=1, fluxd builds supplementary indexes (address index, timestamp index, spent index) as it processes blocks. FluxOS's processInsight() path uses these indexes to look up transaction data differently — without touching scriptPubKey.addresses. The crash never occurs.
processInsight() path — this means the explorer races through ~163,000 blocks almost instantly during initial sync. You'll see the scanned height jump from ~699k to ~862k in seconds.fluxd downloads 2.6M block headers and transaction data from Flux P2P peers.
fluxd builds supplementary indexes required by insightexplorer mode. Most of the wall-clock time is here.
FluxOS's explorer (MongoDB) scans each block via processInsight(), building its own transaction index.
FluxOS skips this range — scanned height jumps to 862,000 in seconds.
Remaining blocks from 862k to current height (~2.6M). Explorer processes at ~200-500 blocks/second.
Once benchmark returns CUMULUS, fire startdeterministicfluxnode. Confirmation takes ~6 minutes (3 blocks).
The Flux benchmark tests CPU performance (EPS), RAM size, disk write speed, and network speed. A CUMULUS tier qualification requires minimum thresholds in each category.
| Metric | CUMULUS minimum | Pi 5 + NVMe typical |
|---|---|---|
| CPU cores | 2 | 4 |
| RAM | 7 GB | 7.9 GB |
| Disk write | 100 MB/s | 350–400 MB/s |
| EPS (encrypt/sec) | 500 | 850–900 |
| Download | 30 Mbps | ISP-dependent |
| Upload | 10 Mbps | ISP-dependent |
| Tier qualification | All above | CUMULUS |
| Service | RAM | CPU (idle) |
|---|---|---|
| fluxd (zelcash) | ~440 MB | 5–8% |
| MongoDB (FluxOS data) | ~450 MB | 1–3% |
| FluxOS (node.js) | ~190 MB | 2–3% |
| fluxbenchd | ~40 MB | <1% |
| Plex (idle) | ~350 MB | ~0.2% |
| HarbourOS UI | ~70 MB | <1% |
| Total | ~1.5 GB | ~12–15% |
During Plex 1080p transcode, CPU rises to 30–50%. During initial explorer sync, MongoDB adds ~1 GB RAM and CPU spikes to 100%. Plan accordingly.
Running both services simultaneously is viable with proper configuration. The key constraints are RAM and thermal management.
Plex direct play with Flux running — essentially zero conflict. Flux uses 5–8% CPU at steady state, leaving 90%+ for Plex direct play and library management.
Plex 4K software transcode + Flux simultaneously pushes CPU temperature to 75–82°C. The Pi 5 Active Cooler handles this, but the system will run hot. Avoid heavy transcoding during the initial 4–5 day explorer sync.
Set MongoDB's WiredTiger cache to 1–1.5 GB (cacheSizeGB: 1.2 in mongod.conf). The default 2 GB leaves insufficient headroom for Plex transcoding and can cause OOM events.
A Raspberry Pi 5 (8 GB) with NVMe was configured with HarbourOS v1.1.0, running both a Plex Media Server and a Flux CUMULUS node. The blockchain download completed in approximately 2 hours. The Insight Explorer index build (fluxd supplementary indexes) took approximately 107 hours on NVMe at ~360 MB/s average write speed.
After index completion, FluxOS processed the full block history with the processInsight() path — zero P2SH errors, no explorer stalls. The fast-skip zone (blocks 699,420–862,002) was traversed in under 30 seconds. Scanned height reached chain tip within hours of fluxd index completion.
The node passed the fluxbenchd CUMULUS qualification benchmark (EPS ~873, disk ~357 MB/s, 4 cores, 7.9 GB RAM). The startdeterministicfluxnode command broadcast successfully; the node reached CONFIRMED status 6 minutes later (3 blocks). Plex remained fully operational throughout the entire process, with only a temporary pause during the insightexplorer migration reindex.
Steady-state temperature with active cooling: 55–60°C at Flux+Plex idle. During simultaneous Plex 1080p transcode + Flux blockchain activity: 72–78°C. No thermal throttling observed at idle. All metrics above use anonymized data — no IP addresses, wallet addresses, TXIDs, or node identifiers were included.
-reindex flag to add insightexplorer=1 to an existing node — this is a one-time operation. New installations generate the correct flux.conf from day one with no reindex needed.systemctl enable and Restart=on-failure. A reboot adds a few hours at most, not days. The insightexplorer index is durable — it does not need to be rebuilt from scratch after a clean shutdown.startdeterministicfluxnode again to re-enter the network queue. There is no penalty for expiry.16124 (fluxd RPC), 16125 (fluxd P2P), 16126–16129 (FluxOS), 16224 (fluxbenchd). The HarbourOS installer configures UFW rules automatically if UFW is installed.insightexplorer=1, FluxOS routes through processInsight() which handles all transaction types correctly. No source file modifications are needed. A legacy patch script (harbouros-flux-patch.sh) is included for emergency fallback situations only, and is clearly labelled as such.Install HarbourOS on your Raspberry Pi 5 and open the Flux Node tab to get started.