A live Bitcoin explorer built in Elixir, with River Financial's Bitcoinex under the hood.
Browse blocks, transactions, and addresses against live chain data. Paste any Bitcoin primitive — address, txid, BOLT11 invoice, PSBT — and get structured cryptographic decode output powered by Bitcoinex. Deep-linked URLs make every result shareable.
Chain explorer
- Home — Live block list, mempool stats, fee estimates (sat/vB targets); universal search for txid, block hash, height, address, invoice, or PSBT.
- Block — Header fields, paginated transactions, script-type distribution chart (outputs classified with Bitcoinex).
- Transaction — Fees, confirmations, weight/size, D3 flow view, inputs/outputs enriched with address type, network, witness program, and payload details.
- Address — Balance and history from the indexer; QR code; Bitcoinex decode summary at the top.
- Height shortcut —
/btcexp/block/height/<n>redirects to the canonical block hash URL.
Chain data is sourced from an Esplora-compatible REST API by default — configurable via ESPLORA_BASE_URL. For full sovereignty, the app supports a self-hosted mode: set DATA_SOURCE=rpc to connect directly to a Bitcoin Core full node via JSON-RPC and Fulcrum for address indexing, with no dependency on any external service. Full node setup instructions are in the README.
Local decode (no chain lookup)
Bitcoin addresses
SegWit (bc1…, tb1…, bcrt1…) and legacy Base58 — network, script type, witness program or payload hex.
Lightning invoices
BOLT11 strings — amount, destination pubkey, description, expiry, timestamp, payment hash.
PSBT
Base64 PSBT — input/output counts, BIP32 derivation hints where present, output amounts; unsigned PSBTs do not expose a real txid until finalized.
How it works (architecture)
One Phoenix LiveView module (ExplorerLive) drives the UI: handle_params loads chain views from the URL;
search uses push_patch so links stay shareable. Static decode still uses a debounced phx-change form — decoding runs in-process via
Bitcoinex (Segwit, Base58, LightningNetwork.Invoice, PSBT), not a separate JSON microservice.
Chain requests are routed through a pluggable data source layer — either an Esplora-compatible REST client (Tesla + Hackney) or a Bitcoin Core JSON-RPC + Fulcrum backend, selected at deploy time via the DATA_SOURCE env var. The HTTP server is Bandit; assets are Tailwind + esbuild, with
D3 and QRCode wired as LiveView hooks for charts, transaction flow, and address QR. Production serves under /btcexp/ behind nginx with LiveView WebSockets on the same path prefix.