Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

11 Commits

Repository files navigation

Simple Node Dashboard

A lightweight, self-hosted dashboard that displays information from your Bitcoin, Litecoin, Monero, or other Bitcoin Core-compatible node.

Simple Node Dashboard

Demos

Live instances on Monero, Litecoin, and Bitcoin test networks:

Features

  • Clean display of essential node and network statistics
  • Built-in support for Bitcoin, Litecoin, and Monero, plus any Bitcoin Core-compatible coin via custom network configs
  • Filesystem-based caching to reduce RPC I/O
  • Minimal and easy setup
  • Fully responsive for desktop and mobile devices
  • Light and dark mode with several built-in themes (Dark, Light, Nord, Solarized, Dracula), remembered across visits
  • Configurable default theme, with the option to lock it and hide the switcher for fixed/branded deployments
  • Tooltip explanations for every stat (hover over a stat label)
  • JSON API (?format=json) for Home Assistant, Grafana, scripts, and other tools

Installation

  1. Place index.php in a PHP-enabled web directory.
  2. Ensure the web server has read/write access to the directory for the cache files.
  3. Configure your nodes with the correct RPC credentials and IP allowlist.
  4. Update the configuration section at the top of index.php to match your node's configuration.
  5. Navigate to index.php in a web browser of your choice.

Docker

The dashboard can also be run as a container. Configuration is provided through environment variables, so no code changes are needed.

Prebuilt multi-arch images (linux/amd64 and linux/arm64) are published on Docker Hub and the GitHub Container Registry:

docker pull techtoshi/simple-node-dashboard
# or
docker pull ghcr.io/tech1k/simple-node-dashboard
docker run -d \
--name=simple-node-dashboard \
--restart=unless-stopped \
-p 80:80 \
-e NETWORK=XMR \
-e NODE_IP=127.0.0.1 \
-e RPC_PORT=18081 \
techtoshi/simple-node-dashboard

To build the image yourself instead:

docker build -t simple-node-dashboard .

Supported environment variables (all optional; the defaults match the configuration at the top of index.php):

VariableDefaultDescription
NETWORKCHANGE_MENetwork to display: BTC, LTC, XMR, a testnet (tBTC, tLTC, tXMR, sXMR), or a custom ticker (see Custom Networks)
NODE_IPCHANGE_MENode IP address (usually 127.0.0.1)
RPC_PORTCHANGE_MERPC port. Mainnet/testnet: BTC 8332/18332, LTC 9332/19332, XMR 18081/28081 (stagenet 38081)
RPC_USERCHANGE_MERPC username (not usually needed for XMR)
RPC_PASSCHANGE_MERPC password (not usually needed for XMR)
SHOW_NODE_INFOtrueShow the Node Info section
SHOW_BLOCKCHAINtrueShow the Blockchain section
SHOW_MEMPOOLtrueShow the Mempool section
SHOW_MININGtrueShow the Mining section
SHOW_TRANSACTIONStrueShow the Transactions section
SHOW_FEEStrueShow the Transaction Feerates section
THEMEdarkDefault theme: dark, light, nord, solarized, or dracula
SHOW_THEME_SWITCHERtrueSet false to lock the theme and hide the switcher
REFRESH_SECONDS60Auto-refresh interval in seconds (0 disables auto-refresh)
ENABLE_JSONtrueSet false to disable the ?format=json API
SHOW_CONNECTfalseShow a "Connect to this Node" box (for advertising a public node)
CONNECT_ADDRESS(empty)Public node address shown in that box, e.g. node.example.com:18089
CONNECT_NOTE(empty)Optional note in that box (e.g. a Tor address or usage notes)

Custom Networks

Beyond the built-in BTC, LTC, and XMR, the dashboard works with any Bitcoin Core-compatible coin (Bitcoin Cash, Dash, Digibyte, etc.) that speaks the standard Bitcoin JSON-RPC. There are two ways to add one.

1. Add an entry to the $networks array near the top of index.php:

'BCH' => ['name' => 'Bitcoin Cash', 'family' => 'bitcoin', 'unit' => 'BCH', 'halving_interval' => 210000, 'initial_subsidy' => 50, 'fee_unit' => 'sat/vB', 'decimals' => 8],

Then set network (or the NETWORK env var) to BCH.

2. Define one via environment variables (handy for Docker). Set NETWORK to the ticker, plus any of the CUSTOM_* overrides below:

docker run -d -p 80:80 \
-e NETWORK=BCH \
-e NODE_IP=127.0.0.1 \
-e RPC_PORT=8332 \
-e CUSTOM_NAME="Bitcoin Cash" \
-e CUSTOM_UNIT=BCH \
-e CUSTOM_HALVING_INTERVAL=210000 \
-e CUSTOM_INITIAL_SUBSIDY=50 \
-e CUSTOM_FEE_UNIT=sat/vB \
-e CUSTOM_DECIMALS=8 \
techtoshi/simple-node-dashboard
VariableDefaultDescription
CUSTOM_NAMEthe tickerDisplay name (e.g. "Bitcoin Cash")
CUSTOM_UNITthe tickerCurrency unit shown alongside amounts
CUSTOM_HALVING_INTERVAL210000Blocks between reward halvings
CUSTOM_INITIAL_SUBSIDY50Initial block reward
CUSTOM_FEE_UNITsat/vBLabel for the fee-rate column
CUSTOM_DECIMALS8Decimal places shown for the mempool total-fee amount

The supply, block-reward, and next-halving stats assume a Bitcoin-style halving schedule. Coins with a different emission model will show those particular figures inaccurately; block height, sync status, mempool, fees, and hashrate are unaffected.

Test networks are built in: tBTC, tLTC, tXMR, and sXMR (Monero stagenet). Set NETWORK to one of these and point RPC_PORT at the corresponding test daemon (ports above).

Monero is handled as a special case and cannot be used as a template for custom coins.

JSON API & Home Assistant

Append ?format=json to the dashboard URL for a machine-readable snapshot of the current stats, e.g. http://your-host/index.php?format=json. Values are raw and unformatted, which makes them easy to consume from Home Assistant, Grafana, scripts, or anything else. It exposes the same public node data already shown on the dashboard, nothing more.

Example Home Assistant REST sensor (configuration.yaml):

sensor:
- platform: restname: Bitcoin Noderesource: http://192.168.1.10/index.php?format=jsonscan_interval: 60value_template: "{{ value_json.block_height }}"json_attributes:
- connections
- difficulty
- network_hashps
- mempool_txns
- mempool_bytes
- verification_progress

The response always includes network, coin, unit, family, and updated (Unix time). The remaining fields depend on the coin family (e.g. block_height, connections, difficulty, network_hashps, mempool_txns, mempool_bytes, mempool_total_fee, total_transactions, and fee estimates). Disabled sections or failed RPC calls report null.

Monetary amounts (mempool_total_fee, Monero supply) are in whole coins; fee rates are in native units (sat/vB for Bitcoin, piconero/kB for Monero). Very large estimates such as network_hashps may be rendered in scientific notation, which is still valid JSON.

The endpoint serves only the same public data already shown on the dashboard. To turn it off entirely (for example on a public host), set ENABLE_JSON=false; ?format=json then just returns the normal dashboard page.

Security Notes

  • Make sure to protect the dashboard if you’re displaying sensitive node info.
  • Use firewall rules or other methods to restrict access, especially for public deployments.

License

This project is released under the MIT License. See the LICENSE file for more details.

About

A lightweight, self-hosted dashboard that displays information from your Bitcoin, Litecoin, Monero, or other Bitcoin Core-compatible node.

Topics

Resources

Stars

9 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages