Run the project (macOS)
This guide gets you to a running node on macOS. Track 1 (Docker Compose) is the recommended path; Track 2 (bare metal) is documented at the bottom for advanced setups.Track 1: Docker Compose (recommended)
Prerequisites
- Docker Desktop for Mac 4.x or newer (ships Docker 20.10+ and the
docker composev2 plugin) git
Use the
docker compose form (with a space). The legacy hyphenated docker-compose is the deprecated Python script and is not supported.Three-step quickstart
- Node RPC:
http://localhost:53550— trycurl http://localhost:53550/info - Grafana:
http://localhost:3000(defaultadmin/demos) - Prometheus:
http://localhost:9091
Tour of .env
.env.example is the canonical template. The defaults work for local development. The variables you are most likely to touch:
Leave
PG_HOST=postgres and TLSNOTARY_HOST=tlsnotary exactly as shipped — those are the in-network service names used by docker compose.
Compose profiles
COMPOSE_PROFILES in .env controls the optional services:
Common operations
demos_ (e.g. demos_node_state holds .demos_identity, demos_pgdata holds chain data, demos_grafana_data holds dashboards). They survive docker compose down but not docker compose down -v.
Going public
Before joining a real Demos network from a Mac that other peers should reach:- Set
EXPOSED_URLin.envto your reachable address — public IP or DNS — notlocalhost. - Open inbound TCP for
53550(RPC),53551(OmniProtocol), and7047(TLSNotary, if enabled) on your router/firewall before advertising the public URL. - Seed
demos_peerlist.jsonwith bootstrap peers from the team. Do not invent hostnames; use the values the team publishes.
Troubleshooting
Track 2: Bare metal with ./run (advanced)
Track 2 runs the node binary natively via Bun and uses Docker only for a Postgres sidecar managed by the ./run script. Pick this path for core development, kernel-level debugging, or TUI-driven operation.
The macOS-specific quirks (source $HOME/.zshrc instead of .bashrc, Docker Desktop instead of apt-installed Docker) are handled by the upstream install scripts. The full walkthrough — prerequisites, ./scripts/install-deps.sh, identity generation, peerlist setup, and ./run flags — lives in the source of truth:
For the bare-metal path, override these in your .env:
PG_HOST=localhostPG_PORT=5332TLSNOTARY_HOST=localhost