“Plane/Sailing” is the name given to my home tracker system. It originally supported tracking of aircraft and ships, before expanding to include mobile amateur radio stations, radiosondes, and Meshtastic nodes. It receives ADS-B, AIS, APRS, Radiosonde and LoRA signals via antennas on my house, processes them to share with popular tracking websites, and displays the combined results on a website for the world to see.

If you’d like to see what I’m currently tracking, check out!

Plane Sailing Banner

Build Guide

The links below are to the design & build information in case you are interested or would like to build a similar setup for yourself! All the software is open source, and all the hardware chosen to be as inexpensive as possible.

  1. System Architecture
  2. Antenna & Receiver Choices
  3. Raspberry Pi Setup
  4. ADS-B Receiver Setup
  5. AIS Receiver Setup
  6. APRS Receiver Setup
  7. Plane/Sailing Server Setup
  8. Web Front-End
  9. Electronics Enclosure
  10. Bill of Materials
  11. The Tracking Packet Format FAQ
  12. Plane/Sailing v2 Changes
  13. Plane/Sailing Does the Bournemouth Air Festival!
  14. Adding Radiosonde Support
  15. Adding Meshtastic Support

You may also want to check out this project’s predecessor, my first flight tracker.

Tracking Statistics

Similar Projects


what bout high end desktop computers? 8+ cpu systems should be able to do the work f way ore than raspPi computers right?

Oh, definitely. N7IPB here for example has four RTL-SDR dongles attached to a single PC in order to capture more ADS-B and AIS channels simultaneously. Even a modern Raspberry Pi 4 could cope with two at the same time - the only reason I use two separate RPis is because I wanted to use up the old models I had lying around.

James Blackwell 14 June 2021

This project looks VERY interesting! Would it be possible to add in the ability to listen to Marine VHF channels?

Hi James, thanks for your interest! Unfortunately I can’t add the ability to listen to marine VHF channels for a weird reason - it may be illegal! This is the same reason that sites like LiveATC don’t include air traffic control radio feeds for the UK.

If you’re interested in replicating this for yourself and including the ability to listen to marine VHF, here are some hints that you may wish to use at your discretion…

  1. A standard RTL-SDR has a bandwidth of 2MHz, with AIS channel B up at 162.025 MHz. This means a single RTL-SDR will only be able to hear marine VHF channels over 160MHz. This covers the upper half of the duplex channels but not the lower half, and not the simplex channels such as 16 that you might be interested in. For that, you’d need a second RTL-SDR, or a receiver with a higher bandwidth (e.g. HackRF with 10MHz).

  2. There are a variety of ways of getting SDR audio onto the web. WebSDR is an option but it is closed source and only available to people who make their stream available on itself. YouSDR doesn’t come with any restrictions so may be a better choice, it may a bit tricky to set up but the README does include full instructions. Then there are more “DIY” options such as using a combination of rtl_fm, ezstream, IceCast and rtl_fm_python.

If you have any questions or get stuck I’d be happy to help, but as I say unfortunately I can’t offer this myself as part of Plane/Sailing.

Hey there excellent projecr there’s an easier way to do this save you from renaming serial numbers on rtls etc etc..I had commented and emailed already. Im using a ais hat on my pi with aisdispatcher latest pi image. Plug your flightaware stick/sdr dongle into the same pi’s USB port and install the piaware feeder setup only. Enter the skyaware 1090 config and change the http port so it don’t clash with the aisdispatcher http port. Thats it !!! Ais and adsb on one device Then you can side install your amazing army GUI on top.

Hi there! You may have misunderstood the logic behind changing the RTL-SDR serial numbers - it’s entirely optional, it just helps to keep them organised when you have three of them plugged into a single computer! I’ll update the page to make that clearer. (Of course an AIS hat reduces the number of RTL-SDRs required so that helps too!)

Hi Ian, Yes my apologies I have misunderstood. I’m still learning so please excuse my newbiesness😊OK I thought the changing of serials were to prevent technical/physical conflict. I could not get around this part when setting up gain. When I attached the ais hat it was only a matter of plugging in the dongle and changing the Adsb http config port to 8085 so that it did not interfere with AIS on port 8080. Im wondering if its maybe possible to blacklist the flightaware dongle (it is just an RTL8xxx)and run your webserver frontend also?

I think there may be too much going on to succeed at this though as I’m running separate feeders for a few sites.

Anyway Ian once again excellent work you’ve done here.

Really appreciated Rob MM7BVP

No worries! It’s definitely possible to blacklist the FlightAware dongle if you need to, and since your AIS hat uses different hardware, that will still work. But I am a bit confused as to why you’d do that when you could just unplug it!

It’s definitely possible to run the front end website on the same PC as well. I host mine on GitHub just because it’s easy, but you could equally well run it using nginx on the same PC that runs everything else. Let me know if you’d like me to generate an example config for you.

