AIS for Signal K
signalk-aiscast puts worldwide AIS traffic on a Signal K boat that has no AIS receiver, and on the chartplotter already wired to it. It also sends what your receiver hears to aiscast, the Open Waters AIS network, so the water only boats can hear gets covered. One plugin, one connection, both directions, and no account.
Install
In the Signal K admin UI, open App Store → search AIScast → Install, then enable it in Plugin Config. Or from a shell in ~/.signalk:
npm install signalk-aiscastThe defaults are the ones most boats want: share what the receiver hears, and show aiscast traffic only while the receiver hears nothing. Nothing is published until you enable the plugin.
What you get
Traffic without a receiver
No AIS receiver, receiver switched off, or a server running ashore: the plugin subscribes to aiscast around your position and injects what it hears as Signal K targets. Freeboard-SK and every other Signal K app shows them.
Traffic beyond VHF range
A receiver hears to the horizon, roughly 15 to 20 nm from a masthead depending on how high the other vessel's antenna is. Always mode adds aiscast traffic past that, and a locally heard target still wins.
On the plotter you already own
Injected targets go back out as !AIVDM on NMEA 0183, so a Raymarine, B&G, Garmin, or tablet app wired to the server sees them too. No Signal K support needed at the other end.
Buddy boats, anywhere
With the buddylist plugin installed, the boats on your buddy list stay on your chart wherever they are in the world, in every receive mode.
On your chartplotter
This is the part most people do not expect. Signal K apps are not the only thing that can show aiscast traffic: the plugin re-emits every injected target as a plain !AIVDM sentence on the server's NMEA 0183 output. Anything already reading that output — a Raymarine, B&G, or Garmin MFD on the network, OpenCPN, a tablet app on TCP 10110 — draws the targets as if they came from a receiver. The other end needs no Signal K support and no configuration.
A plotter sees a bare sentence and cannot tell a network position from a VHF reception the way a Signal K app can, so two limits keep anything misleading off the wire: only aiscast-sourced targets go out (what your receiver hears already reaches the plotter through its own connection), and only events from the last two minutes. The snapshot replayed on subscribe and the slower upstream aggregates stay in the Signal K data model, where they are timestamped and attributed. That also keeps the replay burst off a 4800-baud serial line.
Buddy boats
Install signalk-buddylist-plugin alongside this one and the boats on your buddy list stay on your chart wherever they are, far beyond VHF range. Add a buddy in Freeboard-SK by tapping a vessel, and this plugin follows that MMSI on aiscast alongside the radius.
Buddies are followed in every receive mode, including Off: following a boat across an ocean is the whole point. The buddylist plugin raises its own proximity alert the moment positions arrive, so the buddy icon, the buddies-only filter, and phone alerts work at any distance.
A buddy only appears when some station or satellite feed hears them. Coastal coverage is good, mid-ocean gaps are real, and the more boats running this plugin the fewer of them there are.
What you share
A boat hears AIS where no shore station can: anchorages behind islands, channels nobody lives on, a coast with no rooftops. That is the coverage a shore network structurally cannot buy, which is why the plugin shares as well as receives.
Every AIS sentence your receiver hears goes to aiscast as it arrives, stamped with the time it was received. Anything heard while the boat is offline waits on disk, up to 100 MB, and replays oldest-first when the connection returns; replayed sentences are archived rather than shown as live. Your own position is a separate checkbox, and so is the fallback that builds position reports from Signal K when there is no transponder. aiscast marks those as self-reported and keeps them out of its onward feed to other aggregators.
What you share is published under the contributor agreement: volunteer receptions are CC0, the aggregate is ODbL, and the agreement says so before the data exists. Contributors also get the deduplicated raw stream back, which no other AIS network offers. The agreement changes only through public pull requests.
Your boat on the map
Sharing your own position gives you something back: your boat gets a page at /ais/vessels/<mmsi>, with where it is, where it has been, and a photo if there is one on Wikimedia Commons. Leave the boat on its mooring and you can open that page from anywhere to see that it is still there.
That is the same open data everyone else gets, which is the point and also the limit worth stating plainly: a transponder already broadcasts your position in the clear over VHF, and this publishes it. If you do not want that, turn the own-ship switches off and the plugin still relays everything else your receiver hears.
Works with
NMEA 0183
Nothing to configure. The plugin reads every !AIVDM sentence the server receives.
NMEA 2000
Nothing extra to install. The plugin re-encodes the AIS PGNs to sentences itself, and ignores signalk-n2kais-to-nmea0183's output rather than looping on it.
A fixed-mount VHF with AIS receive
A Standard Horizon, Icom, or Garmin radio with AIS receive and an NMEA 0183 output already has the receiver, the filtering, and a real marine antenna. An RS422 adapter into the Signal K machine is the whole bridge. Wire it receive-only.
Victron Cerbo GX and Venus OS Large
Signal K ships in Venus OS Large, and the plugin installs from the App Store the same way it does anywhere else. It needs Node 20 or newer.
Freeboard-SK
Injected targets carry $source signalk-aiscast.net and come through the server's own AIS parser, so they are shaped exactly like a VHF reception and need no app changes.
signalk-buddylist-plugin
Optional. It owns the buddy list and the proximity alerts; this plugin only supplies the positions, so the buddy icon, the buddies-only filter, and phone alerts work at any distance.
signalk-vessels-to-ais
Installed? Turn off Send aiscast traffic to NMEA 0183 output, because that plugin converts network-injected targets to 0183 itself.
Settings
| Setting | Default | Meaning |
|---|---|---|
| Share → AIS targets I receive | on | Publish the AIS your receiver hears, from NMEA 0183 or NMEA 2000. |
| Share → My own ship's AIS transponder data | on | Forward what your transponder already broadcasts on VHF. Your position becomes open data on aiscast. |
| Share → Fallback to self-reported AIS position | on | No transponder? Build class B reports from the Signal K position instead, tagged as self-reported. Stays disabled until an MMSI is set in Vessel settings. |
| Receive → Show traffic from aiscast | auto | Off, Auto (only while nothing is heard locally for 90 s), or Always (also beyond VHF range). |
| Receive → Radius | 50 nm | The subscription box around the vessel, 5 to 200 nm. |
| Receive → Send aiscast traffic to NMEA 0183 output | on | Re-emit injected targets as !AIVDM so chartplotters and tablet apps see them. |
FAQ
Do I need an AIS receiver to see AIS in Signal K?
No. Install signalk-aiscast and it subscribes to aiscast around your position, injecting traffic as Signal K targets. A receiver is still better close in — it is realtime, works with no internet, and hears vessels no shore station can — so the default only uses the network while nothing is heard locally.
Does it need an account or an API key?
No. On first start the plugin generates its own Ed25519 keypair and requests its own token. There is nothing to sign up for and nothing to paste. Contributing a receiver lifts the limits automatically, with no application.
Will the traffic show up on my chartplotter?
Yes, if the plotter is already reading NMEA 0183 from the Signal K server. Injected targets are re-emitted as !AIVDM, which the server's TCP 10110 interface relays. Only aiscast-sourced targets, and only events from the last two minutes, go out that way: a plotter sees a bare sentence and cannot tell a network position from a VHF reception, so stale ones stay in Signal K where they are timestamped and attributed. A fresh target can be unnamed on the plotter until its next static retransmission, up to six minutes.
Does it work on a Victron Cerbo GX?
Yes, on Venus OS Large, which ships Signal K. The plugin requires Node 20 or newer.
Do I have to share my own position?
No. Sharing is three separate checkboxes — received targets, your own transponder, and a self-reported fallback — and any of them can be off. The plugin itself ships disabled; enabling it is the consent.
Can I keep feeding AISHub or MarineTraffic?
Yes. aiscast never asks a station to stop feeding anywhere else. Adding it is one more output, not a switch.
Is it free?
Yes, and the plugin is MIT licensed. What you share is published under the aiscast contributor agreement: volunteer receptions are CC0 and the aggregate is ODbL.
Does it replace an AIS transponder?
No. Nothing on the internet makes you visible to the ship that cannot see you. aiscast is a supplement to onboard AIS, never a substitute, and it is a beta with no SLA.
Put your boat on the map
Install the plugin, enable it, and watch the status line in Plugin Config. Coverage questions, antenna advice, and setup problems go to the aiscast discussions.