How to Feed ACARS

Share your ACARS, VDL Mode 2 or HF datalink receiver with ArkSignal. If you already run the SDR Enthusiasts' ACARS stack (acarsdec, vdlm2dec and acars_router, or ACARS Hub), it takes one extra small container. The messages appear on the ACARS page and on the card of the aircraft they belong to.
The Short Version

Run the ArkSignal bridge next to your decoders and point acars_router at it:

python3 acars_bridge.py https://feed.arksignal.allisononline.org/acars/push/YOUR-TOKEN

The bridge is one small file you download from https://feed.arksignal.allisononline.org/static/acars_bridge.py; your token is in the private upload address on your station's page. The full Docker example is under Software Setup.

First create an account and add the station on My ACARS Stations: that gives you the token. Nothing is public until you tick Show this station publicly. Everything the network is doing right now is on the service status page.

How It Works

ACARS (Aircraft Communications Addressing and Reporting System) is the short text messages between an aircraft and its airline or air traffic control: departure and arrival times, position reports, weather requests, maintenance messages, clearances. They are sent on open, public airwaves and anyone with a small antenna and a USB radio can decode them, which is why hobby receivers all over the world collect them.

Your decoder turns what your radio hears into JSON text. A small bridge on your computer passes each message over https to an address on this site that only you know. The site keeps the message (once, even if two stations heard it) and shows it on the ACARS page and on the details card of the aircraft, matched by tail number or by its ICAO address. The messages come to the network in several ways:

LinkWhat it is
ACARS (VHF)The original datalink, about 129 to 131 MHz in the United States (131.550 and 131.525 are the busiest). Decoded with acarsdec.
VDL Mode 2The newer digital VHF link (136.650 to 136.975 MHz). The same messages, faster. Decoded with dumpvdl2 or vdlm2dec.
HFDLThe HF datalink for aircraft out of VHF range (3 to 22 MHz). Decoded with dumphfdl; needs a radio that covers HF.
SatelliteInmarsat (JAERO) and Iridium (iridium-toolkit) carry the same kind of messages and ADS-C position reports from far outside ADS-B range. Their output can go through the same bridge.

Your location privacy works as it does for ADS-B feeders: you choose how precisely the station is shown. Exact shows the precise coordinates; the others round the position to a grid (Fine about 40 feet, Near about 400 feet, Block about 0.25 mile, Close about 0.7 mile, Area about 1.5 miles, District about 3 miles, General about 6 miles, Region about 15 miles, Broad about 30 miles, Wide about 60 miles); Hidden keeps the station off every public map. A rounded position is drawn as a circle around the point shown.

What You Need
  • A receiver: an RTL-SDR style USB dongle. One dongle covers one slice of VHF; a second dongle lets you listen to ACARS and VDL2 at the same time.
  • An antenna for the VHF airband (about 130 MHz), mounted as high as you can with a clear view. A simple airband or wideband antenna works.
  • Coax cable to connect them, as short as practical.
  • A small always-on computer: a Raspberry Pi or any Linux machine that can run Docker (it can be the same one that runs your ADS-B feeder).
  • A network connection that can reach feed.arksignal.allisononline.org over https (see Ports).
Hardware
ItemOptions and Notes
Receiver RTL-SDR Blog V4 is a popular low-cost choice and covers VHF and HF (its HF input works without a converter). Any RTL-SDR dongle covers the VHF airband. Give each dongle its own serial number (rtl_eeprom -s) so each container opens the right one.
AntennaA VHF airband antenna or a wideband discone. Outdoors and high beats indoors and low. For HFDL a long wire or a dedicated HF antenna is needed.
Filter or LNAA VHF airband filter (or a broadcast FM notch) helps where FM stations or pagers overload the dongle.
ComputerRaspberry Pi 3, 4 or 5, or any small Linux machine or home server that runs Docker.
Decoder softwareACARS Hub and its companion containers from the SDR Enthusiasts project, or the decoders on their own: acarsdec, dumpvdl2, dumphfdl.
Hardware Setup
  1. Mount the antenna outdoors, as high as possible, away from metal obstructions and other antennas.
  2. Connect the antenna to the receiver with the shortest practical run of good coax. A filter goes between the antenna and the cable run.
  3. Plug the receiver into the computer's USB port, preferably USB 2.0 or a short extension cable to keep it away from the computer's noise.
  4. If you use two dongles (ACARS and VDL2), set a different serial number on each before you plug in both, and keep the same ADS-B dongle away from them.
  5. Give the computer a reliable network connection; a cable is better than Wi-Fi.
