Lightweight open vehicle bus standard for aerospace and robotic applications.

Zubax Robotics is the main developer and maintainer of UAVCAN – an open data bus standard designed for aerospace and robotic applications.

UAVCAN is an integral part of the Dronecode core infrastructure (the Dronecode project is maintained by The Linux Foundation) and is used by numerous vendors and companies all over the world.

Learn more at, and consider subscribing to the mailing list.


  • Democratic network – no bus master, no single point of failure.
  • Publish/subscribe and request/response (RPC) data exchange semantics.
  • Efficient exchange of large data structures with automatic decomposition and reassembly.
  • Lightweight, deterministic, easy to implement, and easy to validate.
  • Suitable for deeply embedded, resource constrained, hard real-time systems.
  • Supports dual and triply modular redundant transports.
  • Supports high-precision network-wide time synchronization.
  • The specification and high quality reference implementations in popular programming languages are free, open source, and available for commercial use (MIT license).

Software libraries

  • Libuavcan - full-featured, highly robust implementation in C++ for embedded systems and Linux.
  • Libcanard - lightweight implementation in C for deeply embedded systems.
  • Pyuavcan - general-purpose, easy to use Python implementation.
  • - highly robust multipurpose implementation in the Rust programming language.

Application domains

  • Manned and unmanned aircraft.
  • Spacecraft.
  • Robots.

Related announcements and discussions

Data logging overloading UAVCAN BUS

Hello, Is it possible for the ESC to generate less data packets? We are seeing the issue were we have too many data packets on the bus and are overloading the UAVCAN logger and whilst trying to parse these packets it is taking exponentially longer to process each data packet compared to the real tim…

Github Is Having Trouble!

Just an FYI: Github is having serious back-end problems. You’ll see inconsistencies if you try to use it. I’d avoid committing or commenting till this clears up:…

SI namespace design

As the SI namespace is expected to be the key part of the new standard data type set, we should approach its design especially carefully. I would like everyone who has any relevant ideas, especially @scottdixon and @kjetilkjeka, to propose their own vision of the namespace either directly …

CAN-based transports: Subject ID encoding for anonymous transfers

@kjetilkjeka is proposing to change the CAN ID format of anonymous transfers by adding a new flag located at bit 23, called invert, that would convey whether the ID should be inverted. For example: Sub-subject ID = 5, invert = 0, resulting subject ID = 5. Sub-subject ID = 5, invert = 1, resulting s…

Data type compatibility assurance

While working on the updated specification I encountered the challenge of updating the principles of data type compatibility. An update is needed because we must take into account the new concept of Port ID and the new CAN ID layout, which lacks space for the major data type version number. With t…

On Subject/Service ID ranges

The standard data type set PR that I submitted several days ago might look like a chunk of data that is too big to swallow in one PR. The motivation for pooling all of the items of the new data type set together was to encourage holistic approaches and reduce possible internal inconsistencies. What …

The case for code compatibility

This is an attempt on summing up the arguments for code compatibility. If it’s not very evenly balanced, it might be due to my convictions of code compatibility being the better alternative. Definition of code compatibility We say that A is code compatible with B if valid use of code generated from …

New DSDL directive for simple compile-time checks

While working on the new standard data type set for v1.0 I noticed that getting byte alignment right requires a bit of attention and it is easy to mess things up by miscalculating the bit length of array length prefixes and union tags. It would help a lot if one could drop a directive right in the d…

Configure UAVCAN for PX4 Fligth Stack

Hello! I want to use UAVCAN protocol for ESC. And I want to configure PX4 Flight Stack 1.8.0 by means of parameters in QGC according with Zubax manual I used last daily build QGC, updated of firmware to PX4 Flight Stack 1.8.0 (Stab…

A generic term for either Subject or Service

We have Subject ID, which defines the kind of information exchanged using messages, and we have Service ID, which defines the kind of information exchanged using RPC. We need a new term that can refer either or both to Subjects and Services. Initially, I thought that Endpoint would be the way to go,…