Skip to main content

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)
  • .deb packaging with systemd unit
  • Docker image (ghcr.io/sixfathoms/lplex)
  • CI with golangci-lint and CodeQL