beacon


beacon turns NMEA 2000 traffic into dependable application streams.

Read frames from a SocketCAN or USB-CAN interface, decode them with n2k, durably buffer in SQLite, and fan them out to TCP and HTTP/SSE consumers.

github.com/open-ships/beacon

Features

  • Live NMEA 2000 decoding: Converts CAN frames into structured JSON messages
  • TCP and browser streams: NDJSON over TCP for services, Server-Sent Events for dashboards
  • SQLite replay buffer: Keeps recent messages available for reconnecting clients
  • Per-client recovery: SSE clients can resume with Last-Event-ID
  • CEL filtering: Filter each sink by PGN, source, priority, or decoded payload fields
  • Prometheus metrics: Track frame counts, buffer usage, client activity, and filter errors
  • Small Linux footprint: Pure Go, zero CGO, and built for Raspberry Pi or other Linux hosts
  • Single static binary: Minimal runtime dependencies and simple deployment

Use Cases

  • Feed live vessel data into browser dashboards
  • Bridge NMEA 2000 traffic into backend services
  • Bridge CAN networks using TCP
  • Run a lightweight boat data gateway on ruggedized Linux
  • Replay missed data after network interruptions
  • Filter noisy CAN traffic to minimize network bandwidth