Air surveillanceImplementation status: BidirectionalInput supportedOutput supported

ASTERIX: which categories are implemented, and in which direction

ASTERIX is the EUROCONTROL family of binary surveillance data formats. SynapseCommand publishes five ASTERIX adapters in its open integration layer. Each translates data blocks into the canonical data model and emits them again, and each is verified against shipped fixtures by the same harness a third party can run.

About the standard

What ASTERIX is

ASTERIX, the All Purpose Structured EUROCONTROL Surveillance Information Exchange, is not one format. It is a family of categories, each defined by its own specification document, sharing a common data block envelope of category octet, length and a field specification bitmap followed by data items.

Categories are allocated by purpose rather than by vendor. Category 021 carries ADS-B target reports as a ground station has already processed them, category 048 carries monoradar target reports from a single radar, category 034 carries the service messages a radar sends about itself, category 062 carries system track data from a tracker, and category 023 carries ground station status.

Because a data block is a tiled sequence of records with no checksum, structural conformance is the only integrity gate the format offers. A block that does not tile exactly, a field specification bit that names an undefined field reference number, or an item that runs past the record boundary are all defects that a lenient reader would silently absorb.

Operational relevance

Why this matters to a commander

ASTERIX is the exchange format most European air surveillance infrastructure already speaks. A recognised air picture assembled from radar, multilateration and ADS-B ground stations is very often an ASTERIX stream before it is anything else.

For a decision-support layer, that matters because the alternative to reading ASTERIX is reading a downstream system's private rendering of it, which means inheriting that system's judgements about quality, identity and time without being able to see them.

The categories SynapseCommand implements cover both what a sensor detected and what the sensor said about itself. Sensor health is a decision input: a track thinning out because a radar is in a test mode is a different situation from a track thinning out because the target changed behaviour.

What is implemented

The exact behaviour, not a capability claim

Each category has its own adapter module, and they deliberately share no translation code. A single generic ASTERIX reader would create the appearance of a common basis where the specifications do not provide one, so each category is implemented against its own pinned document.

Ingest turns one data block into one Entity and one Event per record, in block order. A block legitimately carries several records naming several aircraft, and each is a report in its own right.

Egress re-emits from the parsed integers rather than from any derived floating point value, which is what makes byte exact output possible for records that came from the same category.

The full field by field mapping for every category is published as FORMAT_COVERAGE.md in the repository. That document is the specification the code is written against, and a test resolves every canonical path in it against the models so the two cannot drift apart.

  • 01
    Category 021
    ADS-B target reports. Bidirectional. Dedicated page.
  • 02
    Category 023
    CNS/ATM ground station and service status reports. Bidirectional. Dedicated page.
  • 03
    Category 034
    Monoradar service messages. Bidirectional. Dedicated page.
  • 04
    Category 048
    Monoradar target reports. Bidirectional. Dedicated page.
  • 05
    Category 062
    System track data from a data processing system. Bidirectional. Dedicated page.
  • 06
    Everything else
    Not implemented. No other ASTERIX category is claimed anywhere on this site.
Direction of exchange

Which way the data actually moves

Into the canonical model

  1. ASTERIX data block
    Category, length, field specification, records.
  2. Canonical data model
    Entity and Event per record, with every unmapped field parked and visible.

Out of the canonical model

  1. Canonical data model
    Objects that originated in the same category.
  2. ASTERIX data block
    Re-emitted from the parsed integers.
Workflows

Where this data is used

Recognised air picture ingest

Category 021 and category 048 reports become canonical Entities and Events that the ISR Fusion Agent correlates. Correlation happens in the fusion layer where it is audited, never inside a translator.

Sensor health in the decision record

Category 034 makes the radar itself the subject. A station reporting a changed operating mode is recorded as an Event against the station Entity, so a later review can see what the sensor was doing when a decision was taken.

Replay and evidence

Because ingest is a pure function of one payload, an archived block replays to identical canonical objects. That is what makes a decision record reproducible rather than merely logged.

Implementation evidence

Every claim above has a file behind it

These paths are in the public repository, published under Apache 2.0. The adapter module for this page is asterix_cat021, asterix_cat023, asterix_cat034, asterix_cat048, asterix_cat062.

