Skip to content

SWIM Developer

Open-source reference implementation of SWIM (System Wide Information Management) services for aviation, built on Red Hat OpenShift.

SWIM is a global ICAO mandate (EU Regulation 2021/116, CP1) requiring Air Navigation Service Providers to adopt standardized, service-oriented data exchange. This project provides production-ready components so that ANSPs, AISPs, integrators, regulators, and developers can deploy compliant SWIM services without vendor lock-in.

A framework, not a monolith. swim-developer is organized around a central idea: the infrastructure that every SWIM service needs (subscription lifecycle, AMQP messaging, heartbeat monitoring, self-healing) should be written once and shared, so that each new service only implements what is unique to its domain.

Six working services that demonstrate both sides of the SWIM exchange, Consumer and Provider, for three real-world use cases:

  • DNOTAM (Digital NOTAM), aeronautical information using AIXM 5.1.1
  • ED-254 (Arrival Sequence / AMAN), arrival management using FIXM 4.3
  • FF-ICE (Flight Filing), flight and flow information using FIXM 4.3

Compliance validators that exercise the full AMQP subscription lifecycle against running instances, verifying SPEC-170 conformance.

Data models (AIXM 5.1.1, FIXM 4.3, FIXM FF-ICE) generated from the official XSD schemas, ready to use.

Maven archetypes that scaffold new consumer, provider, and data model projects in minutes.

Open standards deserve open implementations.

Visit swim-developer.github.io for full documentation, architecture details, and step-by-step tutorials.


Standards

This project implements the following standards. Each one shaped concrete design decisions, not aspirational references, but constraints the code was built to satisfy.

Standard What it governs
EUROCONTROL SPEC-170 SWIM-TI Yellow Profile: AMQP 1.0 messaging, Subscription Manager API, heartbeat contracts, subscription lifecycle
EUROCAE ED-254 Arrival Sequence Service: subscription/notification model for downstream ATSU coordination
AIXM 5.1.1 Aeronautical Information Exchange Model: DNOTAM events (runway closures, obstacles, navaid status)
FIXM 4.3 Flight Information Exchange Model: ED-254 arrival sequence and FF-ICE flight filing messages
EU Regulation 2021/116 Common Project 1 (CP1): the regulatory mandate for SWIM adoption
AMQP 1.0 / TLS 1.3 Transport and security: mutual TLS with X.509 certificates, SASL authentication (SWIM-TIYP-0008)

Architecture

swim-developer follows Hexagonal Architecture (Ports and Adapters). The domain core defines contracts through SPIs; infrastructure adapters handle protocol-specific concerns without leaking into domain logic. This separation is what makes the framework reusable: a new SWIM service implements a small set of SPIs, and the framework provides everything else.

                    +----------------------------------+
                    |          Domain Core             |
                    |                                  |
                    |   SPIs (Ports):                  |
   Driving          |   . SwimEventExtractor<T>        |         Driven
   Adapters ------> |   . SwimOutboxRouter             | <------ Adapters
   (REST API,       |   . SwimPayloadValidator         |         (AMQP, Kafka,
    Scheduler)      |   . SwimSubscription<E>          |          MongoDB, PostgreSQL)
                    |   . SwimIngressHandler           |
                    |                                  |
                    +----------------------------------+

   Dependency Rule: Adapters depend on Core. Core depends on nothing.

For C4 diagrams, sequence diagrams, and architecture decision records, see the architecture documentation.


Consumer and Provider: Two Separate Products

Consumer and Provider are separate products for different customers.

A Provider (AISP role) publishes aviation data to the SWIM network. A Consumer (ANSP role) subscribes to external providers to receive that data. They share the same framework, but they serve different organizations with different operational needs.

An ANSP's Consumer connects to external Providers (EUROCONTROL, Austro Control, LFV, and others). It never connects to its own Provider. This reflects the real-world architecture of SWIM, where data flows between organizations, not within them.

The framework supports multi-provider connections: a single Consumer can maintain simultaneous AMQP subscriptions to multiple external Providers.


Repository Map

The repositories are organized in layers. Build order matters: each layer depends on the ones above it.

