Skip to content

Tech1k/simple-node-dashboard

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 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.

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):

Variable Default Description
NETWORK CHANGE_ME Network to display: BTC, LTC, XMR, a testnet (tBTC, tLTC, tXMR, sXMR), or a custom ticker (see Custom Networks)
NODE_IP CHANGE_ME Node IP address (usually 127.0.0.1)
RPC_PORT CHANGE_ME RPC port. Mainnet/testnet: BTC 8332/18332, LTC 9332/19332, XMR 18081/28081 (stagenet 38081)
RPC_USER CHANGE_ME RPC username (not usually needed for XMR)
RPC_PASS CHANGE_ME RPC password (not usually needed for XMR)
SHOW_NODE_INFO true Show the Node Info section
SHOW_BLOCKCHAIN true Show the Blockchain section
SHOW_MEMPOOL true Show the Mempool section
SHOW_MINING true Show the Mining section
SHOW_TRANSACTIONS true Show the Transactions section
SHOW_FEES true Show the Transaction Feerates section
THEME dark Default theme: dark, light, nord, solarized, or dracula
SHOW_THEME_SWITCHER true Set false to lock the theme and hide the switcher
REFRESH_SECONDS 60 Auto-refresh interval in seconds (0 disables auto-refresh)
ENABLE_JSON true Set false to disable the ?format=json API
SHOW_CONNECT false Show 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
Variable Default Description
CUSTOM_NAME the ticker Display name (e.g. "Bitcoin Cash")
CUSTOM_UNIT the ticker Currency unit shown alongside amounts
CUSTOM_HALVING_INTERVAL 210000 Blocks between reward halvings
CUSTOM_INITIAL_SUBSIDY 50 Initial block reward
CUSTOM_FEE_UNIT sat/vB Label for the fee-rate column
CUSTOM_DECIMALS 8 Decimal 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: rest
    name: Bitcoin Node
    resource: http://192.168.1.10/index.php?format=json
    scan_interval: 60
    value_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

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors