If the RPC interface is how you talk to your Bitcoin node, bitcoin.conf is how you shape it — the settings file that decides how much disk it uses, how it reaches the network, and who is allowed to command it. This reference covers the options a node operator and solo miner actually sets, grouped by purpose, with each description drawn from Bitcoin Core’s own built-in help text. It is a working subset, not the full option list; confirm exact defaults for your release with bitcoind -help.
The file itself is plain text: one setting=value per line, comments start with #, and it lives in your data directory (~/.bitcoin/bitcoin.conf on Linux, %APPDATA%\Bitcoin\bitcoin.conf on Windows, ~/Library/Application Support/Bitcoin/bitcoin.conf on macOS). Any command-line flag except -conf itself can also go in the file.
Storage & chain — how big is my node?
| Option | What it does |
|---|---|
prune=<n> |
Reduces storage by deleting old blocks. 0 disables pruning (a full archival node); 1 allows manual pruning via the pruneblockchain RPC; a value ≥ the minimum is a target size in MiB for automatic pruning. Incompatible with txindex. Reverting it later requires re-downloading the entire chain. |
dbcache=<n> |
Maximum database cache size in MiB. Raising it speeds up the initial block download markedly — make sure you have the RAM. Unused mempool memory is shared with this cache. |
txindex=1 |
Maintains a full transaction index, used by the getrawtransaction RPC. Required if you want to look up arbitrary historical transactions by txid. Incompatible with pruning. |
blockfilterindex=1 |
Maintains an index of compact block filters (BIP157/158), which light clients use to scan for their transactions privately. |
coinstatsindex=1 |
Maintains the coinstats index used by the gettxoutsetinfo RPC — lets you query UTXO-set statistics without a full recompute. |
assumevalid=<hash> |
If this block is in the chain, assume it and its ancestors are valid and potentially skip their script verification (set to 0 to verify every signature from genesis). Speeds up initial sync; the default is a hard-coded recent block. |
par=<n> |
Number of script-verification threads (0 = auto, negative = leave that many cores free). Governs CPU use during validation. |
datadir=<dir> |
Specifies the data directory — where the blockchain, chainstate, wallet, and this config live. |
Network & connectivity — how does my node reach the world?
| Option | What it does |
|---|---|
listen=1 |
Accept inbound connections from outside (enabled by default unless -proxy, -connect, or -maxconnections=0 is set). Running with listen=1 and a reachable port makes you a contributing node, not just a leech. |
maxconnections=<n> |
Maintain at most n automatic connections to peers. Manually-added peers (addnode) have a separate limit and are not counted here. |
maxuploadtarget=<n> |
Tries to keep outbound traffic under the given target per 24h. Doesn’t apply to blocks created in the past week. 0 = no limit. Accepts unit suffixes (M by default). Useful on metered connections. |
onlynet=<net> |
Make automatic outbound connections only to the named network (ipv4, ipv6, tor, cjdns). Can be repeated. Set onlynet=onion to run Tor-only for privacy. |
proxy=<ip:port> |
Connect through a SOCKS5 proxy (e.g. Tor at 127.0.0.1:9050). Can be scoped to one network with =network. Disabled by default. |
dnsseed=<0|1> |
Query DNS seeds for peer addresses when low on peers (on by default unless -connect is used). Disable it if you want zero DNS leakage and supply your own peers. |
blocksonly=1 |
Reject transactions from network peers and disable automatic transaction relay. Cuts bandwidth substantially; RPC-submitted transactions still work — a common setting for a node whose only job is validation and block templates. |
RPC — who is allowed to command the node?
This is the security-critical section. The rpcbind help says it plainly: do not expose the RPC server to untrusted networks such as the public internet.
| Option | What it does |
|---|---|
server=1 |
Accept command-line and JSON-RPC commands. Required for bitcoin-cli and for a miner talking to the node. |
rpcauth=<user>:<salt>$<hash> |
The safe way to set credentials: a username plus an HMAC-SHA-256 hashed password, so the plaintext password never sits in the config. Generate it with the rpcauth.py script shipped in Bitcoin Core. Can be repeated for multiple users. |
rpcuser / rpcpassword |
Username and (plaintext) password for JSON-RPC. Simpler than rpcauth but stores the password in the file — prefer rpcauth. |
rpcallowip=<ip> |
Allow JSON-RPC connections from a source: a single IP, a network/netmask, or CIDR (e.g. 192.168.1.0/24). Without it, only localhost may connect. |
rpcbind=<addr> |
Bind the RPC server to a given address. Do not expose it to untrusted networks such as the public internet. Pair it carefully with rpcallowip. |
Wallet
| Option | What it does |
|---|---|
disablewallet=1 |
Runs the node with the wallet subsystem turned off (and the wallet RPCs disabled). Common on a node used purely for validation, block templates, or as a backend for an external wallet — one less attack surface. |
Three starting points
Rather than copy someone else’s file wholesale, decide what your node is for:
- Sovereign validation on a small disk —
prune=a size that fits,blocksonly=1,listen=1, and a modestdbcache. You fully validate the chain without storing all 600+ GB. - Solo-mining backend —
server=1,rpcauth=for the miner,txindexoff (unless you need historical lookups), and keep the wallet on if the node holds the payout address. This is the node your getblocktemplate loop talks to. - Private, Tor-only node —
onlynet=onion,proxy=127.0.0.1:9050,dnsseed=0, and no publicrpcbind. Maximum network privacy.
The through-line is the same one behind every part of the sovereign stack: a node you configure yourself, validating rules you chose, is the difference between using Bitcoin and trusting someone else’s Bitcoin. For the software that reads this file, see our node implementations reference; for how the node fits the wider mining picture, the Bitcoin Mining Field Manual. Exact defaults and the full option set always live in bitcoind -help for your version.

