v0.1.0
Released February 28, 2026. GitHub Release
First stable release of lplex.
Highlights
CAN Bus HTTP Bridge
Reads raw CAN frames from a SocketCAN interface, reassembles fast-packets, tracks device discovery, and streams frames to clients over Server-Sent Events (SSE).
Streaming Modes
- Ephemeral streaming (
GET /events): fire-and-forget SSE with optional query param filters - Buffered sessions (
PUT /clients/{id}+GET /clients/{id}/events): cursor-based replay on reconnect with configurable buffer timeout and ACK
Filtering
Per-client filtering by PGN, manufacturer, device instance, or CAN NAME. Filters resolved to source addresses at creation time for zero-overhead iteration.
Device Discovery
Automatic device discovery via ISO Request (PGN 60928 address claim, PGN 126996 product info). Unknown source addresses trigger discovery automatically.
CAN TX
POST /send endpoint with automatic fast-packet fragmentation for outbound frames.
mDNS
Zero-config service advertisement for client discovery on the local network.
Go Client Library
lplexc package for building Go integrations: Subscribe, Devices, Send, Session, and mDNS discovery.
Infrastructure
- Single-goroutine broker design, no locks in the hot path
- Pre-serialized JSON in ring buffer (serialize once, fan out to N clients)
.debpackaging with systemd unit- Docker image (
ghcr.io/sixfathoms/lplex) - CI with golangci-lint and CodeQL