Skip to content

Releases: jvde-github/AIS-catcher

v0.68

27 Apr 20:44

Choose a tag to compare

v0.68 since v0.67

Fix track polyline drifting ahead of ship marker (incremental merge bug).
Incremental plane updates with ?since= and timeout-based cleanup.
RainViewer: 2 min → 10 min, paused while tab hidden, clouds layer removed.
Fix MMSI key corruption in path JSON.
Fix sticky hover-suppression after map moves.
@filename response files; systemd unit drops the bash -c subshell.

v0.67

27 Apr 11:29

Choose a tag to compare

Version 0.67

New Features

HydraSDR Support

HydraSDR is now a supported input device. See the HydraSDR input page for details.

Duplicate Removal

When combining multiple input streams, overlapping reception can result in duplicate messages. To remove duplicates from output channels, use the unique option. For example, the following removes duplicates from both console and a UDP stream:

AIS-catcher -o 1 unique on -u 127.0.0.1 5012 unique on

In JSON, set the unique key to true (remove duplicates) or false (default). Note that this could come at a performance cost that increases with the number of MMSIs so keep an eye on that.

Downsampling Options

Two additional options, position_interval and own_interval, downsample position messages and VDO messages by limiting each MMSI to at most one update per specified interval (in seconds). Both default to 0 or, equivalent, false (disabled).

Example:

AIS-catcher -u 127.0.0.1 5012 position_interval 30

Alternatively, these options are available in the Visual Web Control interface:

image

Thanks to user Manny for suggesting these options.

Note: These options are intended for users aggregating across multiple receivers to reduce bandwidth, and have not been optimized for large vessel counts.

Serial Device Improvements

  • init_seq now accepts multiple comma-separated commands
  • Fixed init_seq issues on macOS (and Windows buffer flushing during init)
  • Serial devices supporting AIS-catcher format can now relay warning, info, and error messages through the program
  • New flowcontrol option (hardware/software/none) and disable_xonoff switch
  • Serial port opened in non-blocking mode to avoid DTR hang on some adapters
  • New dump_file option to save raw serial bytes for debugging
  • DC16H frame format support

Zones

Support for tailoring routing of messages from receivers to output channels via zones in JSON configuration and Visual Web Control.

Channel Designation (AB/CD)

Channel designation is now configurable via JSON config and is shown in model startup output of the Visual Web Control.

Microsecond Timestamps

rxuxtime field added to JSON_FULL output, providing microsecond-resolution receive timestamps. NMEA 4.0 tag-block timestamps now use microseconds where available.

Reboot Watchdog

A systemd OnFailure watchdog can automatically reboot the host if AIS-catcher stops repeatedly. Configurable burst/interval parameters with a 5-minute grace period after toggling, controlled via the install script.

Output and Configuration

  • Receiver index is now included in output; -v applies to all receivers, -v+ to the last one only
  • webcontrol_http option for the webviewer
  • ssl_verify setting on HTTP outputs to disable TLS certificate verification when needed
  • NMEA 4.0 tag blocks now include the group ID only for multi-line sentences
  • Default repeat for message type 27 is now 3
  • Aliases: rssi/fo for signalpower/ppm; DESC for description
  • Internal settings unified to a key-based API with structured error reporting (SetKey); legacy aliases kept for backward compatibility
  • Community feed restricted to local SDR hardware only

Web Viewer

Vessel Tracks — Major Overhaul

  • Incremental (delta) loading: only new path points are fetched on each update
  • Tracks capped at 250 points per vessel, consistent between "Show Track" and "Show All Tracks"

Multi-Receiver View

A new view in the webviewer lets users see and switch between multiple receivers from a single interface.

Realtime and UI Improvements

  • Realtime NMEA tab now displays the shipname instead of just MMSI
  • Station name passed via plugins.js for immediate tab title display
  • Community feed gained a binary compact endpoint, sprite-sheet icons, and click-to-livemap
  • Dark info panel, darker hover background, fixed truncated SVG flags
  • Fixed RainViewer overlay (CORS and API path), MBTiles import, distance charts, "Show all tracks", strict-mode violations, missing planes sprite, ship-shape highlight stuck on hover
  • Shrunk favicon.ico from 97 KB to 15 KB
  • marked library now bundled (no CDN runtime dependency)

Bug Fixes

  • Signal level charts: fixed extreme values for UDP/TCP sources
  • Static data refreshed correctly when a ship comes back into scope
  • HTTP stats fixed under TLS

Performance

