How to Run a Monero Node
Goal: get your computer syncing and serving the Monero network—privately and reliably—using either the easy GUI or the advanced CLI (monerod) path.
What you’ll install
- Monero GUI (easy mode) or Monero CLI tools. Download only from the official site for your OS.
- The daemon monerod, which syncs and validates the blockchain (wallets stay separate).
Option A — Easiest: Run a Node in the Monero GUI
- Install the latest Monero GUI for Windows/macOS/Linux from the official downloads page.
- Open the app → choose Advanced mode → go to Settings → Node.
- Select Local node to run your own node (best privacy). To point your wallet at another machine you run, choose Remote node and enter its host/port.
- Optional (space-saving): add the daemon startup flag
--prune-blockchain
in the GUI “Daemon startup flags” box to reduce disk usage by ~two-thirds.
Option B — Advanced: Run monerod
from the Command Line
Quick start (pruned node)
Open a terminal (PowerShell on Windows, Terminal on macOS/Linux), then run:
# Create a data folder (optional)
mkdir -p ~/.bitmonero
# Start a pruned mainnet node (saves ~2/3 disk)
monerod --prune-blockchain --sync-pruned-blocks
--prune-blockchain
saves disk space; --sync-pruned-blocks
reduces bandwidth during sync.
Run as a background service on Linux (systemd)
Running as a service keeps your node online and lets you route access over Tor if you wish. The official docs include a ready-to-use systemd guide and cover firewall ports to open.
# /etc/systemd/system/monerod.service
[Unit]
Description=Monero Node
After=network.target
[Service]
User=monero
Group=monero
ExecStart=/usr/local/bin/monerod --prune-blockchain
Restart=always
LimitNOFILE=65535
[Install]
WantedBy=multi-user.target
Then enable it:
sudo systemctl daemon-reload
sudo systemctl enable --now monerod
Open the right ports (if you want to help the network or serve wallets)
- P2P: TCP
18080
(lets peers fetch blocks from you). - Restricted RPC: TCP
18089
(view-only API for wallets / public nodes).
# Example with ufw on Ubuntu
sudo ufw allow 18080/tcp
sudo ufw allow 18089/tcp
Pruned vs. Full Node (Which should you run?)
- Pruned node: keeps ~1/3 of the chain on disk (saves ~2/3 space) with no loss of wallet functionality; contributes less to initial syncs for new peers. Use
--prune-blockchain
. - Full node: stores everything; best for helping new nodes bootstrap and for research/archival needs.
Make Your Node Usable by Your Wallets (and Others)
- Connect your own wallets: In GUI, set Settings → Node → Remote Node and point to your node’s IP and restricted RPC port.
- Public node mode: Add
--restricted-rpc
(view-only API),--rpc-restricted-bind-ip 0.0.0.0
,--rpc-restricted-bind-port 18089
, and--confirm-external-bind
. This exposes a safe subset of the API for wallets. - Auto-advertise your node: Add
--public-node
so wallets can auto-discover it over P2P.
Speed Up Sync (Optional)
You can import a prebuilt blockchain file, but note that normal P2P sync is usually faster and safer for most users.
Security & Privacy Best Practices
- Prefer Local node for maximum privacy; if you must use a remote node, use Tor/I2P where possible.
- If exposing RPC to the internet, always use
--restricted-rpc
(view-only), not the unrestricted RPC. - Consider routing traffic via Tor (
--proxy
,--anonymous-inbound
) if you run a hidden service.
Common monerod
Commands
- Status: in the
monerod
console, typestatus
. - Graceful exit: type
exit
. - Limit bandwidth:
limit 2048
(kB/s).
Example Full Configs
Public (restricted) remote node + pruned
# monerod.conf
prune-blockchain=1
sync-pruned-blocks=1
# P2P
p2p-bind-ip=0.0.0.0
p2p-bind-port=18080
# Restricted RPC (safe for wallets)
restricted-rpc=1
rpc-restricted-bind-ip=0.0.0.0
rpc-restricted-bind-port=18089
confirm-external-bind=1
public-node=1
Defaults and flags documented in the official monerod
reference and systemd guide.
Troubleshooting
- Sync is slow: ensure port
18080
is open so you accept incoming peers; consider--fast-block-sync=1
(default). - Disk won’t shrink after adding prune: pruning added later is logical; use
monero-blockchain-prune
to copy a smaller database. - Wallet can’t connect remotely: confirm you used the restricted RPC port and set Use custom settings → Remote Node in the GUI.
Official References
- Monero Downloads (GUI & CLI): getmonero.org/downloads
- Run a node via systemd + firewall ports: docs.getmonero.org/running-node/monerod-systemd
monerod
options & ports (RPC/public node/pruning): docs.getmonero.org/interacting/monerod-reference- GUI: connect to a remote or local node: getmonero.org/resources/user-guides/remote_node_gui.html
- Importing the blockchain (optional): getmonero.org/resources/user-guides/importing_blockchain.html
- What pruning is and how much it saves: getmonero.org/resources/moneropedia/pruning.html