1. Parent POM

Repository Description
swim-developer-root Root POM, parent for all Maven modules. Clone and install first.

2. Data Models

JAXB bindings generated from official XSD schemas. Required by the services that use each standard.

Repository Standard
swim-aixm-model AIXM 5.1.1 + GML 3.2.1 (aeronautical information)
swim-fixm-model-ed254 FIXM 4.3 / ED-254 (arrival sequence)
swim-fixm-ffice-model FIXM 4.3 / FF-ICE (flight filing)

3. Framework

Reusable infrastructure extracted from production services.

Repository What it does
swim-developer-framework Core framework: 6 modules (core, consumer, provider, mongodb, leader-kubernetes, leader-infinispan). SPIs, AMQP, Kafka, health, security, inbox/outbox patterns.
swim-developer-extensions Extension point implementations: Kafka inbox store, inbox reader, outbox routers (DNOTAM, ED-254, FF-ICE), ingress adapters.
swim-developer-validators Shared validator base libraries (core, consumer, provider).
swim-developer-add-ons Artemis ACK audit plugin, Keycloak SWIM role SPI.

4. SWIM Services

Six services across three SWIM use cases.

Digital NOTAM (AIXM 5.1.1)

Repository Role Database
swim-digital-notam-provider AISP (publishes NOTAMs) PostgreSQL
swim-digital-notam-consumer ANSP (receives NOTAMs) MongoDB

ED-254 Arrival Sequence (FIXM 4.3)

Repository Role Database
swim-ed254-provider ATSU (publishes arrival sequences) PostgreSQL
swim-ed254-consumer ANSP (receives arrival sequences) MongoDB

FF-ICE Flight Filing (FIXM 4.3)

Repository Role Database
swim-ffice-provider eASP (publishes flight plans) PostgreSQL
swim-ffice-consumer ANSP (receives flight plans) MongoDB

5. Conformance Validators

Test counterparts for each service. Consumer validators simulate external providers. Provider validators run conformance scenarios against live providers.

Repository Tests against
swim-dnotam-consumer-validator DNOTAM Consumer (mock AISP)
swim-dnotam-provider-validator DNOTAM Provider (conformance client)
swim-ed254-consumer-validator ED-254 Consumer (mock ATSU)
swim-ed254-provider-validator ED-254 Provider (conformance client)
swim-ffice-consumer-validator FF-ICE Consumer (mock eASP)
swim-ffice-provider-validator FF-ICE Provider (conformance client)

6. Maven Archetypes

Scaffold new SWIM services in minutes.

Repository Generates
swim-provider-archetype New SWIM provider project
swim-consumer-archetype New SWIM consumer project
swim-model-archetype New JAXB data model project

7. Deployment and Operations

Repository Description
swim-operator Kubernetes Operator (Go). Automates provisioning of all SWIM components on OpenShift.
swim-deploy-minikube Deployment scripts for Minikube (local Kubernetes).
swim-deploy-openshift-local Deployment scripts for OpenShift Local (CRC).

8. Examples and Portal

Repository Description
swim-example-apps Demo applications: DNOTAM Event Publisher, Operations Dashboard, ED-254 Arrival Flow Manager (Quarkus + React + PatternFly).
swim-developer.github.io Project website and documentation portal.

Technology

Component Technology
Runtime Quarkus, Java 21
Messaging ActiveMQ Artemis: AMQP 1.0 (SPEC-170 mandated)
Streaming Apache Kafka (Strimzi on OpenShift)
Provider persistence PostgreSQL
Consumer persistence MongoDB (Panache)
Security Mutual TLS (X.509), JWT/OIDC (Keycloak), TLS 1.3
Observability OpenTelemetry, Prometheus, Grafana, Loki, Tempo
Containers Multi-arch images (linux/amd64 + linux/arm64)
Platform Red Hat OpenShift
CI/CD Tekton Pipelines

Get Started

"I want to deploy an existing service"

Clone and install the shared dependencies first, then build the service you need.

Linux / macOS:

# 1. Parent POM
git clone https://github.com/swim-developer/swim-developer-root.git
cd swim-developer-root && ./mvnw clean install -DskipTests && cd ..

