Generating Source Files

Language-specific MAVLink libraries ("source files") can be created from XML Message Definitions using Python-based command line or GUI generator tools. The supported output languages for each version of the MAVLink protocol are listed in Supported Languages (these include C, C#, Java, Python etc).

The tools must already have been set up as described in Install MAVLink (in particular Tkinter must be installed to use the GUI tool).

message_definitions/v1.0/ contains XML definitions for a number of different dialects. Dialect files that have dependencies on other XML files must be located in the same directory. Since most MAVLink dialects depend on the common.xml message set, you should place your dialect with the others in that folder.

MAVLink Generator ( is a header generation tool GUI written in Python. It can be run from anywhere using Python's -m argument:

python -m mavgenerate

MAVLink Generator UI

Generator Steps:

  1. Choose the target XML file (typically in mavlink/message_definitions/1.0).

    If using a custom dialect, first copy it into the above directory (if the dialect is dependent on common.xml it must be located in the same directory).

  2. Choose an output directory (e.g. mavlink/include).
  3. Select the target output programming language.
  4. Select the target MAVLink protocol version (ideally 2.0)

    Generation will fail if the protocol is not supported by the selected programming language.

  5. Optionally check Validate and/or Validate Units (if checked validates XML specifications).
  6. Click Generate to create the source files.

Mavgen (Command Line) is a command-line interface for generating a language-specific MAVLink library. After the mavlink directory has been added to the PYTHONPATH, it can be run by executing from the command line.

This is the backend used by The documentation below explains all the options for both tools.

For example, to generate MAVLink 2 C libraries for a dialect named your_custom_dialect.xml:

python -m --lang=C --wire-protocol=2.0 --output=generated/include/mavlink/v2.0 message_definitions/v1.0/your_custom_dialect.xml

The full syntax can be output by running mavgen with the -h flag (reproduced below):

usage: [-h] [-o OUTPUT]
                 [--lang {C,CS,JavaScript,Python,WLua,ObjC,Swift,Java,C++11}]
                 [--wire-protocol {0.9,1.0,2.0}] [--no-validate]
                 [--error-limit ERROR_LIMIT] [--strict-units]
                 XML [XML ...]

This tool generate implementations from MAVLink message definitions

positional arguments:
  XML                   MAVLink definitions

optional arguments:
  -h, --help            show this help message and exit
  -o OUTPUT, --output OUTPUT
                        output directory.
  --lang {C,CS,JavaScript,Python,WLua,ObjC,Swift,Java,C++11}
                        language of generated code [default: Python]
  --wire-protocol {0.9,1.0,2.0}
                        MAVLink protocol version. [default: 1.0]
  --no-validate         Do not perform XML validation. Can speed up code
                        generation if XML files are known to be correct.
  --error-limit ERROR_LIMIT
                        maximum number of validation errors to display
  --strict-units        Perform validation of units attributes.

results matching ""

    No results matching ""