signalk-crows-nest
v0.4.6
Published
Imports Garmin ActiveCaptain, OpenSeaMap, USCG Light List, and NOAA ENC Direct points of interest as Signal K notes resources, with proximity and route-corridor hazard alarms.
Maintainers
Readme
Crow's Nest
A Signal K plugin that imports points of interest from four marine data
sources (Garmin ActiveCaptain, OpenSeaMap, the USCG Light List, and NOAA
ENC Direct), publishes them as Signal K notes resources for chart
plotters like Freeboard-SK, and raises proximity and route-corridor
hazard alarms. Pairs well with sibling plugins such as
signalk-nmea2000-emitter-cannon.
Built on the foundation of
signalk-activecaptain-resourcesby Paul Willems and the Signal K community.
What's New in v0.4.4
A performance and polish release. Chart-load latency on a cold viewport drops from 15-30 s to about 5 s by capping each POI source's list request at a per-source timeout: a slow Overpass or NOAA ENC query no longer holds up the chart while the other sources answer; the slow source's POIs appear on the next chart-plotter refresh once its bbox-debounce cache is populated. The canonical plugin icon (a crimson lookout-in-a-barrel badge over the shared deep-ocean family motif) ships in the same release, alongside a three-agent code-review pass that landed SignalK conformance, correctness, and UI/docs/test cleanup all the way through the nit tier.
See the v0.4.4 changelog entry and the v0.4.4 release. Full release history.
Features
- Point-of-interest overlay as Signal K
notesresources: marinas, anchorages, hazards, businesses, boat ramps, bridges, dams, ferries, inlets, locks, local knowledge, navigational aids, airports, lighted and unlighted aids, daymarks, racons, wrecks, obstructions, and underwater rocks - Four data sources, merged into one chart layer: Garmin ActiveCaptain (the base), OpenSeaMap (OSM marine data via the Overpass API), the USCG Light List of US Aids to Navigation (US-only, opt-in), and NOAA ENC Direct (US authoritative wrecks, obstructions, and rocks, US-only, opt-in). Cross-source duplicates merge into the ActiveCaptain base; the surviving note records every contributing source as a corroboration signal
- Proximity hazard alarms with hysteresis: a Signal K notification fires when a Hazard point comes within a configurable radius and clears once the vessel moves beyond it
- Route-corridor hazard scan: warns about hazards, bridges, and locks on the active Course API route ahead, with along-track distance and ETA
- Rich point detail rendered to HTML, with the source-specific
attribution credit (ODbL for OSM, CC0 for NOAA, US Government public
domain for USCG, Garmin ActiveCaptain for the base) published as a
structured
properties.attributionfield on every note instead of appended inline to the description, so a Signal K client UI can render it in chrome rather than next to the POI text - Persistent, offline cache for ActiveCaptain detail responses; the USCG Light List index is sharded on disk and queried through an in-memory spatial tile index for sub-millisecond bbox lookups
- Per-bbox refresh-debounce cache on every at-runtime source so a Freeboard refresh burst on a stationary viewport reuses the cached result rather than flooding the upstream
- Per-source earliest-year filter for source-specific data
freshness (
SORDATsurvey vintage on NOAA ENC,MODIFIED_DATEon USCG, OSM elementtimestampon OpenSeaMap) - Rating filter on ActiveCaptain to cut clutter on dense charts
- Hazard freshness warning in the popup body for an ActiveCaptain Hazard whose report has not been confirmed in over two years
- React configuration panel with a per-source status bar, a per-source accordion of cards each with a live-status pill, a global Alerts section, and opportunistic dark-mode token support
- TypeScript 6 under strict flags, MIT-licensed, Node 20.3+
Requirements
- Signal K server 2.x with
a position source (a GPS) attached to
vessels.self - Node.js 20.3+
- A chart plotter that consumes Signal K
notesresources, such as Freeboard-SK - The configuration panel needs Signal K admin UI 2.26.0 or newer. On older servers the plugin still works and falls back to the standard settings form
Installation
Install from the Signal K Admin UI under AppStore -> Available, or from npm:
cd ~/.signalk
npm install signalk-crows-nestFrom source:
git clone https://github.com/NearlCrews/signalk-crows-nest.git
cd signalk-crows-nest
npm install
npm run build
ln -s "$(pwd)" ~/.signalk/node_modules/signalk-crows-nestConfiguration
In the Signal K admin UI, open Server -> Plugin Config, find "Crow's Nest", and enable the plugin. The defaults work for an ActiveCaptain-only setup; opt-in to the other sources from their cards. The plugin ships a React config panel that the Signal K admin loads via webpack 5 Module Federation. The panel has these areas:
- Per-source status bar at the top: reachability and last-fetch time for each enabled source, plus any recent errors
- Data sources accordion with one collapsible card per source (ActiveCaptain, OpenSeaMap, USCG Light List, NOAA ENC Direct). Each card's body groups its options into bordered fieldsets: import layers, refresh and freshness, filters (when present), and merge with ActiveCaptain
- Alerts section (collapsed by default, opens automatically when an alarm is enabled): the proximity-alarm and route-corridor scan controls, each in its own fieldset with an opt-in toggle and a numeric setting
Per-source enable toggles live on each card's header, alongside the
disclosure chevron. Each card carries a small live-status pill on the
header (✓ ok for a healthy source, … idle for one that has not
fetched yet, ! error for the last attempt failing); the hover and
screen-reader tooltip carries the longer "N POIs in last fetch, M
minutes ago" detail. Disabled cards show a "Disabled." prefix on their
summary so an off source never reads as live. Every numeric input
clears cleanly mid-edit. Saving applies immediately; the plugin's
internal cache rebuilds on the next request.
Documentation
- Troubleshooting
- Development guide
- Architecture notes: project layout and module map
- Changelog
- Contributing
- Security policy
Compatibility
- Signal K Server: 2.x. The
notesresources and the notifications work on any 2.x server; the configuration panel needs admin UI 2.26.0+ - Node.js: 20.3+
@signalk/server-api: 2.24.0+- TypeScript: 6.0+ (development only)
- Chart plotters: Freeboard-SK is the reference consumer; any
client that reads Signal K
notesresources will see the markers
License
MIT: see LICENSE.
Author
Nearl Crews - author and maintainer.
Acknowledgments
Built on the foundation of signalk-activecaptain-resources
by Paul Willems and the Signal K community. Full credit to the original
author for the initial plugin that imports ActiveCaptain points of
interest and exposes them as Signal K resources.
- Signal K Project for the open marine data standard
- Garmin ActiveCaptain for the community point-of-interest database
- OpenStreetMap contributors and OpenSeaMap for the open marine data, served through the Overpass API and used under the Open Database License
- The US Coast Guard Navigation Center for the Light List of US Aids to Navigation, US Government public domain
- The NOAA Office of Coast Survey for ENC Direct authoritative US chart hazard data, published under CC0
