Simulators
Browser UIs
The simulator draws its state in two browser UIs: the state UI every simulator serves, and Kalshi Accurate, a verified UI that looks like Kalshi’s own interface. Open the state UI at $RYSTIC_URL/_rystic/ui in a browser:
curl -s -o /dev/null -w '%{http_code}\n' "$RYSTIC_URL/_rystic/ui"
# -> 200
The state UI
The state UI shows the order book, per-bot P&L, order entry, captured-day replay, the Markets card that picks what the live feed carries and the activity bus. It is for watching a run, and it acts as member, so headerless callers and the UI share the default account.
Kalshi Accurate
Kalshi Accurate is a client built against Kalshi’s own interface and checked against it. Verified UIs are on Pro and Enterprise (plans ). The UI ships as an image beside the simulator’s, registry.rystic.ai/kalshi-twin-ui:<ver>, pulled with the same docker login as the simulator (your API key, or an Enterprise license file). The front door hands it out only to a plan or a license that carries verified_ui, and the UI itself serves only a simulator whose grant carries it.
rystic run kalshi-twin -d
rystic ui kalshi
rystic ui pulls the image and runs it against the running instance (-name picks another, -port another port). With no Docker on the machine, it downloads the UI’s archive and runs it on your Node 22.12 or later. Either way, the first run fetches the UI with your key or license, the way rystic pull fetches the simulator. A key whose plan lacks it is refused with feature_not_in_plan naming verified_ui. rystic ui prints the URL, http://127.0.0.1:18762.
Browse markets, open one and buy or sell from the ticket. The portfolio lists positions, resting orders with amend and cancel and fill history. Every request goes to the simulator as its ui-trader account, or the account RYSTIC_ACTOR names.
The installed archive carries a public market snapshot, and rystic run kalshi-twin -d --seed <install dir>/ui/seed/kalshi-snapshot.json boots it.
By hand, or in Compose beside the simulator (the UI reaches the simulator by its service name):
docker run --rm -p 127.0.0.1:18762:18762 -e RYSTIC_TWIN_URL=http://host.docker.internal:8080 registry.rystic.ai/kalshi-twin-ui:<ver>
docker run --rm --network host -e RYSTIC_UI_HOST=127.0.0.1 -e RYSTIC_TWIN_URL=http://127.0.0.1:8080 registry.rystic.ai/kalshi-twin-ui:<ver>
The first command is for Docker Desktop and the second for a Linux daemon.
services:
kalshi-twin:
image: registry.rystic.ai/kalshi-twin:<ver>
environment:
RYSTIC_TOKEN: ${RYSTIC_TOKEN}
ports: ["8080:8080"]
kalshi-ui:
image: registry.rystic.ai/kalshi-twin-ui:<ver>
environment:
RYSTIC_TWIN_URL: http://kalshi-twin:8080
ports: ["127.0.0.1:18762:18762"]
depends_on: [kalshi-twin]
Enterprise can run it offline, in either of two ways:
- With Docker, run
docker save registry.rystic.ai/kalshi-twin-ui:<ver> | gzip > kalshi-twin-ui.tar.gzon a machine that can pull, thendocker loadon the one that can’t. - Without Docker, run
rystic ui kalshi -fetch-onlywhererystic pullran. It installs the UI’s archive beside the simulator.
The UI talks only to the simulator, on loopback or its Compose network. What a verified UI is and which plans carry it is in the glossary.