Hi sir, first of all that’s amazing project I really impressed. I tried to run both server and client side but somehow I got some problems for example I just have AIS log data (.txt format), not antenna etc. So what should I do? I dont have a reveiver source actually. Also 8090 Server port working fine but I should close some of the settings in conf file. How can I getting contact with you for this? I mean at the following stages maybe I need to send to you some screenshots.

Thanks in advance, have a nice day.

Hi Ellen,

The software really is designed to read in live data but it could be adapted to read AIS data from a file. The server’s AISUDPReceiver class is reading from a UDP socket and interpreting the data. You could change this to meet your needs several different ways, for example modifying/replacing this class to load from file instead, or you could use ncat to send the data from your file as UDP messages to avoid modifying the software at all.

There’s an E-mail link at the bottom of every page, feel free to email me if you have any questions and I will do my best to help.

Hello Ian,

I wanna ask something about project for Client side. I wanna run this Client project as offline. How could I do that? I made GeoServer map and put as a map option but this is not my issue. When there is no internet connection, I cant click both Info, Config and Track Table buttons. They all are disable to click. How can I do this client as offline? Thx.

Hi Daniel,

There was a question asked here recently about running the software online - my answer there may help! My guess would be if those buttons aren’t working for you, it’s because your browser can’t download the required JavaScript libraries such as jQuery.

As well as hosting your map offline, you will also have to point all these references in index.html at offline resources rather than those hosted on an online CDN.

Hope that helps!

Again me, hi Ian,

I followed the steps what did you write but unfortunately Im taking some of errors. Probably situation is exactly what you said, browser required JS libraries. Could you please explain the steps that I should follow? In my case,

Im taking map from OSM but close map so there is no internet connection. In your script, I changed map as mine. L is not defined said, when I turn off internet but I download Leaflet Offline as you wrote. To conclude, Im confused and I need your precious explanations. Thanks in advance. By the way, appreciate for your effort.

Kind Regards! Have a perfect day!

You need to download all the files that the Plane/Sailing web interface fetches from CDNs, and serve them locally. There are 12 JavaScript files (lines 19-30 of index.html) and also 3 CSS files (lines 14-16).

So using the first JavaScript file for example, the web UI references You will have to download that jquery-3.4.1.min.js file (e.g. with your web browser or a command-line tool such as wget. Then copy it over to wherever you are serving the Plane/Sailing web interface from, for example you could put it in a new subdirectory called “js”. Then, modify your index.html so that instead of pointing to, it points to js/jquery-3.4.1.min.js.

Repeat for the other 11 JS files, and probably the 3 CSS files as well if you want the UI to look right. Then you should be sorted.

rtl_ais is now outdated and has poor performance/detection. most people now use

for a simple plane/aircraft view on map you can use leaflet and the json output from ais-catcher and adsb

As a side note, is in the process of mapping planes, ships, acars messages weather balloons etc

Thanks for the information! I’ll give AIS-catcher a try and see if it improves performance over rtl_ais.

I don’t think I can feed anything useful to at the moment, unless it starts supporting ADS-B or similar. I would need yet another SDR to start receiving VDL/ACARS data!

another ships list worldwide.

I am just down the coast from you in Gosport, maybe one day if i ever get reverse proxy dynadns etc sorted , you may be able to feed my ais-catcher.

I just wanted to thank you again for the recommendation of AIS-Catcher—I have done some testing and I think I get around 10x as many messages as I did with rtl_ais! Given that I don’t have line of sight to the sea, my expectations were low, but it has genuinely made a huge difference. I have updated the guide to recommend it to others as well.

Hey Ian! I wanna change dat file colums that based on my needs. Dat file parts on TrackTable class but I little bit confused. Also when I change exported dat file to csv, its showing different weird symbols even if its UTF8. May you help me for where dat file created and where did you define?


Are you referring to the “track_data_store.dat” file that the software creates for itself, or the .csv files inside the “data” folder?

“track_data_store.dat” is not a CSV file, so if you just rename it to .csv and try to open it, it won’t go well. This file contains serialised Java objects, so it’s only really useful to the Java program that wrote it, it would be difficult to open it and understand it in other software. It’s handled by the loadFromFile() and saveToFile() methods in TrackTable is the top-level object that gets serialised, so if you add any non-static, non-transient fields to TrackTable or the classes stored in it, they will end up in track_data_store.dat.

Regarding the actual CSVs, these should open fine in a text editor or spreadsheet. These were largely created by hand, although in the source code under the “utils” package, the two classes with names beginning “Import” have Javadoc comments that explain how they can be used to generate two of the CSVs, and where the data comes from.

Hope that helps, let me know if it wasn’t clear or you have any more questions!

Add a Comment