Step-by-step monerod setup for Linux, macOS, and Windows. Tor integration, pruning, remote access, and why your own node is essential for privacy.
A Monero node validates transactions and strengthens the network. Running your own means maximum privacy: your wallet talks directly to your node instead of leaking data to third parties. Requirements: 4+ GB RAM, 60-200 GB SSD, broadband internet. Sync time: 12-48 hours. Cost: $0 (software is free). Difficulty: beginner-friendly with this guide.
| Benefit | Details |
|---|---|
| Maximum privacy | Your transactions broadcast from your node, not a third party's. No one logs which transactions are yours. |
| Trustless verification | You verify every transaction yourself. No trusting remote nodes to tell you the truth about the blockchain. |
| Network strength | More nodes = more decentralized = harder to attack. You directly improve Monero's censorship resistance. |
| Required for Haveno | Haveno (RetosSwap, DawnSwap) runs its own embedded node. Understanding monerod helps troubleshoot P2P trading. |
| Required for mining | Mining Monero (especially solo mining and P2Pool) requires a synced local node. |
| IP privacy with Tor | Run your node over Tor and even your ISP cannot see you're running Monero software. |
The remote node risk: When you connect Feather Wallet or Monero GUI to a public remote node, that node operator can see your IP address and the transactions you submit. They cannot steal your funds or see your balance (Monero's cryptography prevents that), but they can correlate your IP with your transaction activity. For many users this is acceptable. For maximum privacy, your own node eliminates this risk entirely.
| Component | Full Node | Pruned Node | Raspberry Pi |
|---|---|---|---|
| RAM | 4 GB minimum 8 GB recommended |
4 GB sufficient | 4 GB minimum |
| Disk | 250 GB SSD recommended (~190 GB blockchain + growth room) |
128 GB SSD recommended (~60 GB pruned + growth room) |
128 GB USB 3.0 SSD external |
| CPU | Any modern dual-core | Any modern dual-core | Cortex-A72 (Pi 4/5) |
| Internet | Broadband (10+ Mbps) ~150 GB initial download |
Broadband (10+ Mbps) ~50 GB initial download |
Broadband (5+ Mbps) |
| Sync time | 12-48 hours (SSD) 3-7 days (HDD) |
8-24 hours (SSD) | 2-5 days |
| Ongoing bandwidth | ~30-100 GB/month | ~20-50 GB/month | ~20-50 GB/month |
SSD is non-negotiable. Monero's blockchain requires millions of random reads during sync and verification. An HDD will work but takes 5-10x longer to sync and makes the node sluggish. A basic 256 GB SATA SSD ($25-30) is the single best investment for a Monero node.
Choose before you start:
| Full Node | Pruned Node | |
|---|---|---|
| Disk space | ~190 GB (growing) | ~60 GB (growing slower) |
| Validates all transactions? | Yes | Yes |
| Serves full blockchain to peers? | Yes | Partial (1/8th of old blocks) |
| Privacy benefit? | Full | Full (identical) |
| Best for | Dedicated server, lots of disk space | Personal use, limited disk, Raspberry Pi |
Recommendation: If you have 250+ GB free, run a full node. If disk is tight, pruned is just as good for personal privacy.
All platforms: Download from getmonero.org/downloads. Always verify the download hash against the signed hashes on the download page.
# Linux (x86_64) wget https://downloads.getmonero.org/cli/linux64 # Verify the hash (check getmonero.org for current hash) sha256sum linux64 # Extract tar xvf linux64 cd monero-x86_64-linux-gnu-*/
On macOS: download the macOS CLI or use the GUI from getmonero.org. On Windows: download the .zip, extract, and open a command prompt in the folder.
# Choose where to store the blockchain (needs 60-200 GB) mkdir -p ~/.bitmonero # Or use a dedicated drive: mkdir -p /mnt/ssd/monero
# Full node — uses ~190 GB disk ./monerod --data-dir ~/.bitmonero --log-level 0 # OR pruned node — uses ~60 GB disk ./monerod --data-dir ~/.bitmonero --prune-blockchain --log-level 0 # Custom data directory on external SSD: ./monerod --data-dir /mnt/ssd/monero --prune-blockchain
The node will start syncing from block 0. This takes 12-48 hours on a first run. You'll see block heights counting up in the log.
# In another terminal, check status: ./monerod status # Output when synced: # Height: 3245678/3245678 (100.0%) on mainnet, not mining, net hash ... # Output while syncing: # Height: 1500000/3245678 (46.2%) on mainnet, not mining, net hash ...
When the height matches the network height, your node is fully synced.
# Feather Wallet: Settings → Node → Add custom node # Address: 127.0.0.1 Port: 18081 # Monero GUI: Settings → Node → Local node # It auto-detects monerod running on localhost # CLI wallet: ./monero-wallet-cli --daemon-address 127.0.0.1:18081
Your wallet now talks exclusively to your own node. Zero data leakage to third parties.
For maximum privacy, route your node through Tor. This hides the fact that you're running a Monero node from your ISP and prevents network-level surveillance from correlating your IP with Monero activity.
# Debian/Ubuntu: sudo apt install tor # macOS (Homebrew): brew install tor # Start Tor service: sudo systemctl start tor # Linux brew services start tor # macOS
# Start monerod with Tor proxy + transaction padding: ./monerod \ --proxy 127.0.0.1:9050 \ --anonymous-inbound YOUR_ONION.onion:18083,127.0.0.1:18083 \ --pad-transactions \ --no-igd \ --hide-my-port \ --data-dir ~/.bitmonero \ --prune-blockchain # Flags explained: # --proxy → route all outgoing connections through Tor SOCKS5 # --anonymous-inbound → accept incoming connections via Tor hidden service # --pad-transactions → add random padding to prevent traffic analysis # --no-igd → disable UPnP (leaks to LAN) # --hide-my-port → don't announce your real port to peers
Tor hidden service setup: To create an anonymous-inbound address, add to your /etc/tor/torrc:
HiddenServiceDir /var/lib/tor/monero/
HiddenServicePort 18083 127.0.0.1:18083
Restart Tor, then find your .onion address in /var/lib/tor/monero/hostname. Use this as YOUR_ONION in the monerod command above.
--db-sync-mode fastest uses more RAM for faster writes during initial sync. Switch to safe after sync is complete.monero-blockchain-import. Faster than syncing from peers.--log-level 0 reduces disk I/O from logging.# Create systemd service: /etc/systemd/system/monerod.service [Unit] Description=Monero Daemon After=network.target [Service] User=monero ExecStart=/opt/monero/monerod \ --data-dir /home/monero/.bitmonero \ --prune-blockchain \ --non-interactive \ --log-level 0 \ --max-concurrency 4 Restart=always RestartSec=30 [Install] WantedBy=multi-user.target # Enable and start: # sudo systemctl enable --now monerod
This keeps your node running 24/7 and auto-restarts on crash or reboot.
| Command | Description |
|---|---|
status | Show sync height, hashrate, connections |
print_net_stats | Show bandwidth usage |
print_cn | Show connected peers |
print_bc <height> | Print block at specific height |
in_peers <n> | Limit incoming connections |
out_peers <n> | Limit outgoing connections |
save | Force save blockchain to disk |
exit | Gracefully shut down monerod |
| Type | Disk | Privacy | Network Help | Best For |
|---|---|---|---|---|
| Full node | ~190 GB | Maximum | Maximum | Servers, dedicated hardware |
| Pruned node | ~60 GB | Maximum | Good | Personal use, limited disk |
| Pruned + Tor | ~60 GB | Maximum++ | Good | Maximum privacy on limited disk |
| Remote node | 0 GB | Reduced | None | Mobile, casual use |
If you trade Monero peer-to-peer, running your own node has direct practical benefits:
I'm arnoldnakamura — 683 trades, 454 partners, 100% feedback (verified on Wayback Machine). Cash by Mail EU-wide, Face-to-Face in SW Germany.
Contact: Telegram @arnoldnakamura
Check your system clock (date) — monerod requires accurate time. Try set_limit 0 to remove bandwidth limits. Check if port 18080 is open for incoming connections (not required but helps). Try restarting with --add-peer node.moneroworld.com:18080 to bootstrap peer discovery.
Switch to a pruned node: stop monerod, restart with --prune-blockchain. This will prune the existing database in-place, freeing ~130 GB. Or move the data directory to a larger drive with --data-dir.
Limit peers: --out-peers 16 --in-peers 32 (defaults are higher). Or set bandwidth limits: --limit-rate-up 2048 --limit-rate-down 8192 (KB/s). Tor nodes naturally use less bandwidth.
Ensure monerod is running and RPC is enabled (it is by default on port 18081). Check firewall isn't blocking localhost:18081. In Feather Wallet: Settings → Node → Add → 127.0.0.1:18081.