Software Setup

The usual route is the SDR Enthusiasts ACARS stack: one container per decoder, an acars_router that collects their output, and (here) the ArkSignal bridge as one more destination.

New station (Docker)

  1. Install a Linux operating system and Docker as for the ADS-B feeder.
  2. Add your station on My ACARS Stations and copy its upload address (it ends in your token).
  3. Download the bridge next to your compose file: curl -O https://feed.arksignal.allisononline.org/static/acars_bridge.py
  4. Create /opt/adsb/acars/compose.yaml with the example below, replacing the values in capitals.
  5. Start it with docker compose up -d in that folder.
services:
  acarsdec:                      # VHF ACARS, one dongle
    image: ghcr.io/sdr-enthusiasts/docker-acarsdec:latest
    container_name: acarsdec
    restart: unless-stopped
    device_cgroup_rules:
      - "c 189:* rwm"
    environment:
      - TZ=America/Chicago
      - SOAPY_DEVICE_STRING=driver=rtlsdr,serial=ACARS_DONGLE_SERIAL
      - FREQUENCIES=131.550;131.525;130.025;130.425;130.450;129.125
      - GAIN=-10
      - OUTPUT_SERVER=acars_router
      - OUTPUT_SERVER_PORT=5550
      - OUTPUT_SERVER_MODE=udp
    volumes:
      - /dev/bus/usb:/dev/bus/usb
    tmpfs:
      - /run:exec,size=64M
      - /tmp:size=64M

  dumpvdl2:                      # VDL Mode 2, a second dongle
    image: ghcr.io/sdr-enthusiasts/docker-dumpvdl2:latest
    container_name: dumpvdl2
    restart: unless-stopped
    device_cgroup_rules:
      - "c 189:* rwm"
    environment:
      - TZ=America/Chicago
      - SERIAL=VDL2_DONGLE_SERIAL
      - FREQUENCIES=136650000;136700000;136725000;136775000;136800000;136825000;136875000;136900000;136975000
      - GAIN=-10
      - DUMPVDL2_OUTPUT_TO_ACARS_ROUTER=acars_router:5555
    volumes:
      - /dev/bus/usb:/dev/bus/usb
    tmpfs:
      - /run:exec,size=64M
      - /tmp:size=64M

  acars_router:                  # collects the decoders and sends everything to the bridge
    image: ghcr.io/sdr-enthusiasts/acars_router:latest
    container_name: acars_router
    restart: unless-stopped
    environment:
      - TZ=America/Chicago
      - AR_LISTEN_UDP_ACARS=5550
      - AR_LISTEN_UDP_VDLM2=5555
      - AR_SEND_UDP_ACARS=ark_bridge:5560
      - AR_SEND_UDP_VDLM2=ark_bridge:5560
      - AR_SEND_UDP_HFDL=ark_bridge:5560
      - AR_OVERRIDE_STATION_NAME=YOUR_STATION_ID

  ark_bridge:                    # the ArkSignal ACARS bridge: https to your private address
    image: python:3.12-slim
    container_name: ark_bridge
    restart: unless-stopped
    environment:
      - ARK_LISTEN_PORT=5560
    volumes:
      - ./acars_bridge.py:/b.py:ro
    command: python -u /b.py https://feed.arksignal.allisononline.org/acars/push/YOUR-TOKEN

