MAVLink Developer Guide

Updated 4 hours ago

MAVLink Developer Guide

MAVLink is a very lightweight messaging protocol for communicating with drones (and between onboard drone components).

MAVLink follows a modern hybrid publish-subscribe and point-to-point design pattern: Data streams are sent / published as topics while configuration sub-protocols such as the mission protocol or parameter protocol are point-to-point with retransmission.

Messages are defined within XML files Each XML file defines the message set supported by a particular system, also referred to as a "dialect". The reference message set that is implemented by most ground control stations and autopilots is defined in common.xml (most dialects build on top of this definition).

The MAVLink toolchain uses the XML message definitions to generate MAVLink libraries for each of the supported programming languages. Drones, ground control stations, and other MAVLink systems use the generated libraries to communicate. These are typically MIT-licensed, and can therefore be used without limits in any closed-source application without publishing the source code of the closed-source application.

The C reference implementation is a header-only library that is highly optimized for resource-constrained systems with limited RAM and flash memory. It is field-proven and deployed in many products where it serves as interoperability interface between components of different manufacturers.

MAVLink was first released early 2009 by Lorenz Meier and has now a significant number of contributors.

Key Features

  • Very efficient. MAVLink 1 has just 8 bytes overhead per packet, including start sign and packet drop detection. MAVLink 2 has just 14 bytes of overhead (but is a much more secure and extensible protocol). Because MAVLink doesn't require any additional framing it is very well suited for applications with very limited communication bandwidth.
  • Very reliable. MAVLink has been used since 2009 to communicate between many different vehicles, ground stations (and other nodes) over varied and challenging communication channels (high latency/noise). It provides methods for detecting packet drops, corruption, and for packet authentication.
  • Supports many programming languages, running on numerous microcontrollers/operating systems (including ARM7, ATMega, dsPic, STM32 and Windows, Linux, MacOS, Android and iOS).
  • Allows up to 255 concurrent systems on the network (vehicles, ground stations, etc.)
  • Enables both offboard and onboard communications (e.g. between a GCS and drone, and between drone autopilot and MAVLink enabled drone camera).

Supported Languages

The MAVLink project includes the mavgen generator tool that can be used to create MAVLink APIs/libraries for a number of programming languages (these are supported by the project). Additional generators have been provided by other projects.

The MAVLink project has not validated and does not provide technical support for generators other than mavgen.

The table below shows the available languages/generators, along with their support for MAVLink v1, MAVLink 2 and Message Signing.

Language Generator MAVLink v1 MAVLink v2 Signing Notes
C mavgen Y Y Y This is the MAVLink project reference implementation. Generated libraries are also published for both protocol versions.
C++11 mavgen Y Y Y
Python (2.7+, 3.3+) mavgen Y Y Y
C# mavgen Y
Objective C mavgen Y
Java mavgen Y
Java dronefleet/mavlink Y Y Y Idiomatic Java SDK/API for MAVLink. Provides a gradle plugin for the code generator.
JavaScript mavgen Y
Lua mavgen Y
Swift mavgen Y
Clojure clj-mavlink Y Y Y Clojure MAVLink Bindings.

Prebuilt MAVLink Libraries

C MAVLink Source Files (only) are auto-generated for the latest versions of all message specifications/dialects (for both MAVLink 1 and 2):

Using Generated Source Files explains how to use these libraries.

Forums and Chat

The core development team and community are active on the following chat channel:

  • Slack (sign up) - #mavlink channel

Reporting Bugs & Issues

If you have any problems using MAVLink first post them on the support channels above.

If directed by the development team, issues may be raised on Github here.


The Contributing Guide explains the contribution model and the main areas where you can help.


The message definition XML files and the generated C-language version of MAVLink (a header-only library) are made available under the MIT-licence. MAVLink can therefore be used without limits in any closed-source application without publishing the source code of the closed-source application. See the COPYING file for more information.

The MAVLink generator toolchain is licensed under the terms of the Lesser General Public License (version 3) of the Free Software Foundation (LGPLv3). Changes to the protocol/generator toolchain must therefore be contributed back to the project.

This documentation is licensed under CC BY 4.0 (Human readable overview | LICENSE).