Version 0.71
Decoding
- A new decoding engine, v2, is the default — it runs when no model is chosen, after being tested on the edge builds since July. In our tests it decodes between 4% and 10% more messages than the previous default, mostly from weak signals, and uses about 30% less CPU.
-m 2, or engine typev1_base, selects the previous engine. On v2 the settingsAFC_WIDEandPS_EMAare accepted and have no effect, andsensitivity_highno longer selects another engine. - Less CPU at 1536K on 64-bit ARM — downsampling 8-bit input at 1536K, as an RTL-SDR delivers it, is faster on 64-bit ARM machines.
API, assistants and events
- Read API —
/api/v1answers which vessels are around, where a vessel went, who called at a place and what happened lately;/api/v1/openapi.jsondescribes it. A server offers it withapi, open or guarded by keys. See API. - MCP — an assistant such as Claude can ask the station the same questions, through
mcpon a server. - Webhooks — each event is posted to an address as it happens:
-W https://..., or Services → Webhooks in the control panel. See Webhooks. - Home Assistant — AIS-catcher keeps its state on an MQTT broker and Home Assistant finds the sensors by itself:
-W mqtt://..., or Services → Home Assistant. See Home Assistant and MQTT state. - Event history — the ticker has a history button that opens past events in the side table.
HTTPS
- Optional HTTPS — a server with
tls(cert,key), or-N ... TLS_CERT file TLS_KEY file, serves over HTTPS. The control panel takes its own from Settings → System → Access,control.tlsor-E ... TLS_CERT file TLS_KEY file.
Track replay
- Play back vessel movements — the web viewer gained a replay bar: replay received traffic on the map, scrub the timeline, and vary playback speed from 10× up to 3600×. On by default.
- Two settings control the history —
track_timesets how many seconds of tracks and replay the server serves (default 3600, 0 for no limit), andtrack_memorysets the memory budget in KB that stores them: full detail for roughly the last hour, thinned history beyond it. Both are also in the control panel's Viewer settings. - Vessel shapes during replay — vessels that report their dimensions are drawn as hulls turned to their heading, and keep their marker when too small to make out. Track points now also store course, heading and speed.
Built-in control panel
- Configure AIS-catcher from the browser — a new managed mode (
AIS-catcher -E [config file] [address:port]) starts a built-in control panel, by default onhttp://localhost:8118. A setup wizard walks you through input device and output configuration on first use, and the Input and Output tabs let you fine-tune everything afterwards — no config file editing needed. See Managed Mode. - Remote administration with password protection — bind to
0.0.0.0to manage the station from another machine; the panel then requires setting a password on first access. - Managed web viewer — in managed mode the web viewer is started automatically on the port above the control panel (8119 by default).
- Easy install — the install script's new
-M/--managedoption sets up the systemd service in managed mode, and the Windows zip includesstart-GUI.batto launch AIS-catcher with the control panel. - See also the new Quick Start guide on aiscatcher.org — from zero to a running station in six steps.
Database output
- Reworked
-Doutput with three backends — one shared 5-table schema written to PostgreSQL, SQLite (-D sqlite:file.db) or CSV files (-D csv:directory), so a database no longer requires a server. Defaults are bounded — latest state per vessel plus hourly reception statistics — and full position/static history is opt-in. See Database output. - Configurable from the control panel — a new Database output channel with a backend selector, and in the config file a single
dbarray with atypefield.
Installation
- Fedora support — the install script now detects
dnfalongsideapt, so the same one-line command works on Fedora as well as on Debian, Ubuntu and Raspberry Pi OS. Pre-built RPMs are provided for Fedora 43 and 44 (x86_64andaarch64); other releases build from source. - A safer install script — an interrupted installation puts the service back as it was, a package configuration prompt no longer stops it, and the summary says when sharing is on.
- Docker image on Debian trixie — the published image moved from Debian bookworm to trixie (Debian 13), matching the base image the feeder containers that build on top of it already use.
Web viewer
- Refreshed interface — tighter tables, a modern search bar, a redesigned column toolbar on the Ships tab, and smaller map count/measure icons for a cleaner map.
- Redesigned ship card — now split into collapsible sections, with charts of recent speed and reported draught, a scale drawing of the hull marking where the AIS antenna sits, and a timeline of changes to draught, status, name, callsign, destination and ETA (also on
api/changes.json). - Tracks coloured by speed — under Settings → Line Colors, colour tracks by speed instead of ship type, with six palettes and an adjustable scale maximum.
- Vessel filter — narrow the map, the ships table and replay to the vessels you care about: by sender (class A/B, AtoN, base station, SART, aircraft), reported type, speed, distance, navigation status, age of the last message, validation state and whether a repeater passed the message on. Groups can be switched straight from the counters card, which greys out what it is holding back and keeps showing how many vessels that is; everything else lives under Settings → Filter, reachable from the funnel on the map and next to Columns on the Ships tab.
- Position validation by speed — a position is validated when the ship can have reached it from its previous one at no more than 60 knots (aircraft 600), instead of lying within a fixed box around it; a ship that reported itself stopped is also not expected more than 200 m away within a quarter of an hour. A jump is flagged, and the ship is validated again once a second position agrees with it. This is what the validation state in the vessel filter shows.
- Tracks from validated positions only — a jump, a position from a corrupted message or an old one delivered late no longer draws a spike in a vessel's track.
- Vessel type filter covers every class — Class B / pleasure craft got their own entry and "Other / not reported" catches everything without one (aircraft, base stations, AtoN, SART), so selecting Cargo alone hides everything else.
- New map backgrounds — the CARTO backgrounds (Positron, Dark Matter, Voyager) now require an API key from CARTO and show an "API key required" watermark without one, so they are replaced by OpenFreeMap vector maps: Positron, Bright, Liberty and Dark, with label-free versions of Positron and Dark. These need no key and no account, and are sharper at every zoom level. Anyone who prefers CARTO can get a free key at carto.com/basemaps/apikey and paste it into the
carto_basemapsplugin, which brings all six back. - AIS-catcher Light and Dark — map backgrounds of our own on the OpenFreeMap data: borders blended into the land, only countries and large cities in a wide view, towns as you zoom in, and the names of seas, lakes and rivers. Dark is in neutral greys with the sea lighter than the land.
- Chart overlays — nautical chart overlays for Spain, Norway, Finland, Canada and the German and Dutch inland waterways.
- Stations on the ship card — the ship card lists every station that heard the ship, with how long ago.
Places
- A place catalogue — ports, terminals, berths, anchorages, waters, traffic sectors and your own guard zones are now places: GeoJSON files in a directory you point the viewer at with
-N 8100 PLACES /path/to/places. In managed mode the new Places tab switches it on and is the editor: draw and reshape outlines, set the type and the port a place belongs to, search, and paste GeoJSON to import. See Places for the file format and the rules. - Visits — a ship's stay in a place is tracked as a visit, with its entry and exit times. The ship card says where a ship is now, the berth before the terminal before the port, and lists its recent visits. In a port, a stay counts as a call once the ship has been stopped for a minute, so traffic steaming through is not mistaken for a call.
- Ships of a place — clicking a place marker lists the ships Inside, recently Arrived and Left, past Visits, those Nearby, and for a port the ships Expected, from the destinations they report.
- Guard zones in the ticker — draw a guard zone around anything you want to watch. A ship entering or leaving it is announced in the event ticker as a notice, marked with ⚠. Crossings of a port, a sector or a water are announced as routine events.
- No phantom visitors — only a position the ship can have reached from its previous one is used, and a crossing counts once the next position confirms it. A corrupted message with a wrong MMSI never puts a ship in your port.
- Large place catalogues — a place's outline is read from its file when the map asks for it instead of kept in memory, so thousands of places load in less than half the time and take far less memory.
- Sortable vessel lists — a place's window sorts on its column headings, and a scrollbar turns the pages of its vessel lists.
- Coming from an earlier edge build? — place files written before this release use an older layout and are skipped at startup. Import place in the Places tab reads them one at a time and saves them in the current layout;
python3 scripts/migrate-places.py <directory> --writeconverts a whole directory.
Stations
- Each server decides whether it shows where the stations are —
share_locis now a server's setting, Station locations in the control panel. Off, the server gives no station positions and no distances, bearings or range, because a distance tells where a station is; the ships and the station names still show. A station's position can also be None. - A station's marker says how it is doing — green while it receives, grey when it has heard nothing for 15 minutes (the same rule as the
station_quietevent and the health check), and grey with a red edge when every receiver naming it has lost its device; on the station's own map a slow red ring pulses around it then. The station's hover and card say "Quiet since 14:05" or "Receiver down". The orange marker five minutes after the page opened is gone: the state is decided by the station's host and sent to the map only when it changes. - The viewer's GeoJSON copies are gone —
/api/path.geojsonand/api/allpath.geojsonare no longer served by the viewer. Thegeojsonservice answers/geojsonand/allpath.geojsonas before, and/api/v1/vessels/{mmsi}/track?format=geojsongives one vessel's track. - A viewer of some stations is a filter — a server whose filter names stations with
id(-N 8100 filter on id 1001) shows those stations alone, with a ship table of its own that keeps its own backupfile; the stations' names and positions come fromstationsin the configuration file.station_idon a server is refused. See Several stations in one viewer. - The v0.70 ship lists are a switch,
api_v0—/ships.json,/api/ships.json,/api/ships_full.jsonand/stat.jsonstay on for a-Nand aserversection; an entry ofservicesserves them only with"api_v0": true(in managed mode the API v0 line under Serves);limiteddoes not cap them. A configuration the control panel moves from the old viewer orserversection keeps them on. See The ship list for scripts. - Prometheus per input and per output —
/metricsaddsais_input_*(messages, bytes, up, last message, errors, connections) andais_output_*(messages, bytes, dropped, connections) rows, labelled with the input or output, its type and description. See Sending data to Prometheus. - Prometheus signal metrics once per vessel —
ais_msg_ppmandais_msg_levelgive one sample per vessel and channel at each scrape, in place of a line per message.
HTTP output
- Credentials in the URL —
-H https://user:password@host/sends HTTP Basic and-H https://<token>@host/sends a Bearer token, alongside the existinguserpwdsetting. Credentials are kept out of the log and the posted metadata.
Community sharing
- Sharing is opt-in — saying nothing on
-Xno longer enables the community feed; a hint in the log encourages-X onwhen there is something to share. Managed mode is unchanged: the config file created by the control panel enables sharing.
Input
- Secure WebSocket input —
-t wss://host/pathreads NMEA over WebSocket with TLS (port 443 by default), passing the URL's path and query to the server. Credentials in the URL become anAuthorizationheader —user:password@for Basic, a baretoken@for Bearer — or use theusername/passwordsettings;ssl_verify offaccepts self-signed certificates. Reads the Open Waters NMEA stream directly. See Input over TCP.
Network
- A slow server no longer stalls decoding — the MQTT, TCP and community feed outputs and the rtl_tcp input connect and reconnect off the decoding thread, so a broker that is slow or refuses connections cannot make the receiver lose samples.
- Windows checks TLS certificates — the Windows build verifies server certificates against the Windows root store.
AIS messages
- Environmental reports (DAC 1, FID 26) — every sensor report of a message is decoded, not only the first, and a sensor site shows on the map with its water level, weather, air gap, dew point and salinity.
- Inland water levels and bridge clearance — the inland water level message (DAC 200, FID 26) is decoded, and bridge clearances and gauge levels show on the map.
- Time of arrival in nanoseconds — the JSON outputs carry
toa_ns, integer nanoseconds since the epoch, next totoa. - Stricter static data — an IMO number is kept only when its check digit holds and an ENI only when it is well formed, so a corrupted number no longer sticks to a ship.
Devices
- SDRplay RSPduo — tuner selection (
TUNER A/B) and slave mode, so AIS-catcher can run on one tuner while another application uses the other. - SDRplay — no longer crashes or aborts when the SDRplay API v3 service is not running, with more robust device open and antenna validation.
- SDRplay RSP1B and RSPdxR2 — now reported by name instead of as
UNKNOWN. - SDRplay on Windows — pre-built Windows binaries with SDRplay support are no longer published, as the SDRplay API installer can no longer be downloaded from an automated build. v0.70 is the last Windows release that includes them. SDRplay support is unchanged on Linux and macOS, and can still be built from source on Windows.
NMEA 2000
- Correct AIS text over N2K — Aid-to-Navigation names, safety-related text, and vessel name/callsign fields are now encoded correctly when output over NMEA 2000.