Source and fixtures

  • Category 021 adapter
    packages/cdm/synapse_cdm/adapters/asterix_cat021.py

    Ingest and egress for ADS-B target reports.

  • Category 034 adapter
    packages/cdm/synapse_cdm/adapters/asterix_cat034.py

    Ingest and egress for monoradar service messages.

  • Category 048 adapter
    packages/cdm/synapse_cdm/adapters/asterix_cat048.py

    Ingest and egress for monoradar target reports.

  • Field by field coverage
    FORMAT_COVERAGE.md

    The written specification each adapter is implemented against, including every declared gap.

  • Published JSON Schema
    schemas/

    Generated from the canonical models, so a non-Python consumer can validate without the package.

Test evidence

  • Category 021 harness test
    tests/test_cdm_asterix_cat021_adapter.py

    Replayed by the validation harness shipped in the same package, which runs six checks per fixture including a never-drop lossless check.

  • Category 034 harness test
    tests/test_cdm_asterix_cat034_adapter.py

    Replayed by the validation harness shipped in the same package, which runs six checks per fixture including a never-drop lossless check.

  • Category 048 harness test
    tests/test_cdm_asterix_cat048_adapter.py

    Replayed by the validation harness shipped in the same package, which runs six checks per fixture including a never-drop lossless check.

  • Coverage document test
    tests/test_cdm_format_coverage.py

    Asserts that the coverage document and the models agree, in both directions.

Manifest-backed assurance

Maturity is declared in each generated adapter manifest and checked against suite eligibility. VERIFIED is a separate claim-status axis. Neither means external certification or integration with a named system.

  • asterix_cat021
    Maturity L4Claim VERIFIED
  • asterix_cat023
    Maturity L4Claim VERIFIED
  • asterix_cat034
    Maturity L4Claim VERIFIED
  • asterix_cat048
    Maturity L4Claim VERIFIED
  • asterix_cat062
    Maturity L4Claim VERIFIED
What these maturity levels mean

L3 means required provenance survives translation. L4 adds applicable roundtrip evidence. L5 would require every applicable public conformance gate to pass. L6 requires an independent real implementation or system and cannot be awarded from this repository's synthetic fixtures.

Status and limits

What is claimed, and what is not

Implementation status: Bidirectional

The published adapter implements both translation directions: the format into the canonical data model, and the canonical data model back out to the format. Both directions are replayed by the validation harness against shipped fixtures.

Last reviewed against the published implementation on 2026-09-06.

Limitations

  • Only categories 021, 023, 034, 048 and 062 are implemented. No other category is supported.
  • There is no network transport in the integration layer. Splitting a stream into data blocks is the caller's responsibility, which is what the specifications themselves assume.
  • No adapter correlates across payloads. Joining reports into tracks is a fusion function, performed outside the translator.
  • Each adapter is written against one pinned edition of its specification. Where a pinned document leaves a question open, the gap is recorded in the coverage document rather than closed by a guess.

Security boundary

  • The published integration layer is the data contract only. It carries no models, no doctrinal content, no decision logic and no deployment configuration.
  • Adapters accept an injected clock rather than reading the wall clock, so translation behaviour is fully determined by its inputs and can be replayed exactly.
  • The proprietary decision runtime is not published, and no page on this site describes its internals.

Public sources

Statements about what SynapseCommand® implements are drawn from the published repository rather than from these external sources.

Questions

Frequently asked

Which ASTERIX categories does SynapseCommand support?
Categories 021, 023, 034, 048 and 062. Each has a published adapter that translates in both directions and is verified by the shipped harness. No other category is implemented.
Is the ASTERIX support bidirectional?
Yes, for the five implemented categories. Each adapter provides both a to_cdm and a from_cdm path, and the harness calls the egress path on whatever the ingest path produced for every fixture, so an adapter that could not re-emit its own output would fail its own gate.
Does SynapseCommand connect to a radar directly?
No. The integration layer translates payloads. It opens no sockets, holds no reassembly buffer and performs no stream framing, because the ASTERIX specifications place those functions in the layer below the format.
Can we verify the mapping ourselves?
Yes. The adapters, the field by field coverage document, the fixtures and the harness are all published under Apache 2.0, and the distribution is installable from PyPI. Running the harness against a shipped adapter is a single command.
Related

Where to go next

Related C2 environments

Command environments in the compatibility catalogue whose published characteristics reference this standard. Each page states the current SynapseCommand integration status for that system.