This release contains a substantial performance overhaul of the I/O hot path. Highlights:

  • NMEA parser: zero-alloc split, SWAR scanning, bulk 6-bit decode, line-aware start detection — ~64% fewer instructions
  • JSON parser: zero-copy tokenizer, hand-rolled number parsing, flat open-addressing hash table for key lookup, allocation-free steady-state parsing
  • JSON Writer: replaces legacy JSONBuilder and ad-hoc serializers with a std::string-backed writer; ~5–10% faster on -o 0/3/5/7
  • AIS::Message: SWAR getText/getUint, batched 6-bit payload decode (~7–10% faster on -o 5 / nmea_refresh)
  • Lock-free output: thread-local screen buffers, atomic ByteCounter, DB mutex released before downstream Send cascade (dual -N benchmark: 9.05s → 6.03s)
  • POSIX read() for stdin, single newline flush per message (replacing per-message fflush)

Stability and Networking

  • TCP: try all addrinfo entries, connect timeout for blocking mode, guard repeated stop requests
  • WebSocket/MQTT: handshake fixes, Windows socket check, max frame drop, PUBREL handling, buffer-growth fix
  • Logger: fixed circular buffer and mutex issues
  • GPS: fixed use-after-free and JSON memory issue, warn-once on bad data, scan limits
  • Postgres/N2K: traffic monitoring extended, empty AIS messages handled, filter shadow fixed (settings now apply to the active filter)
  • File input, hybrid config, NMEA RMC parsing, NMEA checksum in -o 6, timer handling for non-frontend models (NMEA, N2K, ADSB, Export)
  • Backup writer wrapped in try/catch with additional diagnostics
  • Compiler-warning cleanup across the tree; spellcheck CI added (typos)

Packaging

  • Debian packages now store HydraSDR and RTL-SDR libraries as DLLs in /usr/lib/AIS-catcher instead of statically linking
  • Switched to debhelper — dh_shlibdeps auto-resolves correct dependencies per distro/arch
  • Fixed several .deb packaging issues (libssl3/t64, ETXTBSY, empty Depends field)
  • Added CI install test covering the full platform matrix
  • New Ubuntu ARM64 and ARMhf packages; RPM packages added; Fedora dropped
  • Frontend libraries bundled via npm/Vite — no CDN dependencies at runtime. Webassets repo is archived
  • Modular CMake dependency management — individual scripts per library
  • Install script: parallelized builds, non-root install option, hardened reboot handling, removed Docker support for i386/armel
  • Copyright extended to 2026

v0.66

13 Dec 16:34

Choose a tag to compare

Version 0.66

  • Improve documentation for configuration via JSON
  • Fix chart colors when running web viewer in iframe on Firefox
  • Technical details of equipment added to shipcard (press information icon in sender field)
  • CS unit for class B is displayed in shipcard of the web viewer if available
  • Serial devices can be initialized with an init sequence
  • Remodelling of realtime NMEA tab with options to filter on MMSI and share NMEA lines with decoder tab for message parsing
  • Option to track NMEA in webviewer for a specific ship or station
  • Shortcut to measure distance between two objects or points is now SHIFT-CLICK to select the first point. This should improve behaviour for devices that cannot distinguish between a left and right mouse click.

v0.65

28 Nov 17:41
e8591ac

Choose a tag to compare

various smaller fixes

v0.64

28 Nov 17:08

Choose a tag to compare

Various updates to improve stability, security and minor bug fixes.

v0.63

23 Nov 10:20

Choose a tag to compare

Enhanced Features

  • Data throughput: significant reduction in data throughput to community hub
  • Online NMEA decoder: Built-in NMEA decoder in the local webviewer
  • Kiosk Mode: Full-screen display mode for dedicated monitoring setups
  • MSGFORMAT Configuration: Flexible output format definitions for customized data presentation. Introduction of msgformat binary_nmea to save on bandwidth
  • Extended Binary Messages: Additional binary message types now decoded and displayed
  • Verbose JSON Output (-o 6): Enhanced JSON format with detailed field descriptions (WIP)
  • Debian Trixie Support: Compatibility with Debian 13 (Trixie)
  • Filesystem-based Map Tiles:
  # Serve map tiles from filesystem
  AIS-catcher -N 8100 FSTILES /path/to/tiles
  # Filesystem overlay maps
  AIS-catcher -N 8100 FSOVERLAY /path/to/overlay

v0.62

15 May 18:37

Choose a tag to compare

ADSB support