# 2. Data Models
git clone https://github.com/swim-developer/swim-aixm-model.git
cd swim-aixm-model && ./mvnw clean install -DskipTests && cd ..

git clone https://github.com/swim-developer/swim-fixm-model-ed254.git
cd swim-fixm-model-ed254 && ./mvnw clean install -DskipTests && cd ..

git clone https://github.com/swim-developer/swim-fixm-ffice-model.git
cd swim-fixm-ffice-model && ./mvnw clean install -DskipTests && cd ..

# 3. Framework
git clone https://github.com/swim-developer/swim-developer-framework.git
cd swim-developer-framework && ./mvnw clean install -DskipTests && cd ..

# 4. Extensions
git clone https://github.com/swim-developer/swim-developer-extensions.git
cd swim-developer-extensions && ./mvnw clean install -DskipTests && cd ..

# 5. Validators
git clone https://github.com/swim-developer/swim-developer-validators.git
cd swim-developer-validators && ./mvnw clean install -DskipTests && cd ..

# 6. Build the service you need (example: DNOTAM Consumer)
git clone https://github.com/swim-developer/swim-digital-notam-consumer.git
cd swim-digital-notam-consumer && mvn clean package -DskipTests

Windows (CMD or PowerShell):

rem 1. Parent POM
git clone https://github.com/swim-developer/swim-developer-root.git
cd swim-developer-root && mvnw.cmd clean install -DskipTests && cd ..

rem 2. Data Models
git clone https://github.com/swim-developer/swim-aixm-model.git
cd swim-aixm-model && mvnw.cmd clean install -DskipTests && cd ..

git clone https://github.com/swim-developer/swim-fixm-model-ed254.git
cd swim-fixm-model-ed254 && mvnw.cmd clean install -DskipTests && cd ..

git clone https://github.com/swim-developer/swim-fixm-ffice-model.git
cd swim-fixm-ffice-model && mvnw.cmd clean install -DskipTests && cd ..

rem 3. Framework
git clone https://github.com/swim-developer/swim-developer-framework.git
cd swim-developer-framework && mvnw.cmd clean install -DskipTests && cd ..

rem 4. Extensions
git clone https://github.com/swim-developer/swim-developer-extensions.git
cd swim-developer-extensions && mvnw.cmd clean install -DskipTests && cd ..

rem 5. Validators
git clone https://github.com/swim-developer/swim-developer-validators.git
cd swim-developer-validators && mvnw.cmd clean install -DskipTests && cd ..

rem 6. Build the service you need (example: DNOTAM Consumer)
git clone https://github.com/swim-developer/swim-digital-notam-consumer.git
cd swim-digital-notam-consumer && mvn clean package -DskipTests

"I want to build a new SWIM service"

Use the Maven archetypes to scaffold a complete project with hexagonal architecture. The Create Consumer and Create Provider tutorials walk through the full process step by step.

"I want to deploy on OpenShift / Kubernetes"

See the deployment tutorials for guided instructions covering OpenShift, Kubernetes, Minikube, OpenShift Local, Podman, and Java/binary deployments.


Contributing

This project is an open invitation to the SWIM development community. Whether you are an ANSP evaluating SWIM adoption, a system integrator building SWIM services, a regulator assessing compliance, or a developer interested in aviation data exchange, contributions, feedback, and collaboration are welcome.

The framework was designed to be extended. If you are building a new SWIM service, the SPIs define the contracts your service needs to implement. The framework handles the rest.


License

All repositories are licensed under Apache License 2.0.

Popular repositories Loading

  1. swim-developer.github.io swim-developer.github.io Public

    HTML 1

  2. swim-developer-root swim-developer-root Public

    Dependency manager

    Makefile

  3. swim-aixm-model swim-aixm-model Public

    Java

  4. swim-fixm-model-ed254 swim-fixm-model-ed254 Public

    Java

  5. swim-developer-framework swim-developer-framework Public

    Java

  6. swim-developer-extensions swim-developer-extensions Public

    Java

Repositories

Showing 10 of 32 repositories

Top languages

Loading…

Most used topics

Loading…