Documentation Index
Fetch the complete documentation index at: https://docs.kynesys.xyz/llms.txt
Use this file to discover all available pages before exploring further.
Run the project (Windows)
The supported Windows path is WSL 2 with Docker Compose. Docker Desktop’s WSL 2 backend integrates thedocker and docker compose CLIs into your Ubuntu shell, and the node treats your WSL distro as a normal Linux host.
Prerequisites
- Windows 10 (with the WSL2 update package) or Windows 11
- WSL 2 with an Ubuntu distro — see the WSL 2 setup guide
- Docker Desktop with the WSL 2 based engine enabled and WSL Integration turned on for your Ubuntu distro
git(already present in Ubuntu)
Use
docker compose (with a space). The legacy hyphenated docker-compose is the deprecated Python script and is not supported.Track 1: Docker Compose (recommended)
Step 1 — Enable Docker Desktop WSL 2 integration
- Open Docker Desktop → Settings.
- Under General, enable Use the WSL 2 based engine.
- Under Resources → WSL Integration, enable integration and toggle on your Ubuntu distro.
- Click Apply & Restart.
Step 2 — Three-step quickstart inside WSL 2
Open the Ubuntu shell and run:- Node RPC:
http://localhost:53550— trycurl http://localhost:53550/infofrom the WSL shell - Grafana:
http://localhost:3000(defaultadmin/demos) - Prometheus:
http://localhost:9091
Step 3 — Tour of .env
.env.example is the canonical template. The defaults work for local development. The variables you are most likely to touch:
| Variable | Default | Notes |
|---|---|---|
CONSENSUS_TIME | 10 | Block production interval (seconds). |
RPC_FEE | 1 | Per-tx fee component. Total flat fee = RPC_FEE + NETWORK_FEE + BURN_FEE (default 1+1+1=3). |
NETWORK_FEE | 1 | Per-tx fee component. |
BURN_FEE | 1 | Per-tx fee component. |
RPC_PORT | 53550 | Host-mapped RPC port. Change if 53550 is taken. |
EXPOSED_URL | http://localhost:53550 | Public URL advertised to peers. Loopback default is fine for local dev — set it to your reachable address before joining a real network. |
OMNI_ENABLED / OMNI_PORT | true / 53551 | OmniProtocol binary RPC. Modes via OMNI_MODE: HTTP_ONLY, OMNI_PREFERRED, OMNI_ONLY. |
TLSNOTARY_ENABLED | true | Set to false to skip TLSNotary entirely. |
TLSNOTARY_SIGNING_KEY | (empty) | Leave empty in default docker mode — the sidecar manages its own key. Only set when TLSNOTARY_MODE=ffi. |
GRAFANA_ADMIN_PASSWORD | demos | Change this. |
COMPOSE_PROFILES | monitoring,tlsnotary | Which compose profiles to bring up. |
PG_HOST=postgres and TLSNOTARY_HOST=tlsnotary exactly as shipped — those are the in-network service names used by docker compose.
Common operations (run from the WSL shell)
demos_ (e.g. demos_node_state holds .demos_identity). Docker Desktop manages the volumes — they survive docker compose down but not docker compose down -v.
Going public
If you want peers to reach a node hosted on a Windows machine, you’ll need to forward the relevant inbound TCP ports through both the Windows Defender Firewall and your router (and setEXPOSED_URL to your public address) before advertising the URL:
53550— Node RPC53551— OmniProtocol7047— TLSNotary (only if enabled)
Troubleshooting
If you hit an issue, see the dedicated Issue Troubleshooting page.Track 2: Bare metal with ./run (advanced)
Track 2 runs the node binary natively via Bun inside WSL 2 and uses Docker only for a Postgres sidecar managed by the ./run script. Pick this path only for core development, kernel-level debugging, or TUI-driven operation. Do not run Track 2 from Windows directly — always use the Ubuntu shell inside WSL 2.
The full walkthrough — Bun via Mise (or the direct installer), Rust for wstcp, ./scripts/install-deps.sh, ./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