AIS-catcher can connect to a ADSB feed over TCP. The plane feed will then be visualized in the WebViewer. To input formats are supported, Beast, e.g,

AIS-catcher -t beast localhost 30003 -N 8100

and BaseStation format:

AIS-catcher -t basestation localhost 30002 -N 81000

Binary Messages

The WebViewer now shows the data coming from selected binary messages. Note that not all regions have these messages.

Offline Maps

Support for offline maps in mbtiles format in the Web Viewer

include an offline map in mbtiles format

AIS-catcher -N 8100 MBTILES map.mbtiles

or as overlay

AIS-catcher -N 8100 MBOVERLAY map.mbtiles

Debian packages now support RTL SDR V4 (the RTL-SDR library is build from source and statically linked into the executable)

v0.61

05 Dec 15:32

Choose a tag to compare

MQTT Integration

  • Publishing Messages

    # Basic MQTT connection
    AIS-catcher -Q mqtt://127.0.0.1:1883
    
    # WebSocket MQTT connection
    AIS-catcher -Q wsmqtt://127.0.0.1:1883
    
    # With message format and topic
    AIS-catcher -Q mqtt://127.0.0.1:1883 admin MSGFORMAT JSON_FULL TOPIC data/ais
    
    # With authentication and client ID
    AIS-catcher -Q mqtt://username:password@127.0.0.1:1883 admin CLIENT aiscatcher
  • Reading Messages

    # Read from MQTT broker
    AIS-catcher -t mqtt://username:password@127.0.0.1:1883

WebSocket Support

  • Text data transmission via WebSockets using ws:// protocol with -t and -Q options

Web Viewer Enhancements

  • Default map view on startup
  • Optimized color scheme
  • Draggable shipcard functionality
  • Smart shipcard positioning near vessels
  • Automatic vessel track display options: On hover and On selection

Additional Updates

  • Server protocol support:
    • SDR data: sdr://127.0.0.1:5555
    • Text over TCP: txt://127.0.0.1:4001
    • GPSD: gpsd://127.0.0.1:4267
    • RTL_TCP: rtltcp://127.0.0.1:4099
    • Raw IQ data: tcp://127.0.0.1:1313
  • NMEA2000 configuration added to JSON settings
  • System daemon restart interval set to 10s

v0.60

10 Aug 15:05

Choose a tag to compare

For Windows users: The AIS-catcher executable is build with the latest Windows MSVC compiler. Please update your library before starting the below executable. Issues have been reported on Windows 10.

  • Option to send fully decoded AIS messages in JSON format via UDP and TCP (similar to screen output with -o 5). Add JSON_FULL on to ~P/S/u.

  • Bug fix for connecting serial devices in macOS

  • Option to select columns in the table (and many more options added):

    image

  • Option to use text description in tables for ship type

  • Overlay in AIS-catcher webviewer that shows possibility of atmospheric ducting conditions enable long range AIS reception

    image

  • Added debian packages and installation script

v0.59

18 May 09:10

Choose a tag to compare

  • Slowly improving the station page for feeders of aiscatcher.org. Color indicates number of stations covering area, opacity is linked to message count of station. To view your station statistics in this way, ensure you feed with a sharing key (UUID)
    Screenshot from 2024-05-02 21-23-24
  • Add a sharing key to -X via aiscatcher.org/addstation which will show the approximate station location in the map overlay and enable, in a few weeks, a station performance tracking dashboard.
  • TAR1090 can now visualize ship positions from AIS-catcher. See for an example here.
  • Additional option for -f-switch to either append NMEA lines to file (-f filename MODE APP for appending - default) or starting fresh with -f filename MODE OUT
  • History for range indicator can now be configured (24 hours default) with new option for 7 and 30 days history

  • Added a measure tool to measure distance and bearing between two points and/or ships. Start with CTRL-Click or activate the measure tool and press +
  • Added vessel count to web viewer title (visible once on the map tab)
  • Fix bug in display of icon for SARTE/EPIRB (red diamond)
  • Additional option for WebViewer to bind server to specific IP address. This allows you to make the browser only visible on the local PC, via -N IP_BIND localhost. By default the webviewer is visible by other machines on the network.
  • Bug fix to range rings in 'imperial' units
  • Webviewer - ships tab has now a filter function to quickly look for a ship. Has also been added to the ship overview in the map tab
  • Option to apply filter functionality (control message routing) to webviewer and added option to filter on station_id
  • '-M DT' set by default UNLESS running with -F (turbo boost mode and no webviewer) or when overwritten with -M