finds.dev

OpenCyphal/libcanard

A compact implementation of the Cyphal/CAN protocol in C for high-integrity real-time embedded systems

View on GitHubHomepage ↗

★ 451CMITupdated Oct 2026

// the take

libcanard is a compact C implementation of the Cyphal/CAN transport layer (plus legacy UAVCAN v0/DroneCAN support), aimed at firmware engineers building real-time CAN bus nodes for aerospace, robotics, or vehicle systems where MISRA compliance and tiny memory footprints matter. It handles transfer framing/reassembly and CAN acceptance filtering, not application-level message definitions.

Supports Classic CAN and CAN FD across redundant and non-redundant interfaces, with automatic CAN hardware acceptance filter generation derived from the current subscription set. The v5 rewrite swapped O(n) linked lists for AVL trees and introduced per-transfer TX queues with frame dedup across redundant interfaces, roughly halving heap usage. The platform interface is deliberately minimal (alloc/free, tx, now callbacks), so porting to a new MCU is small, and it runs on 32KB ROM/RAM targets. The RX pipeline keeps concurrent reassemblers per priority level, fixing a real bug class where a higher-priority multi-frame transfer arriving mid-transfer used to cause transfer loss.

Major versions (v2 through v5) have repeatedly changed core memory-management and TX APIs, so upgrading across more than one major version means working through several migration guides, not a drop-in bump. The library does no DSDL (de)serialization itself — it depends on an external generator (Nunavut) for actual message encoding, so this is only half of what you need to talk Cyphal. v5 is explicitly designed around being used with a separate node framework (Cy) rather than standalone, which makes the plain quick-start path a second-class use case. The user base is a narrow aerospace/robotics/CAN-bus niche, so edge-case bugs in the reassembly state machine (several of which show up in the changelog) take time to surface and land fixes for.

We read the README, the directory tree and a key source file in October 2026. Nobody pays to be listed. How we judge →

// at a glance

Stars
451
Forks
220
Language
C
License
MIT
Last commit
21 Oct 2026

// nearby

If libcanard isn't quite it.

All repos →