bitcoind.app
CommandsGuidesContact ↗
Home/Guides/How to Set Up a Bitcoin Full Node
Getting Started

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.

In this guide
Why Run a Full Node?System RequirementsInstalling Bitcoin CoreConfigurationStarting Your NodeMaking Your First RPC Call

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.

Related RPC Commands

getblockchaininfoReturns an object containing various state info regarding blockchain processing.getblockcountReturns the height of the most-work fully-validated chain. The genesis block has height 0.getnetworkinfoReturns an object containing various state info regarding P2P networking.getpeerinfoReturns data about each connected network node.uptimeReturns the total uptime of the server in seconds.
Next Guide →
Bitcoin RPC Authentication Guide

bitcoind.app — Bitcoin Core RPC Reference

Contact ↗