Deployment of Bitcoin Ord Indexer
Ordinals protocol interprets each satoshi as a numbered object (ordinal number) and allows attaching data to it (inscription) through OP_RETURN or transaction witness data. To work with Ordinals — track NFT collections, BRC-20 tokens, Runes — you need your own indexer: ord node, which synchronizes bitcoin blocks and builds local database of satoshi numbering state and inscriptions.
What is ord and What it Does
ord — reference implementation by Casey Rodarmor. It does three things:
- Indexes ordinals — tracks which transactions each numbered satoshi passed through, using FIFO rules for inputs/outputs
- Indexes inscriptions — scans transaction witness data for envelope pattern (OP_FALSE OP_IF ... OP_ENDIF) and decodes embedded content
- Provides HTTP API — for queries by inscription ID, satoshi, transactions, blocks
BRC-20 and Runes are layers on top of Ordinals, ord supports them starting from certain versions (Runes — since ord 0.18+).
Infrastructure Requirements
Bitcoin Core node — mandatory. ord doesn't connect to public RPC — it requires local node with txindex=1. Requirements:
- Disk: ~700GB for full node + ~100-200GB for ord index (grows over time). NVMe SSD is recommended — HDD makes initial sync unacceptably long
- RAM: 16GB minimum, 32GB comfortable
- CPU: 4+ cores
- Network: stable channel, initial sync — several days
bitcoin.conf for working with ord:
txindex=1
server=1
rpcuser=bitcoin
rpcpassword=your_secure_password
rpcallowip=127.0.0.1
zmqpubrawblock=tcp://127.0.0.1:28332
zmqpubrawtx=tcp://127.0.0.1:28333
Installation and Synchronization
# Install ord (current version from GitHub releases)
curl -L https://github.com/ordinals/ord/releases/latest/download/ord-x86_64-unknown-linux-gnu.tar.gz | tar xz
sudo mv ord /usr/local/bin/
# Check
ord --version
# Run indexing (specify bitcoin node RPC)
ord \
--bitcoin-rpc-url http://127.0.0.1:8332 \
--bitcoin-rpc-username bitcoin \
--bitcoin-rpc-password your_secure_password \
--data-dir /data/ord \
index run
Initial indexing takes 1-7 days depending on hardware (main load is reading all bitcoin blocks from genesis). After synchronization ord monitors new blocks via Bitcoin Core.
Run HTTP server:
ord \
--bitcoin-rpc-url http://127.0.0.1:8332 \
--bitcoin-rpc-username bitcoin \
--bitcoin-rpc-password your_secure_password \
--data-dir /data/ord \
server \
--http \
--address 0.0.0.0:80
API is available at:
-
/inscription/{id}— inscription data -
/sat/{ordinal}— satoshi history -
/output/{txid}:{vout}— UTXO with ordinals -
/inscriptions— recent inscriptions
Docker Deployment
# docker-compose.yml
services:
bitcoind:
image: lncm/bitcoind:v26.0
volumes:
- bitcoin_data:/data/.bitcoin
command: >
-txindex=1
-server=1
-rpcuser=bitcoin
-rpcpassword=secret
-rpcallowip=0.0.0.0/0
-rpcbind=0.0.0.0
ord:
image: ghcr.io/ordinals/ord:latest
depends_on:
- bitcoind
volumes:
- ord_data:/data
command: >
--bitcoin-rpc-url http://bitcoind:8332
--bitcoin-rpc-username bitcoin
--bitcoin-rpc-password secret
--data-dir /data
server --http --address 0.0.0.0:80
ports:
- "8080:80"
volumes:
bitcoin_data:
ord_data:
Working with BRC-20 and Runes
BRC-20 — token standard on top of Ordinals (JSON inscriptions with deploy/mint/transfer operations). ord with BRC-20 support parses these JSONs and builds state of balances. For serious work with BRC-20 worth considering OPI (Open Protocol Indexer) — separate indexer with richer API for BRC-20.
Runes — more efficient fungible token protocol by Rodarmor (launched at halving block 840000, April 2024). Encoded in OP_RETURN, less blockchain spam. ord 0.18+ fully supports Runes.
Query Rune balances via API:
# All rune balances in UTXO
curl http://localhost:8080/output/txid:vout | jq '.runes'
# Information about specific Rune
curl http://localhost:8080/rune/UNCOMMON•GOODS
Monitoring and Operations
Key metric — indexer lag from bitcoin chain tip. During normal operation lag should be 0-1 block. Alert when lag > 3 blocks — something went wrong.
ord logs are written to stderr. For production: systemd unit + journald, or Docker with log driver → Loki/ELK.
Disk space needs monitoring: ord index stats shows current index size. Ordinals index grows ~5-10GB per month with active use.