Replace ACARS_DONGLE_SERIAL and VDL2_DONGLE_SERIAL with the serial numbers you gave the dongles (rtl_test lists them), or delete the whole container for a link you do not receive. The frequencies are examples for the United States: check the decoders' own documentation for the options each image takes. ArkSignal only needs the JSON the decoders already send to acars_router.

Already running ACARS Hub or acars_router

Keep your configuration and add the bridge (the last container above), then add one destination to your existing acars_router: AR_SEND_UDP_ACARS=ark_bridge:5560 and AR_SEND_UDP_VDLM2=ark_bridge:5560 (add the others you already use, separated by semicolons: AR_SEND_UDP_ACARS=acarshub:5550;ark_bridge:5560). If the bridge runs on another computer, use that computer's address instead of ark_bridge.

Not using Docker, or not using acars_router?

The bridge is a single Python file with no extras; run it on any computer with Python 3 and point the decoders at it directly:

python3 acars_bridge.py https://feed.arksignal.allisononline.org/acars/push/YOUR-TOKEN
acarsdec -j 127.0.0.1:5555 -r 0 131.550 131.525
dumpvdl2 --output decoded:json:udp:address=127.0.0.1,port=5555 --rtlsdr 0 136650000 136975000
dumphfdl --output decoded:json:udp:address=127.0.0.1,port=5555 --system-table /etc/dumphfdl/systable.conf --soapysdr driver=rtlsdr 8942 11184

The bridge listens on UDP port 5555 unless ARK_LISTEN_PORT says otherwise. A satellite receiver (JAERO, iridium-toolkit) that can write JSON to UDP uses the same address.

After You Are Feeding
  1. Open your station on My ACARS Stations: the status turns to reporting and the message count rises within a few minutes of the decoder hearing something. ACARS is bursty and a quiet hour is normal.
  2. Watch the messages arrive on the ACARS page; filter by your station to see only yours.
  3. Tick Show this station publicly when you are happy, set how precisely its place is shown, and describe your setup (bands, hardware).
  4. An aircraft you can see on the live map shows its latest ACARS messages on its details card.
Ports and Firewall

Your station only makes outbound connections. You do not need to open or forward anything on your router.

WhatDirectionDestinationPort
Messages from the bridgeoutbound TCP (https)feed.arksignal.allisononline.org443
Decoders to acars_router and the bridgeinside your computer (UDP)your own Docker network5550, 5555, 5560

If your network filters outbound traffic, allow https to the host name above. The UDP ports are between your own containers and are not exposed.

Troubleshooting
SymptomWhat to check
The bridge says it could not sendLook at docker logs ark_bridge. Check the computer's internet access and that the address is exactly the one on your station's page (a new address replaces the old one at once; 404 means the token is wrong or the station is switched off).
Nothing arrives and the bridge prints nothingThe decoders are not sending to it. In docker logs acars_router look for messages; check AR_SEND_UDP_ACARS and AR_SEND_UDP_VDLM2 name the bridge and its port (5560 above).
The decoders print nothingdocker logs acarsdec should show the radio opening. Check the dongle serial numbers, that nothing else (the ADS-B decoder) holds the radio, and that the antenna is connected.
Messages arrive but my station shows quietA station counts as reporting if it sent something in the last 30 minutes; a long quiet spell is normal on ACARS.
The same message shows from two stationsIt is kept once and shows how many stations heard it.
Your Data and Privacy
  • Nothing about your station is public until you tick Show this station publicly. You can switch that off, or delete the station, at any time.
  • ACARS is sent on open, public airwaves, and the pages show what members' receivers hear: the time, the aircraft, the flight, the kind of message and, for everyone, the text. Messages are kept for 14 days.
  • An aircraft's owner who wants its messages left off can ask (Contact): its messages are deleted and no new ones are kept.
  • The upload address is a secret. If it leaks, make a new one on your station's page and the old one stops working at once. Your location follows your privacy choice.
More Help