Share your AIS receiver with Open Waters.

Add the vessels you hear to Open Waters AIS. Keep your existing feeds, help fill gaps in coverage, and earn higher limits for reading the network back.

Choose the path that matches where you are starting.

1. What are you running?

Follow one of these paths. You only need a browser-generated token for AIS-catcher, or to name and claim credit for a UDP station.

Before sending, read the contributor agreement. Share your own receiver’s traffic, rather than relaying another network’s feed. Your receptions become public open data. If you forward your own vessel’s position, that position becomes public too.

AIS-catcher

Use MQTT to send each message as your receiver decodes it.

  1. Generate a token, optionally name your station, and copy the token. Leave network-address binding unchecked for this method.
  2. The example below shows AIS-catcher with an Open Waters output. Replace <token> with your token. If you already run AIS-catcher, append the options starting at -Qto your existing command, keeping your receiver settings and other outputs.
AIS-catcher -Q wssmqtt://x:<token>@ais.openwaters.io:443/v1/stream MSGFORMAT NMEA

Keep :443 in the MQTT address: AIS-catcher does not choose that port automatically. MSGFORMAT NMEA_TAGis also supported when you want each reception’s timestamp in a NMEA TAG block.

Save the updated startup command and restart AIS-catcher or its service. Use your existing receiver process; you do not need a second copy competing for the same device.

The token page also gives you a complete command with your token filled in. For an HTTP alternative, use its HTTP output example. Next: check reception.

AIS-catcher output options and network viewer guide: compare MQTT, HTTP, and UDP, or read the network back into a separate viewer.

Signal K

The plugin creates its own token. There is nothing to generate or paste here.

  1. In the Signal K App Store, install signalk-aiscast. Restart Signal K if prompted.
  2. Open Plugin Config and enable the plugin. Keep Share → AIS targets I receive enabled to contribute your receiver’s traffic.
  3. Review the separate own-position switches before saving. Transponder sharing and fallback self-reported position are on by default; turn them off if you do not want to publish your own position.
  4. Save and check the plugin’s status line for the connection state, send rate, and queue depth.

The plugin can also show network traffic in Signal K and on connected chartplotters. This internet feed is not for safety of navigation.

Signal K guide · Plugin settings and troubleshooting · Next: check reception

docker-shipfeeder

Open Waters is built in. The container creates its own station token and feeds in real time over MQTT.

  1. Update to the latest docker-shipfeeder image. If your Compose file pins an older tag, update it to a version that includes Open Waters support, or use the latest tag.
  2. Add the setting below to your shipfeeder service’s environment list. Keep your other feeds enabled.
- OPENWATERS_SHAREDATA=true

If you manage settings through an .env file, set OPENWATERS_SHAREDATA=true there and add OPENWATERS_SHAREDATA=${OPENWATERS_SHAREDATA} to the service’s environment list. Then pull the updated image and recreate the container from your Compose directory:

docker compose pull
docker compose up -d

Keep /data on a persistent volume. The container saves its station key and token in /data/openwater-creds and prints the token in the log on first use. Save it privately if you want to reuse this identity in another deployment. No browser-generated token or UDP address binding is needed for the normal MQTT path.

Already have a station token? Set OPENWATERS_FEEDER_KEY to that token to reuse it; an explicit token takes precedence. If you previously added Open Waters to UDP_FEEDS, remove that destination when enabling the built-in feed so you send only once.

Check the container logs for Open Waters messages. If it cannot obtain a token at startup, it warns and falls back to anonymous UDP. That fallback can send data, but needs UDP address binding to earn contributor credit.

Upstream configuration guide · Next: check reception

Another NMEA forwarder

Use this when your receiver or software can send NMEA sentences over UDP.

Protocol
UDP
Host
udp.ais.openwaters.io
Port
10110
Format
Raw AIS NMEA sentences, such as !AIVDM
Token
Not required to send

Add this as an output destination in your forwarder, save, and apply or restart it. Keep your existing destinations. If you do not want your own position published, exclude own-vessel !AIVDO sentences.

Next: check reception.

2. Check that we’re receiving your data.

  1. Check local reception first. Your receiver should be decoding nearby vessels. A working connection with no local AIS traffic has nothing to send.
  2. Find your station. For token-authenticated AIS-catcher, return to the token page and follow the station link beneath your token. For Signal K, use the key prefix in Plugin Config to help identify your station in the station list. For UDP, look for your bound station name; unclaimed stations use an anonymous identifier, or your MMSI if you send your own position.
  3. Look for fresh activity. As your receiver hears vessels, check your station page’s last-heard time, message counts, and vessels heard. A recent reception is the success check; you do not need to wait for contributor access.

Nothing showing up?

  • No traffic locally: check the receiver and antenna before changing network settings.
  • AIS-catcher: check startup logs for connection or authentication errors. Verify that you replaced the whole <token> placeholder and restarted the process with the new output enabled.
  • Signal K: check that sharing is enabled and inspect the plugin’s link state and queue. A growing queue means receptions are waiting to be delivered.
  • docker-shipfeeder: check that the updated container has Open Waters enabled. Look in its logs for token errors or a warning about falling back to UDP; confirm that /data is writable and persists across container updates.
  • UDP: check the hostname, port, and outbound UDP rules. If your station sends but your token gets no credit, check that you bound the receiver’s public address.

Still stuck? Contact us with your software, public station name or ID, and the error message. Keep your token out of messages and screenshots.

3. Use your contributor access.

Once your station delivers 1,000 messages in a rolling 24 hours that the network had not already heard, your token automatically gets contributor limits: five streams, up to 200 messages a second per stream, any subscribed area, and the raw NMEA feed. UDP traffic must be bound to your token to count.

Use the same token to read the API. Contributor access follows your recent contribution; it lapses as qualifying traffic falls out of the 24-hour window and returns when you qualify again. Full limits and access details.

Already feeding another network? Keep doing so. Open Waters is another destination, and overlapping coverage helps keep the network useful when a receiver goes offline. The contributor threshold counts new messages, so reception alone does not guarantee the higher tier.

Your contribution stays open.

Your individual receptions are dedicated to the public domain under CC0. You can keep using and sharing them, and so can everyone else. Open Waters gets no exclusive rights.

The combined volunteer database is published under ODbL: it can be copied, reused, and redistributed, with attribution and share-alike obligations for publicly used adapted databases. Partner feeds keep their own licenses.

You can stop sending at any time; data already released stays open. Federation lets independently run nodes exchange data. You can read and save the live feed within your token’s limits today; public bulk archive downloads are coming soon.

How the open network works · Read the contributor agreement