CAN bus monitor
classic + FDLive frame stream with hex filter, pause, and a frame injector. Classic CAN and CAN-FD with BRS — extended IDs, RTR, the lot.
Most web terminals stop at SSH. webtm also speaks serial/UART, CAN / CAN-FD, UDS and XCP — live hardware and vehicle diagnostics, with AI-assisted debugging on top. All of it self-hosted, on a single static binary you run yourself.
$ curl -fsSL https://webtm.dev/install.sh | sh
Free for personal use · Works on iPad · No account to try
Full xterm.js emulation over WebSocket. tmux keeps every session alive across disconnects — close the tab, come back, nothing lost.
Open /dev/ttyUSB*, ttyACM*, tty.* from the browser.
Hot-plug detection finds new adapters with no restart — even from an iPad.
CAN / CAN-FD monitor, UDS vehicle diagnostics over DoIP & ISO-TP, and XCP measurement with live DAQ — all on one unified transport.
Feed a serial log to your own model (BYOK): get root-cause analysis, a code fix, a build, and a shareable report — without leaving the screen.
Serial, CAN, automotive UDS, and XCP calibration — multiplexed over a single
/ws/x WebSocket. Pick a device with a URI; the panel renders the protocol.
Live frame stream with hex filter, pause, and a frame injector. Classic CAN and CAN-FD with BRS — extended IDs, RTR, the lot.
Service builder over DoIP/TCP and ISO-TP/CAN (CAN-FD too). Flow-control pacing, read-only gating, and DoIP UDP Discover for announced ECUs.
XCP on Ethernet (TCP/UDP) and CAN. Command builder plus a live DAQ view — periodic measurement streamed straight into the browser.
Open serial://…?framing=cobs for COBS+CRC channel-multiplexed links —
split one UART into clean logical channels in the 🧩 Embed panel.
Every device is just a URI on /ws/x.
# serial byte stream / COBS-framed serial:///dev/ttyUSB0?baud=115200 serial:///dev/ttyUSB0?framing=cobs # CAN / CAN-FD can://can0?fd=1 # UDS over DoIP (TCP) / over ISO-TP (CAN-FD) uds://doip/192.168.0.10:13400 uds://can0/0x7E0?rx=0x7E8&fd=1 # XCP on Ethernet / on CAN xcp://eth/192.168.0.10:5555 xcp://can0/0x100?rx=0x101&fd=1 # remote device via agent (Ultra) agent://rpi-001/serial/ttyUSB0?baud=115200
One web screen for the whole job — connect, persist, broadcast, debug.
A 256 KB ring buffer per session plus smart reconnect replays every byte you missed. Flaky Wi-Fi stops being a problem.
Send one command to many boards at once — parallel, sequential, or rolling — and watch each device's output side by side.
A virtual key bar (Esc, Tab, Ctrl, arrows) and a ⌘K command palette make a
real terminal usable on a phone or tablet.
An agent exposes a remote board's serial or CAN as agent:// — self-registers
with a join token, then debug hardware on the other side of the world.
Hand someone a read-only URL to your live session — no install, no account, no setup on their end.
One 10 MB static binary, CGO_ENABLED=0, web assets embedded. PWA install,
offline-capable, expose via Cloudflare Tunnel in one flag.
Bring your own model — Claude, OpenAI, or a local Ollama. The whole loop happens in the tab.
A HardFault or stack trace lands on the serial console.
The model reads the log and pins the root cause.
It proposes a patch; you approve; it builds.
A shareable web report captures what changed and why.
SSH clients stop at SSH. Serial tools stop at serial. CAN and diag suites are each their own app. webtm is the entire bench.
| Teleport tmate | minicom | SavvyCAN | CANape | webtm | |
|---|---|---|---|---|---|
| SSH terminal | ✓ | — | — | — | ✓ |
| Serial / UART | — | ✓ | — | — | ✓ |
| CAN / CAN-FD monitor | — | — | ✓ | ✓ | ✓ |
| UDS diagnostics (DoIP/ISO-TP) | — | — | — | ✓ | ✓ |
| XCP measurement / DAQ | — | — | — | ✓ | ✓ |
| 1:N broadcast · AI debug | — | — | — | — | ✓ |
| In a browser · runs on iPad | — | — | — | — | ✓ |
| Self-hosted, one binary | — | ✓ | ✓ | — | ✓ |
Each rival is a single point on the bench. webtm is the only one that does all of it — from a browser, self-hosted.
webtm installs as a PWA and goes full-screen on touch. A virtual key bar puts Esc, Tab, Ctrl, and arrows under your thumb, and a swipe drawer holds your sessions, ports, and diagnostics. The thing nobody else lets you do: open a serial console on hardware from a tablet.
webtm is self-hosted. ttyd and the serial manager bind to 127.0.0.1 only — the
gateway is the single door, where auth, license, and session limits live. Raw automotive egress
(DoIP/XCP) is opt-in and off by default; tcp:// has an SSRF guard. Licenses validate
offline with Ed25519 signatures: no call-home on startup, ever.
Run it yourself — free for personal and non-commercial use. Upgrade only when you need teams, scale, or the hardware-fleet features.
Personal & non-commercial
For working developers
For embedded teams & fleets
| Community | Pro | Ultra | |
|---|---|---|---|
| SSH terminal sessions | 2 | Unlimited | Unlimited |
| Local serial / UART ports | 1 | Unlimited | Unlimited |
| CAN · UDS · XCP diagnostics | ✓ | ✓ | ✓ |
| tmux persistence · PWA · ⌘K | ✓ | ✓ | ✓ |
| Read-only session sharing | — | ✓ | ✓ |
| Multi-user accounts | — | ✓ | ✓ |
| Per-device access control | — | ✓ | ✓ |
| Remote serial / CAN (Agent) | — | — | ✓ |
| 1:N broadcast | — | — | ✓ |
| AI debugging (BYOK) | — | — | ✓ |
| Conditional access policy | — | — | ✓ |
| Audit logs | — | — | ✓ |
Billed via Paddle · licenses are Ed25519-signed and validate offline.
curl -fsSL https://webtm.dev/install.sh | sh
One static binary lands in your PATH. No runtime, no dependencies.
webtm up
Starts on localhost:4100. Add --auth or --tunnel when
you're ready to expose it.
open http://localhost:4100
Terminal, serial, CAN, UDS, XCP, and the AI panel — in the browser, on any device.