Feed MLAT
The Short Version
Your ADS-B feed from the ADS-B page must already work. Then add this line to the same ULTRAFEEDER_CONFIG (the line before it needs a semicolon at the end) and set the three settings below it:
mlat,feed.arksignal.net,31090
- MLAT_USER: your Station ID (letters, digits, dashes and underscores). If you already use another name, keep it and enter it as the MLAT User Name on your station page.
- READSB_LAT, READSB_LON and READSB_ALT: your antenna's true position, within a few metres, with the altitude above sea level.
- UUID: the same one you use for the ADS-B feed.
Your exact position is held only by the MLAT server and is never shown publicly. Recreate the container, then check Am I Feeding?: it shows MLAT status in plain words.
How It Works
MLAT (multilateration) finds aircraft that do not broadcast a position. Radio travels at a fixed speed, so when an aircraft transmits, stations at different distances hear it at slightly different instants, a difference of millionths of a second. If three or more stations record exactly when they heard the same message, the differences place the aircraft at one point in the sky (four stations also give altitude). The same trick, run the other way, is how GPS works.
What your station does: your receiver time-stamps every message it hears with its own clock, and sends those timestamps (not your location data) to the network's MLAT server. The server compares all stations' clocks, using aircraft that do broadcast their position as reference beacons, and calculates positions for the others. The results come back to you and appear on the map labelled MLAT.
Trade-offs: MLAT positions are less exact than ADS-B and arrive a moment later, and only aircraft heard by enough stations get one. It is an extra, not a replacement for your ADS-B feed, which it depends on. See the MLAT network page for who is connected and how well.
What You Need
- A working ADS-B feed. MLAT uses the same receiver, antenna, computer and container; there is nothing extra to buy.
- An exact position. Your latitude, longitude and the antenna's altitude above sea level must be right to within a few metres, because the whole calculation assumes it. A wrong location does not just fail; it makes your station's timing look bad to the others, and the server will pause it.
- Neighbours. At least three stations must hear the same aircraft, so MLAT is best where stations overlap. Your station may sit at "connected, waiting for peers" until the next station near you joins; that is normal.
- A steady receiver: a computer that is not overloaded, a USB radio that is not dropping samples, a correct clock, and a wired network without long delays or gaps.
- The same UUID in your MLAT line as in your feed, and MLAT_USER set, so the portal can match your MLAT connection to your station and show you its health.
Hardware
| Item | What Matters for MLAT |
|---|---|
| Receiver | Any receiver that works for ADS-B works for MLAT. A dongle that drops samples (cheap USB hub, overloaded Pi, poor power) breaks the timing: use a good power supply and a USB 2.0 port or a short extension. The receiver choices are on the ADS-B page. |
| Computer and network | A wired network connection and a computer with spare processor time. MLAT compares clocks, so keep the computer's clock synchronised (systemd-timesyncd or chrony). |
| Antenna | The same antenna as for ADS-B. What changes is that its position must be measured: a stable mount where the antenna does not move between measurements. |
| Measuring the position | A phone GPS left outside for a few minutes, or a satellite map zoomed far in, gives latitude and longitude. For the altitude add the ground height (an elevation finder, or the lookup button on your station page) to the antenna's height above the ground. |
| Time-sync hardware | Not needed. Some operators add a GPS-timed receiver for the best results, but ordinary dongles work well when the position is right. |
Hardware Setup
- Mount the antenna where it will stay, as in the ADS-B hardware setup. Do not move it later without changing the position.
- Measure the antenna's latitude and longitude to five decimal places (about a metre) and write them down.
- Work out its altitude above sea level: the ground height at that spot plus the height of the antenna above the ground. Use metres or add the unit (320ft).
- Use a wired network connection and a power supply that can run the computer and the radio without dips.
Software Setup
In the same compose.yaml as your ADS-B feed (see the ADS-B software setup), these are the MLAT parts:
environment:
- READSB_LAT=YOUR_LATITUDE
- READSB_LON=YOUR_LONGITUDE
- READSB_ALT=YOUR_ANTENNA_ALTITUDE_ABOVE_SEA_LEVEL_IN_METERS_m
- UUID=YOUR_UUID
- MLAT_USER=YOUR_STATION_ID
- ULTRAFEEDER_CONFIG=
adsb,feed.arksignal.net,30004,beast_reduce_plus_out;
mlat,feed.arksignal.net,31090
Each line except the last ends with a semicolon. Ultrafeeder already contains the MLAT client and starts it from the mlat,... line, so there is nothing extra to install. Recreate the container with docker compose up -d and watch it with docker logs ultrafeeder | grep -i mlat.
Already doing MLAT for other networks
That is fine: the MLAT client runs once per network, so add our mlat,... line next to the others. The position settings are shared by all of them.
Not using ultrafeeder? (readsb, dump1090-fa, PiAware)
Install the separate mlat-client program and run it against your receiver's Beast output:
mlat-client --input-type dump1090 --input-connect 127.0.0.1:30005 \ --server feed.arksignal.net:31090 --user YOUR_STATION_ID --uuid YOUR_UUID \ --lat YOUR_LATITUDE --lon YOUR_LONGITUDE --alt YOUR_ANTENNA_ALTITUDE_IN_METERS \ --results beast,connect,127.0.0.1:30104
After You Are Feeding
- Use Am I Feeding? to confirm the hub sees your station.
- Create an account and sign in, then claim your feeder. If you are on the same network as the receiver it is found automatically; otherwise paste its UUID.
- Choose a station ID, set the location with the map, and describe your setup. You decide whether the public sees an approximate location, the exact one, or none. This does not change what the receiver sends.
- Open My Feeders and your station to see its MLAT status in plain words, with what to fix if it is not working. The MLAT network page shows which stations yours is synchronised with and how well.
- Aircraft found by MLAT appear on the live map labelled MLAT; the Data Source filter can show or hide them.
Ports and Firewall
Like the ADS-B feed, MLAT only makes an outbound connection. Nothing needs forwarding on your router.
| What | Direction | Destination | Port |
|---|---|---|---|
| MLAT | outbound TCP | feed.arksignal.net | 31090 |
| ADS-B feed (see the ADS-B page) | outbound TCP | feed.arksignal.net | 30004 |
Troubleshooting
| Symptom | What to check |
|---|---|
| MLAT: not connected | The mlat,... line is missing or has a typo, or MLAT_USER contains a space or symbol. docker logs ultrafeeder | grep -i mlat shows the client's messages. |
| MLAT: connected, waiting for peers | Normal when no other station nearby does MLAT yet. It starts by itself once three stations hear the same aircraft. |
| MLAT: sync problem or timed out | Almost always the position: check latitude, longitude and especially the antenna altitude above sea level to a few metres. Then check the computer's load and clock, and that the USB radio is not dropping samples. |
| MLAT status says not connected but logs look fine | The portal matches by UUID first, then by the MLAT User Name saved on your station page, then by a MLAT_USER equal to your Station ID. Make sure the same UUID is set, or save your existing MLAT_USER as the MLAT User Name. |
| ADS-B works, MLAT never does | Check the semicolon between the adsb and mlat lines, and that the port is open outbound (31090). ADS-B problems are on the ADS-B page. |
Your Data and Privacy
- The aircraft messages you send are public flight data. They are merged into the network's map and statistics.
- Your location is shown publicly only as you choose: approximate, exact or hidden. The MLAT server needs your exact position to work and keeps it private; the portal never shows it.
- You can change your choice, rename the station, or delete your account at any time from your account pages.
- Station statistics (uptime, messages, range) are public for named stations, without anything that reveals a hidden location.
More Help
- The other feeding pages: ADS-B, MLAT, UAT (978 MHz), Weather Stations, Radiosondes, Mesh Nodes, ACARS, AIS, Satellite Receivers, and Am I Feeding?
- Service status: is the network itself working right now?
- MLAT network: who is connected and synchronised with whom.
- Feeders and the network statistics: how stations are doing.
- Contact someone from the network if you are stuck.