Android 7+ — Termux app
~200 MB storage
Internet connection
Windows 10 (2004+) or Windows 11
WSL2 enabled — ~200 MB download
Internet connection
macOS 13 (Ventura) or newer
Intel or Apple Silicon — ~3 GB free (Homebrew + Xcode CLT)
Internet connection
Pi 3 / 4 / 5 — Raspberry Pi OS 64-bit
A user with sudo — ~1 GB free
Internet connection
All platforms produce identical nodes — same identity, same protocol, same gossip network.
Download Termux from the GitHub releases.
pkg update && pkg upgrade first.
Copy and paste this command into Termux:
pkg install -y wget && wget https://www.plexum.net/nodepulse/core-dist/install_termux.zip && unzip install_termux.zip && bash ./termux-setup.sh
The installer will handle everything: dependencies, identity generation, web server files, and configuration.
bash ~/bin/start-server
Open the URL shown in the terminal output in any browser. This is your node's public address.
On the same device, you can also access your node at:
http://localhost:8080
Wait for the node to propagate across the network — check the Node Monitor page.
When you wish to disable remote access to the instance and shut down the server Press Ctrl+C in the running session, or open a new Termux session and run:
bash ~/bin/stop-server
wsl --install, then reboot.
Download install_wsl2.zip and unzip it anywhere on your PC.
Direct link:
Or download directly to your Desktop via PowerShell:
curl.exe -L -o "$env:USERPROFILE\Desktop\install_wsl2.zip" https://www.plexum.net/nodepulse/core-dist/install_wsl2.zip
Open PowerShell as Administrator, navigate to the unzipped folder and run:
cd C:\path\to\install_wsl2
.\wsl2-import.ps1
The script downloads Ubuntu 24.04 (~200MB, saved in %TEMP% for reuse), creates the NodePulse WSL2 distro, installs all services, and isolates it from the Windows filesystem.
NodePulse is ready! to appear before continuing.
Open PowerShell (no admin needed) and enter the distro:
wsl -d NodePulse
Then start all services:
start-server
Open the URL shown in the terminal output in any browser. This is your node's public address.
Wait for the node to propagate across the network — check the Node Monitor page.
When you wish to disable remote access to the instance and shut down the server, Inside the distro, run:
stop-server
To check service status:
server-status
The NodePulse filesystem is isolated from Windows — use VS Code with the WSL extension (ms-vscode-remote.remote-wsl).
First, mount disk C inside the distro:
mount -t drvfs C: /mnt/c
Then press Ctrl+Shift+P in VS Code and run WSL: Connect to WSL using Distro — select NodePulse. Once connected: File > Open Folder > /root/www
From PowerShell (outside the distro):
wsl --unregister NodePulse
To also delete the distro files:
Remove-Item -Recurse -Force "$env:USERPROFILE\WSL\NodePulse"
Open the built-in Terminal app (Applications → Utilities → Terminal, or search it with Spotlight ⌘+Space).
curl and unzip ship with macOS by default. The installer pulls the remaining dependencies via Homebrew (php, nginx, cloudflared, python, tmux, node) automatically. Requires macOS 13 (Ventura) or newer.
Copy and paste this command into Terminal:
curl -L -O https://www.plexum.net/nodepulse/core-dist/install_osx.zip && unzip -o install_osx.zip && bash ./osx-setup.sh
The installer will handle everything: dependencies, identity generation, web server files, and configuration.
bash ~/bin/start-server
Open the URL shown in the terminal output in any browser. This is your node's public address.
On the same Mac, you can also access your node at:
http://localhost:8080
Wait for the node to propagate across the network — check the Node Monitor page.
When you wish to disable remote access to the instance and shut down the server Press Ctrl+C in the running session, or open a new Terminal window and run:
bash ~/bin/stop-server
To check service status:
bash ~/bin/server-status
In any new terminal the bare start-server, stop-server and server-status commands are also on PATH.
To remove NodePulse from the Mac:
pm2 delete peerserver 2>/dev/null; rm -rf ~/.nodepulse ~/www ~/nodepulse-bin ~/services/peerserver ~/.server-mode ~/bin/start-server ~/bin/stop-server ~/bin/server-status ~/bin/nodepulse
Homebrew packages (php, nginx, cloudflared, python, tmux, node) stay installed — remove them with brew uninstall if no longer needed, and delete the # NodePulse block from your shell rc file.
pi), not as root.
Flash Raspberry Pi OS 64-bit with the Raspberry Pi Imager, enabling SSH and your Wi-Fi credentials in the Imager settings. Then connect to it:
ssh pi@raspberrypi.local
A Pi 4 with 2 GB or more is recommended. No port forwarding and no public IP are needed — the tunnel handles inbound traffic.
Copy and paste this command into the Pi's shell:
sudo apt update && sudo apt install -y curl unzip && curl -L -O https://www.plexum.net/nodepulse/core-dist/install_raspberry.zip && unzip -o install_raspberry.zip && bash ./rpi-setup.sh
npm install peer step takes several minutes on a Pi. That is normal — let it finish. If anything fails, the real error is in ~/tmp/apt-install.log.
Then open a new shell (or run source ~/.bashrc) so ~/bin lands on your PATH.
start-server
nginx runs unprivileged with its own prefix in ~/nginx/ — its logs are in ~/nginx/logs/, not /var/log/nginx.
This is what a Pi buys you over a phone or a laptop: a node that survives reboots and restarts itself if the stack dies. The installer ships a systemd unit — enable it:
sudo systemctl enable --now nodepulse
Follow the log to read the tunnel URL:
journalctl -u nodepulse -f
start-server by hand while the service is active — both would compete for port 8080.
Open the URL shown in the terminal output in any browser. This is your node's public address.
From any device on the same LAN, you can also reach the node at:
http://raspberrypi.local:8080
Wait for the node to propagate across the network — check the Node Monitor page.
If you started it by hand, press Ctrl+C in the running session, or from another shell run:
stop-server
If it is running as a service:
sudo systemctl stop nodepulse
To check services plus SoC temperature, throttling and free memory:
server-status
Unlike the WSL2 distro, the Pi is a persistent machine on your LAN and the tunnel exposes it publicly. The Terminal and PulseTerminal apps hand out a shell as whichever user runs the stack — and on Raspberry Pi OS that user often has passwordless sudo.
sudo passwd -l pi
Locking the password, dropping the user from the sudo group, or installing NodePulse under a dedicated unprivileged account all work. Never run the stack as root.
To remove NodePulse from the Pi:
sudo systemctl disable --now nodepulse; sudo rm -f /etc/systemd/system/nodepulse.service; sudo systemctl daemon-reload; pm2 delete peerserver 2>/dev/null; rm -rf ~/.nodepulse ~/www ~/nginx ~/services/peerserver ~/.server-mode ~/.nginx-bin ~/bin/start-server ~/bin/stop-server ~/bin/server-status ~/bin/run-looped ~/bin/nodepulse ~/bin/cloudflared
Deleting ~/.nodepulse/ destroys the node identity — the node would rejoin the network as a brand new node_id. Back that folder up first if you want to keep it. The apt packages stay installed; remove them with sudo apt remove if no longer needed.
1. The installer generates an RSA-2048 key pair → your unique node_id 2. A local web server starts on port 8080 (PHP behind it via FastCGI) 3. Cloudflared creates a public tunnel → your *.trycloudflare.com 4. NodePulse signs (node_id + URL + timestamp) with your private key 5. The signed announcement is sent to seed nodes via gossip protocol 6. Seeds propagate your node to the entire network 7. A maintenance loop keeps your node alive (heartbeat + gossip sync)
No account. No registration. No cloud. Your identity is your key pair.
Cloudflared may take 10-30 seconds to establish. If it fails, it will automatically retry with increasing delays (30s–5min). Check your internet connection.
Another process is using port 8080. Stop it first:
bash ~/bin/stop-server
(bare stop-server also works when ~/bin is on PATH — e.g. inside the WSL2 distro)
Propagation can take 1-2 minutes. The announce cycle contacts seed nodes, which then gossip to other peers. Refresh the monitor page after a moment.
Check for undervoltage — it is the most common cause of a Pi node that slowly falls apart:
server-status
Any throttling value other than 0x0 means the Pi is being throttled, almost always by an underpowered power supply. Use the official 5V/3A (Pi 4) or 5.1V/5A (Pi 5) adapter. On the Pi, nginx errors are in ~/nginx/logs/error.log, not /var/log/nginx.
NodePulse is fully self-contained. To remove everything:
rm -rf ~/.nodepulse ~/www ~/.server-mode ~/services/peerserver ~/bin/start-server ~/bin/stop-server ~/bin/server-status ~/bin/nodepulse
On macOS use the Uninstall step in the macOS tab instead (it also removes ~/nodepulse-bin and the PM2 service). On the Raspberry Pi use the Uninstall step in its tab (it also removes the systemd unit and ~/nginx). On WSL2 simply unregister the distro.
Need help? Join the network and reach us through the mesh.