The easiest way to set up multi-feed ADS-B tracking on your Raspberry Pi
One command. 15-20 minutes. Six flight tracking networks. Zero headaches.
EasyADSB is an all-in-one automated setup script that turns your Raspberry Pi + RTL-SDR dongle into a powerful ADS-B receiver feeding data to six major flight tracking networks:
- π ADSBexchange - Global unfiltered tracking
- π‘ ADSB.lol - Privacy-focused community aggregator
- π« FlightAware - Leading commercial flight tracker
- π FlightRadar24 - Popular worldwide tracker
- πΆ RadarBox - Aviation data platform
- πΊοΈ Local tar1090 - Your own web-based map
Plus: A beautiful web dashboard to monitor everything in one place!
- β
One-Command Setup - Run
./setup.shand follow the prompts - β Auto-Configuration - Automatically generates keys and IDs for all services
- β Flight Logger - Save all flights to local database, export CSV/JSON
- β Live Aircraft Table - See callsigns, hex IDs, types, altitude, speed (NEW in v1.2.1!)
- β ADSBx Integration - Quick links to My Stats, Coverage, Leaderboard (NEW in v1.2.1!)
- β Units Toggle - Switch between kt/nm and mph/mi (NEW in v1.2.1!)
- β Configurable Ports - Avoid conflicts with other services
- β Auto-Update - Pull latest updates from GitHub
- β Web Dashboard - Modern interface with live aircraft tracking
- β Dark Mode - Easy on the eyes, looks great
- β Real-Time Stats - Aircraft count, message rate, max range
- β Mobile Responsive - Works on phone, tablet, desktop
- β Easy Uninstall - Remove everything cleanly
- β Zero Manual Config - No editing config files (unless you want to)
- Raspberry Pi (3B+, 4, or 5 recommended)
- RTL-SDR Dongle (any RTL2832U-based dongle)
- Antenna (optimize for 1090 MHz)
- Internet Connection (Ethernet recommended)
- MicroSD Card (16GB+ recommended)
- Raspberry Pi OS (Lite or Desktop)
- Docker and Docker Compose
- SSH Access (to run commands)
- Fixed location with good sky view
- Powered USB hub (for stable SDR power)
- LNA (Low Noise Amplifier) for better range
This is the easiest way - perfect for beginners!
# Update system
sudo apt update && sudo apt upgrade -y
# Install Docker
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
# Install Docker Compose
sudo apt install docker-compose -y
# Reboot to apply group changes
sudo rebootcd ~
git clone https://github.com/datboip/easyadsb.git
cd easyadsbchmod +x setup.sh
./setup.shFor first-time setup, the wizard runs automatically:
For returning users, you'll see the management menu:
The script will guide you through:
-
Enter Your Location
- Latitude, longitude, altitude (meters)
- Timezone (e.g.,
America/New_York) - Station name (e.g.,
MyADSB)
-
Configure Ports & Logger
- Dashboard port (default: 8081)
- Flight logger settings (sample rate, retention)
-
Configure Services (All Automatic!)
- β ADSBexchange: Auto-generates UUID
- β ADSB.lol: Auto-generates UUID
- β FlightRadar24: Auto-generates sharing key
- β RadarBox: Auto-generates key + serial
- β FlightAware: Auto-generates PiAware ID
You can skip any service or enter your own keys if you already have them
-
Start Services
- Docker containers are built and started
- Services connect to aggregators
- Dashboard becomes available
Open your browser and go to:
http://YOUR-RASPBERRY-PI-IP:8081
Find your IP:
hostname -I- Recent Aircraft List - Last 10 detected aircraft with flight number, altitude, distance
- Auto-Refresh - Updates every 5 seconds
- Interactive Map - Embedded tar1090 map showing all aircraft
- Aircraft Count - Total aircraft currently visible
- Messages/Second - Data throughput from your receiver
- Max Range - Furthest aircraft detected
- Broadcasting Status - Live indicators for all 6 services
- Direct Links - One-click access to your stats on each platform
- Station IDs - All your UUIDs and keys with copy buttons
- Toggle Switch - Click sun/moon icon in header
- Persistent - Remembers your preference
- Optimized Colors - Perfect contrast in both modes
Light mode is also available for daytime viewing
NEW in v1.2.0! Keep a record of every aircraft you track.
- Saves all aircraft positions to a local SQLite database
- Configurable sample rate (5-60 seconds)
- Auto-cleanup - Keeps last 7/14/30 days or forever
- Export to CSV/JSON - Download your data anytime
- Storage estimates - Know how much space you'll need
The logger section appears in your dashboard with:
- Real-time statistics (positions, aircraft, flights)
- Storage usage bar
- Settings controls (sample rate, retention)
- Export/Clear buttons
During setup, you'll be asked:
Enable flight logging? (Y/n): y
Sample rate:
1) 5 seconds (~200MB/day)
2) 10 seconds (~100MB/day) [recommended]
3) 15 seconds (~70MB/day)
4) 30 seconds (~35MB/day)
Keep data:
1) 7 days
2) 14 days [recommended]
3) 30 days
4) Forever
| Sample Rate | Per Day | 7 Days | 14 Days | 30 Days |
|---|---|---|---|---|
| 5 sec | ~200MB | 1.4GB | 2.8GB | 6GB |
| 10 sec | ~100MB | 700MB | 1.4GB | 3GB |
| 15 sec | ~70MB | 500MB | 1GB | 2GB |
| 30 sec | ~35MB | 250MB | 500MB | 1GB |
Estimates based on ~50 aircraft average. Busy areas = more data.
The logger also provides a REST API:
GET /api/stats - Statistics
GET /api/export - Download CSV
GET /api/export/json - Download JSON
GET /api/flights - Query flights
GET /api/trace/<icao> - Get flight path
POST /api/pause - Pause logging
POST /api/resume - Resume logging
For users who want more control or already have some credentials
If you prefer to set up Docker containers manually instead of using the script:
Copy the example and edit with your details:
cp .env.example .env
nano .envRequired variables:
# Location Settings
FEEDER_TZ=America/New_York
FEEDER_LAT=40.7128
FEEDER_LONG=-74.0060
FEEDER_ALT_M=10
FEEDER_NAME=MyStation
# Service Credentials (generate or use existing)
MULTIFEEDER_UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
ADSBX_UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
FR24KEY=xxxxxxxxxxxxxxxxxx
RADARBOX_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
RADARBOX_SERIAL=EXTRPIXXXXXX
PIAWARE_FEEDER_ID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxADSBexchange:
# Generate UUID
uuidgen
# Use this as ADSBX_UUIDADSB.lol:
# Generate UUID
uuidgen
# Use this as MULTIFEEDER_UUIDFlightRadar24:
# Run temp container to generate key
docker run --rm -it --entrypoint /bin/bash \
ghcr.io/sdr-enthusiasts/docker-flightradar24:latest \
-c "fr24feed --signup"
# Follow prompts, save the sharing key as FR24KEYRadarBox:
# Run temp container to generate key
docker run --rm -it \
-e BEASTHOST=127.0.0.1 \
-e UAT_RECEIVER_HOST=127.0.0.1 \
ghcr.io/sdr-enthusiasts/docker-radarbox:latest
# Watch logs for: "Your new key is: XXXXXXX"
# And: "station serial number: EXTRPIXXXXXX"FlightAware:
# PiAware generates its own ID on first run
# Just start the container and check logs
docker compose up -d piaware
docker compose logs piaware | grep "feeder-id"cat > dashboard-config.js << 'EOF'
window.FEEDER_CONFIG = {
adsbxUUID: "your-adsbx-uuid",
adsbLolUUID: "your-adsblol-uuid",
fr24Key: "your-fr24-key",
radarboxKey: "your-radarbox-key",
radarboxSerial: "your-radarbox-serial",
piawareID: "your-piaware-id"
};
EOF# Start all containers
docker compose up -d
# Check status
docker compose ps
# View logs
docker compose logs -f# Check ultrafeeder is feeding
docker compose logs ultrafeeder | grep -i "connected"
# Check RadarBox connection
docker compose logs radarbox | grep -i "connected\|data sent"
# Check PiAware connection
docker compose logs piaware | grep -i "connection"
# Check FR24 connection
docker compose logs flightradar24 | grep -i "connected"If you already have accounts and credentials:
- Skip auto-generation in setup.sh
- Choose option "Enter manually" for each service
- Paste your existing UUIDs/keys
- Setup will configure everything with your credentials
To update credentials later:
# Edit .env file
nano .env
# Regenerate dashboard config
./setup.sh
# Choose option 6 (View Configuration)
# This will show your current config
# Or manually update dashboard-config.js
nano dashboard-config.js
# Restart services to apply changes
docker compose restartRun ./setup.sh anytime to access the management menu:
1) Restart services (keep config)
2) Reconfigure everything
3) Stop all services
4) View status & logs
5) Backup / Restore
6) Update EasyADSB (pull from GitHub)
7) Uninstall EasyADSB
8) Exit
Choose option 4 to see container status, your station IDs, and logger stats:
Keep your installation up to date:
./setup.sh
# Choose option 7 (Update EasyADSB)What it does:
- Pulls latest code from GitHub
- Backs up your .env file
- Regenerates dashboard config
- Restarts services with new code
- Preserves all your credentials
Remove EasyADSB completely:
./setup.sh
# Choose option 7 (Uninstall)Uninstall options:
- Containers only - Keeps data & config. Good for troubleshooting.
- Containers + flight logs - Clears your logged flight history.
- Containers + all data - Removes graphs, history, and flight logs.
- Complete removal - Fresh start, you'll need to reconfigure.
Complete removal:
cd ~/easyadsb
./setup.sh # Choose option 7, then option 4
cd ..
rm -rf easyadsbRestart all services:
docker compose restartStop all services:
docker compose downStart all services:
docker compose up -dView logs (all):
docker compose logs -fView logs (specific service):
docker compose logs -f ultrafeeder
docker compose logs -f radarbox
docker compose logs -f piaware
docker compose logs -f flightradar24Update to latest images:
docker compose pull
docker compose up -dRestart individual service:
docker compose restart ultrafeeder
docker compose restart radarbox
docker compose restart piaware
docker compose restart flightradar24
docker compose restart dashboard# Check if container is running
docker compose ps dashboard
# Check dashboard logs
docker compose logs dashboard
# Try restarting
docker compose restart dashboard
# Verify port 8081 is accessible
sudo netstat -tulpn | grep 8081# Check if RTL-SDR is detected
lsusb | grep RTL
# Check ultrafeeder logs
docker compose logs ultrafeeder | tail -50
# Verify antenna connection
# Check if SDR is not being used by another process
sudo killall rtl_*
docker compose restart ultrafeeder# Check internet connection
ping -c 4 8.8.8.8
# Check if feeds are configured
docker compose logs ultrafeeder | grep -i "feed"
# Verify .env file
cat .env | grep -v "^#"
# Restart specific service
docker compose restart [service-name]# Check RadarBox logs for serial
docker compose logs radarbox | grep -i "serial"
# If found, run setup to auto-detect it
./setup.sh
# Choose option 1 (Restart Services)
# Script will detect and update serial automatically# Update .env file
nano .env
# Update FEEDER_LAT, FEEDER_LONG, FEEDER_ALT_M
# Restart services
docker compose restart
# Clear browser cache and reload dashboardultrafeeder:
- Main ADS-B decoder and aggregator
- Feeds data to ADSBexchange, ADSB.lol, and FR24
- Runs tar1090 web interface (port 8080)
- Handles MLAT (multilateration)
radarbox:
- Dedicated RadarBox feeder
- Generates own station serial
- Reports stats back to RadarBox
piaware:
- FlightAware feeder
- Auto-generates feeder ID
- Sends data to FlightAware network
flightradar24:
- FR24 dedicated feeder
- Uses sharing key from auto-signup
- Sends data to FR24 network
dashboard:
- Nginx serving dashboard.html
- Available on port 8081
- Static file server (no backend)
- 8080 - tar1090 map (ultrafeeder)
- 8081 - EasyADSB dashboard
- 30005 - Beast output from ultrafeeder
- 30105 - MLAT output
RTL-SDR Dongle
β
ultrafeeder (decodes ADS-B signals)
β
βββ ADSBexchange
βββ ADSB.lol (with MLAT)
βββ FlightRadar24
βββ tar1090 (local map)
radarbox β ultrafeeder (Beast data)
piaware β ultrafeeder (Beast data)
flightradar24 β ultrafeeder (Beast data)
Edit .env file:
nano .envUpdate these values:
FEEDER_LAT=40.7128 # Your latitude
FEEDER_LONG=-74.0060 # Your longitude
FEEDER_ALT_M=10 # Your altitude in meters
FEEDER_TZ=America/New_York # Your timezoneRestart services:
docker compose restartEdit docker-compose.yml and .env to add additional aggregators.
Example ULTRAFEEDER_CONFIG format:
ULTRAFEEDER_CONFIG=adsb,feed.example.com,30004,beast_reduce_plus_out,uuid=YOUR-UUIDIf you have multiple SDRs or need PPM correction:
Edit .env:
ADSB_SDR_SERIAL=00001234 # Serial of your SDR
ADSB_SDR_PPM=0 # PPM correction valueFind your SDR serial:
rtl_testThe dashboard reads from dashboard-config.js. You can edit this file directly or regenerate it using ./setup.sh.
- Antenna Height - Higher is better
- Antenna Type - 1090 MHz optimized (collinear, ground plane)
- LNA - Low noise amplifier between antenna and SDR
- Filter - 1090 MHz SAW filter to reduce interference
- USB Extension - Keep SDR away from Pi to reduce RFI
- Grounding - Proper grounding helps reduce noise
Check your stats regularly:
- ADSBexchange: See your coverage map
- FlightAware: Track your statistics and ranking
- ADSB.lol: View your MLAT contributions
- tar1090: Monitor local reception
FlightAware:
- Go to https://flightaware.com/adsb/piaware/claim
- Enter your PiAware ID (from dashboard)
- Link to your FlightAware account
RadarBox:
- Go to https://www.radarbox.com
- Create account
- Go to "My Stations"
- Enter your station serial (from dashboard)
Easy way (recommended):
./setup.sh
# Choose option 5 (Backup / Restore)Backup options:
- Config only (~1 KB) - Just .env and dashboard-config.js
- Config + flight logs - Includes your flight history database
- Everything - Config, flight logs, graphs, and all feeder data
Backups are saved to your home directory as easyadsb-*.tar.gz
Manual backup:
cp .env .env.backup
cp dashboard-config.js dashboard-config.js.backupFound a bug? Have a feature request? Contributions are welcome!
- Fork the repository
- Create your feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
EasyADSB is built on the shoulders of giants:
- ultrafeeder by sdr-enthusiasts - The amazing all-in-one ADS-B aggregator
- tar1090 by wiedehopf - Beautiful web-based aircraft map
- docker-flightradar24 by sdr-enthusiasts
- docker-piaware by sdr-enthusiasts
- docker-radarbox by sdr-enthusiasts
Special Thanks:
- The sdr-enthusiasts team for their incredible Docker images
- The ADS-B community for sharing knowledge and data
- Flight tracking networks for making aviation data accessible
- Issues: GitHub Issues
- Discussions: GitHub Discussions
If you find EasyADSB useful, please consider giving it a star on GitHub!
Made with β€οΈ by datboip
Happy tracking!







