A live consensus dashboard for CometBFT chains, in your terminal or browser. Watch validators, voting power, block times, and RPC health. When a block stalls, compare prevote and precommit hashes across rounds to find which validators disagree.
Defaults connect to Injective. You can point it at your own chain or sentry.
Build with Go 1.25.9+, Node.js 20, and pnpm 10.8.1:
git clone https://github.com/InjectiveLabs/cmt-top.git
cd cmt-top
make build
./bin/cmt-top # terminal dashboard
./bin/cmt-top --mode web # http://127.0.0.1:8080Use a different RPC:
./bin/cmt-top --rpc http://your-node:26657 --mode webCompose uses public.ecr.aws/l9h3g6c6/cmt-top:latest after the first stable
release. Until then, build the image locally.
cp .env.example .env
docker compose up -dOpen localhost:8080. Add --profile metrics to also run
Prometheus and Grafana. See the Docker guide for local
builds and configuration.
Click Investigate block in the dashboard. Pin the height, follow its rounds, and compare hash groups and individual validators against an earlier round. Pause to inspect the evidence, then export JSON before restarting the monitor.
The screenshot walkthrough includes a runnable demo. The investigation reference explains coverage, retention, and how to interpret the votes. Hash splits help identify operators to check; they do not tell you which binary a validator runs.
Settings apply in this order: defaults → TOML → CMTOP_* environment variables
→ CLI flags. Start with config.example.toml or
.env.example. Set CMTOP_WEB_TOKEN before exposing the dashboard.
See configuration, recipes, and API endpoints.
make test-race
cd web && pnpm install --frozen-lockfile && pnpm check && pnpm testCI runs on Blacksmith. Version tags trigger release builds and Docker publishing
to public ECR; stable releases also update latest. See CI setup.