How to Set Up a Bitcoin Full Node
A complete walkthrough for installing, configuring, and running Bitcoin Core (bitcoind) on Linux, macOS, and Windows. Learn how to sync the blockchain, configure your node, and start making RPC calls.
Why Run a Full Node?
Running your own Bitcoin full node gives you trustless verification of every transaction on the network. Instead of relying on third-party services, you validate blocks yourself. This matters for developers building applications, merchants accepting Bitcoin, and anyone who wants full sovereignty over their interaction with the network.
A full node downloads and validates the entire blockchain (roughly 550GB as of 2024), maintains a mempool of unconfirmed transactions, and relays transactions and blocks to other nodes on the network.
System Requirements
Before installing Bitcoin Core, make sure your system meets these minimum requirements:
Storage: At least 600GB of free disk space (or 10GB if running in pruned mode). An SSD is strongly recommended — syncing on a spinning hard drive can take weeks instead of days.
RAM: 2GB minimum, 4GB+ recommended. The UTXO set cache benefits significantly from more memory.
Bandwidth: The initial sync downloads the full blockchain. After that, expect 200MB-1GB of daily upload traffic if you accept incoming connections.
CPU: Any modern processor works. Initial block download is CPU-intensive but normal operation is lightweight.
Installing Bitcoin Core
On Ubuntu/Debian, the most reliable method is downloading directly from bitcoincore.org:
1. Download the latest release from bitcoincore.org/en/download 2. Verify the release signatures (always do this — it confirms the binary hasn't been tampered with) 3. Extract the archive and copy the binaries to /usr/local/bin
On macOS, you can use the .dmg installer from the same download page, or install via Homebrew with: brew install bitcoin
On Windows, download and run the .exe installer from bitcoincore.org.
Configuration
Bitcoin Core reads its configuration from bitcoin.conf, located in the data directory:
Linux: ~/.bitcoin/bitcoin.conf macOS: ~/Library/Application Support/Bitcoin/bitcoin.conf Windows: %APPDATA%\Bitcoin\bitcoin.conf
Key configuration options for developers:
server=1 — Enables the RPC server (required for any programmatic interaction) rpcuser=yourusername — Sets the RPC authentication username rpcpassword=yourpassword — Sets the RPC authentication password txindex=1 — Builds a full transaction index (needed for getrawtransaction on arbitrary transactions) rpcallowip=127.0.0.1 — Restricts RPC access to localhost only (security critical)
For pruned mode (saves disk space but limits some functionality), add: prune=550 (minimum value in MB).
Starting Your Node
Start Bitcoin Core in daemon mode by running: bitcoind -daemon
The node will begin syncing the blockchain. You can monitor progress using the getblockchaininfo RPC command, which returns the current block height and verification progress.
Initial Block Download (IBD) takes roughly 1-3 days on a modern machine with an SSD and good internet connection. During IBD, some RPC commands will return limited data until the chain is fully synced.
To check if your node is fully synced, look at the verificationprogress field in getblockchaininfo — when it reaches 0.999999 or higher, your node is caught up.
Making Your First RPC Call
Once your node is running with server=1 in the config, you can interact with it via RPC. The simplest way is using bitcoin-cli, which comes bundled with Bitcoin Core:
bitcoin-cli getblockchaininfo
This returns a JSON object with your node's chain state, including current height, difficulty, and sync progress. From here, you can explore the full set of RPC commands available in the bitcoind.app reference.
For programmatic access, you'll make HTTP POST requests to port 8332 (mainnet) or 18332 (testnet) with JSON-RPC formatted payloads.