Unreleased

0.14.3 - 2026-06-25

Changed

  • Hardened MAVLink XML generation by rejecting reserved identifiers before source generation.

Tests

  • Added router coverage for subscriber cleanup and independent outbound signing state across multiple UDP connections.
  • Added a downstream compatibility smoke fixture and CI coverage for docs and example workflows.

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.