Packages

An elixir library for MAVLink, an application that enables communication with other systems using the MAVLink protocol over serial, UDP and TCP connections, and utility modules for performing common MAVLink commands and tasks with one or more remote vehicles.

Current section

Files

Jump to
xmavlink CHANGELOG.md
Raw

CHANGELOG.md

# Changelog
## Unreleased
## 0.14.2 - 2026-06-25
### Added
- Added MAVLink XML parser hardening for include cycles, conflicting include
paths, file-size limits, include-depth limits, and include-count limits.
### Changed
- Utility cache ETS tables now store typed cache structs for visible systems,
latest messages, and parameter values. Use `XMAVLink.Util.CacheManager`
query APIs instead of relying on direct ETS payload shapes.
- Clarified the public HexDocs API surface and hid internal transport delegate
modules from generated documentation.
## 0.14.1 - 2026-06-25
### Added
- Added public utility cache query APIs for listing cached systems, reading the
latest cached message, and reading a cached parameter without direct ETS
access.
- Added a `0.14.0` migration guide and a deployment safety checklist.
### Tests
- Added deterministic malformed-frame parser coverage and parser
resynchronization coverage.
- Added connection worker lifecycle coverage for close and reconnect behavior.
## 0.14.0 - 2026-06-24
### Breaking Changes
- Formalized utility scoping around `XMAVLink.Util.Context`. Utility callers
that need non-default ETS table names should pass `context: context` instead
of relying on hard-coded global table names.
- Direct utility ETS table access should migrate from fixed names such as
`:messages`, `:systems`, `:params`, and `:sessions` to
`XMAVLink.Util.Tables.name/2` or `XMAVLink.Util.Context.tables`.
### Added
- Added `XMAVLink.Router.send_message/1..3`, a synchronous send API that
returns delivery metadata while preserving the existing `pack_and_send`
APIs.
- Added `XMAVLink.Util.Context` and `context: context` utility options so
cache, focus, parameter, arm/disarm, and SITL helpers can be scoped by
router, dialect, and table namespace.
- Added internal router architecture modules for configuration normalization,
connection-string parsing, route selection, transport behaviour contracts,
shared inbound frame parsing, and generated dialect behaviour contracts.
### Fixed
- Fixed local MAVLink sequence numbers to wrap after the full `0..255` range.
- Preserved utility focus independently for each scoped utility context.
- Deduplicated targeted route recipients when multiple learned MAVLink
addresses resolve to the same connection.
- Updated the `XMAVLink.Message` invalid-term fallback to stay compatible with
warnings-as-errors while preserving `Protocol.UndefinedError` for unknown
message structs.
## 0.13.0 - 2026-05-11
- Added `remote_forwarding: false` router/application configuration for
endpoint or GCS use cases that should receive remote MAVLink traffic locally
without forwarding it between remote links.
## 0.12.2 - 2026-05-11
- Hardened MAVLink XML generator validation for duplicate or conflicting
message module names.
## 0.12.1 - 2026-05-08
- Added router route invalidation when a `SYSTEM_TIME.time_boot_ms` decrease
indicates a remote system rebooted.
## 0.12.0 - 2026-05-08
- Added MAVLink 2 signed-frame parsing and signature trailer representation.
- Added a low-level MAVLink 2 frame signing helper for already packed frames.
- Added reusable MAVLink 2 signature validation and inbound replay-policy
helpers.
- Added inbound router and connection signing policy wiring so configured
receive paths can verify signed MAVLink 2 frames, reject replayed signatures,
and reject unsigned MAVLink 2 frames by default while signing is enabled.
- Added outbound router signing for unsigned MAVLink 2 frames sent over
signing-enabled connections, with per-connection timestamp increments.
- Added MAVLink 2 signing timestamp load/save callbacks so applications can
persist local signing timestamps across restarts.
- Made inbound `SETUP_SIGNING` frames local-only so key material is not
forwarded between MAVLink links by generic routing.
## 0.11.1 - 2026-05-08
- Made generated MAVLink 2 packers use zero-equivalent defaults for omitted
extension fields while preserving MAVLink 1 packing behavior.
- Added generator coverage for omitted and provided MAVLink 2 extension values,
including scalar, array, enum, bitmask, float, double, and char fields.
## 0.11.0 - 2026-05-08
- Added the MAVLink 1.0 spec alignment checklist and support statement, with
MAVLink 2 as the primary compatibility target.
- Made generated MAVLink 2 unpackers ignore future extension bytes for forward
compatibility with dialects that append extension fields.
- Preserved MAVLink 2 zero-length payloads, consumed unsupported signed-frame
signature trailers on stream transports, and aligned generated bitmask fields
with XML `bitmask="true"` declarations.
## 0.10.2 - 2026-05-08
- Dropped unsupported MAVLink 2 frames with incompatible flags on UDP receive
paths instead of crashing while attempting to validate a nil frame.
- Added `auto_param_request: false` utility configuration for deployments that
need to discover vehicles before automatically requesting parameter lists.
- Documented security reporting, MAVLink trust boundaries, and trusted-input
expectations for dialect XML generation.
## 0.10.1 - 2026-05-07
- Made generated dialect source deterministic and formatter-compatible by
removing timestamp/path churn, combining parsed XML inputs in stable order,
formatting the generated output before writing it, and including generated
Common output in the formatter gate.
## 0.10.0 - 2026-05-07
- Made utility supervision opt-in and documented how to start utilities for
the configured router or an explicitly supervised named router.
- Clarified that the current utility layer is scoped to one selected router per
VM while the core router API remains the multi-router integration surface.
- Changed utility focus and cache helpers to return normal `{:error, reason}`
results when utility state or MAV data is missing.
- Added bounded retry behavior and cleanup for arm/disarm, parameter request,
and parameter set helpers.
- Changed parameter query results to use MAVLink parameter names as string keys
instead of creating atoms from vehicle-provided input.
- Added configurable SITL RC forwarding destination addresses.
## 0.9.1 - 2026-05-07
- Strengthened CI release gates with formatting, warnings-as-errors, xref,
tests, and Dialyzer coverage across the supported toolchain checks.
- Clarified supported transports and MAVLink 2 limitations in public docs.
- Fixed utility process lifecycle issues in `CacheManager` and `FocusManager`.
## 0.9.0 - 2026-05-07
- Moved configured connection startup and reconnect behavior under supervised
per-router connection workers with explicit retry delays.
- Added documentation and coverage for connection worker retry/reconnect
behavior.
## 0.8.0 - 2026-05-07
- Added named router instance support while preserving the default
`XMAVLink.Router` convenience process.
- Added targetable `subscribe`, `unsubscribe`, and `pack_and_send` router APIs
for named or pid router instances.
- Isolated local subscription restart caches per named router.
## 0.7.1 - 2026-05-07
- Fixed TCP outbound forwarding to send MAVLink frames over the TCP socket
instead of attempting to use UDP send calls.
- Added TCP forwarding regression coverage for MAVLink 1 and MAVLink 2 frames.
- Reduced expected test-suite noise from generated task output and runtime logs.
## 0.7.0 - 2026-05-07
- Added per-message `source_system` and `source_component` overrides to
`XMAVLink.Router.pack_and_send/3`.
- Added heartbeat source identity options and `:heartbeats` supervisor config
for multiple local MAVLink identities sharing one router.
- Fixed outbound local sequence tracking so each local source identity uses an
independent MAVLink sequence counter.
- Preserved the existing default router identity behavior for callers that do
not pass source overrides.