Connect Device — attach a gs_usb / candleLight / CANable adapter and pick a bitrate.
Start Simulator — run an in-browser virtual cluster. No hardware needed.
2. Watch traffic
Log View — every frame, in arrival order. Click a row to copy its data hex.
Sniff View — one row per CAN ID, with cycle time and bytes that flash amber when they change. Best for finding the ID that drives a behavior.
Use the RX / TX / UDS chips and the ID filter to narrow down.
3. Send frames
The Send bar at the bottom: type a hex ID and data bytes, hit Send for one frame or Repeat to send periodically.
Signals sidebar card: toggleable pre-configured periodic senders. Pencil to edit, × to remove.
4. Brute force / fuzz
Fuzzer sidebar card: cangen-style. Pick random, increment, or fixed for ID, DLC, and Data; set a gap and (optionally) a count, then Start Fuzz. Stops when the count is reached or you click again.
5. UDS / diagnostics
UDS sidebar card: TX/RX IDs (default 7E0/7E8) and hex request bytes. Built-in ISO-TP transport, NRC name decoding, and a Tester Present auto-repeat checkbox to keep extended sessions alive.
6. Drive the simulator
The Cluster overlay floats over the log/sniffer. Drag its title bar to reposition.
On-screen Accel / Brake / Left signal / etc. buttons emit real CAN frames into the loopback bus — the cluster reacts the same way it would to any other producer (Send, Repeat, Fuzzer).
Bogus traffic checkbox sprays random IDs to make the puzzle harder. Turn it off for a clean demo.
7. Script from the console
Open DevTools (F12) and drive everything via window.api:
api.send({id: 0x244, data: [0,0,0,0x19,0,0,0,0]}) — send one frame.
const off = api.onAnyFrame(f => console.log(f.id.toString(16), f.data)); off() — tap RX traffic.
api.simulator.start(); api.simulator.accel(true) — drive the cluster without buttons.