How to Feed ACARS
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:
| Link | What 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 2 | The newer digital VHF link (136.650 to 136.975 MHz). The same messages, faster. Decoded with dumpvdl2 or vdlm2dec. |
| HFDL | The HF datalink for aircraft out of VHF range (3 to 22 MHz). Decoded with dumphfdl; needs a radio that covers HF. |
| Satellite | Inmarsat (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
| Item | Options 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. |
| Antenna | A 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 LNA | A VHF airband filter (or a broadcast FM notch) helps where FM stations or pagers overload the dongle. |
| Computer | Raspberry Pi 3, 4 or 5, or any small Linux machine or home server that runs Docker. |
| Decoder software | ACARS Hub and its companion containers from the SDR Enthusiasts project, or the decoders on their own: acarsdec, dumpvdl2, dumphfdl. |
Hardware Setup
- Mount the antenna outdoors, as high as possible, away from metal obstructions and other antennas.
- Connect the antenna to the receiver with the shortest practical run of good coax. A filter goes between the antenna and the cable run.
- 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.
- 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.
- 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)
- Install a Linux operating system and Docker as for the ADS-B feeder.
- Add your station on My ACARS Stations and copy its upload address (it ends in your token).
- Download the bridge next to your compose file: curl -O https://feed.arksignal.allisononline.org/static/acars_bridge.py
- Create /opt/adsb/acars/compose.yaml with the example below, replacing the values in capitals.
- 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
- 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.
- Watch the messages arrive on the ACARS page; filter by your station to see only yours.
- Tick Show this station publicly when you are happy, set how precisely its place is shown, and describe your setup (bands, hardware).
- 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.
| What | Direction | Destination | Port |
|---|---|---|---|
| Messages from the bridge | outbound TCP (https) | feed.arksignal.allisononline.org | 443 |
| Decoders to acars_router and the bridge | inside your computer (UDP) | your own Docker network | 5550, 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
| Symptom | What to check |
|---|---|
| The bridge says it could not send | Look 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 nothing | The 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 nothing | docker 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 quiet | A 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 stations | It 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
- ACARS: the messages, with filters, and the stations.
- My ACARS Stations: add and manage yours.
- The other feeding pages: ADS-B, MLAT, UAT (978 MHz), Weather Stations, Radiosondes, ACARS, Mesh Nodes, and Am I Feeding?
- Service status: is the network itself working right now?
- Contact someone from the network if you are stuck.