Skip to content

Releases: NearlCrews/signalk-binnacle

v0.7.1

17 Jun 17:06

Choose a tag to compare

Packaging fix.

  • The App Store listing no longer shows broken image placeholders in its README view. The README
    carried a screenshots section whose image paths were not part of the published package, so they
    could not load there. The screenshots shown in the App Store carousel were always present and are
    unaffected.

See the changelog for
the full list.

v0.7.0

17 Jun 16:30

Choose a tag to compare

AI route drafting and a routing workflow overhaul.

Highlights:

  • AI route drafting and optimize (beta). Describe a passage in plain language and review a drafted
    route, or optimize a route you drew, when signalk-crows-nest provides the route-draft endpoint.
    Drafts open as an editable working route with a not-chart-verified banner and per-leg land, shallow,
    hazard, and fuel flags, and save only behind an armed "I checked every leg" confirm. It is a beta
    assistant and cannot guarantee accuracy: review every leg against the official charts and your
    instruments before you navigate it. It stays hidden on a server without the endpoint.
  • Route editing on the chart. Waypoints show as dots the moment you draft, optimize, or edit a
    route. Tap a leg to light its segment and end dots, tap a dot to light the legs it joins, drag a dot
    to move it, tap a midpoint to insert one, and start a route from the chart menu.
  • AIS course vectors. Moving AIS targets draw a short course predictor, red for a danger contact
    and amber for a warning.
  • Polish and reliability. A corner-anchored main menu, offline and runtime caching that works
    again in a secure context, antimeridian-crossing routes that frame the short way, fewer false
    collision alerts at anchor, and a cross-slice internal consolidation with no behavior change.

See the changelog for
the full list.

v0.6.2

14 Jun 00:23

Choose a tag to compare

A full-codebase reliability, correctness, and coherence pass, plus a weather-panel layer menu. It
hardens the weather overlays, the caching and history layers, the course and anchor logic, makes a
set of previously silent failures visible, and moves the weather layer toggles into a floating menu.

Changed

  • The weather panel's layer toggles move from the header pill row, which ran out of room and
    truncated, into a single layers menu opened from a floating button at the upper left of the
    mini-map. The button lights and shows a count whenever layers are on, the menu groups the area
    fill and the overlays and carries the source line, and it docks as a bottom sheet on a narrow
    panel so it never covers the small map from the top. The one-tap Here conditions control stays
    in the header.

Fixed

  • Pressure isobars no longer stay blank after the base map style swaps (the offline fallback or a
    style reload): the overlay rebuilds its recreated sources instead of seeing an unchanged grid.
  • The in-memory cache no longer evicts a just-refreshed weather grid or tide entry before older
    ones, so a refreshed view is not dropped early and refetched.
  • A corrupted or legacy profile can no longer render a chart layer transparent or broken: a
    restored opacity is clamped to a valid range, matching first-registration.
  • A malformed history timestamp no longer disables gap-splitting for the rest of a 24 hour track.
  • The Trends panel can tell a present-but-empty history provider from an unreachable one.
  • An active course's route, next, and arrival geometry survives a cross-station activation even
    when the continuously-updating calc values stream in before the one-time hydration completes.
  • A dead data link (the worker failing to load, a rejected connect) shows a "Data link failed,
    reload" indicator instead of sitting forever on a connecting state.
  • One chunk-load failure no longer kills route editing for the rest of the session.
  • A failed track save or delete, a refused anchor drop on a server that advertises the standard
    Anchor API, a failed user chart registration, an empty-and-failed route fetch, and a chart that
    did not sync to the server all surface an error or a log breadcrumb now instead of going silent.
  • The arrival alarm is stopped on teardown, profile sync retries after a transient first failure
    instead of staying local-only for the session, and a unit preset from a previous server is
    cleared when reconnecting to a different one.
  • The layer opacity slider is a full-size touch target again, panel error lines use the shared
    alarm framing, and the chart action menu supports arrow-key navigation.

Internal

  • IndexedDB and local-storage degrades, and an unavailable audible alarm, now log a one-line
    breadcrumb so a field report is diagnosable.
  • Shared cleanups: one safety-button gutter rule, the collision overlay on the shared layer
    helpers, the tracking token on the alarms tag, anonymous access-request fetches, named collision
    threshold constants, a once-computed day paint object, and a dropped redundant per-tick sort.
  • New tests cover the stream connection and worker lifecycle, the unit conversion family, the
    anchor acknowledge escalation, client-computed course VMG and time-to-go, and several boundary
    and error paths the audit found untested.
  • A shared rovingFocus arrow-key action and an overlay-backdrop utility class now back both the
    chart context menu and the new weather layers menu, replacing duplicated handlers and CSS, and
    the chart context menu moved onto the shared Escape dismiss stack. The now-unused scrollEdges
    action was removed.

v0.6.1

13 Jun 00:16

Choose a tag to compare

Quick access from community feedback: the chart actions a navigator reaches for stay within one
or two taps, and the weather panel's layer row scrolls honestly instead of clipping its last pill.

Added

  • Measure from the chart: the long-press and right-click menu gains "Measure from here", arming
    the measure tool with its first point at the pressed position, so measuring starts where you
    are looking instead of via the app menu. Re-arming mid-measurement deliberately starts fresh;
    extending an in-progress measurement is a plain chart tap.
  • A Charts pill on the bottom status strip opens Layers and charts in one tap, beside Center,
    Follow, and Forecast, so switching charts no longer goes through the app menu.

Fixed

  • The weather panel's layer pills no longer render the last label clipped: the edge fade shows
    only while there is actually more to scroll, lifts at the end of the scroll, and the pills
    keep their natural width instead of compressing when the panel narrows, so the row genuinely
    scrolls.
  • The chart context menu sizes itself to its longest label, so its edge-clamp math matches the
    rendered box.
  • Voice control can activate the Charts pill by its visible word, its expanded state is not
    announced while it is still disabled during chart load, and its tooltip says the chart is
    loading while it is.

Internal

  • One armMeasure helper replaces the duplicated reveal-then-arm sequence, new measure tests pin
    the seed-after-arm contract and the deliberate reset on re-arm, and CI test flakes from cold
    ICU loading are prevented by a per-worker warm-up rather than per-test timeouts.

v0.6.0

12 Jun 19:12

Choose a tag to compare

A reliability and correctness pass across the whole app: course following, the collision and anchor
watches, weather, charts, tides, and profiles, with the safety alarms now holding up in a
backgrounded browser tab. Plus: the app menu is a new tile launcher, every readout follows the
server's imperial-or-metric unit preference, and route editing loads on demand.

Added

  • Imperial and metric display units across the whole app, following the Signal K server's unit
    preferences (Server Config, Unit Preferences) with a per-profile local fallback on older
    servers. Depth, anchor distances and radius, MOB range, measured legs, tide heights and station
    range, temperatures, pressure, precipitation, wave heights, and visibility all convert; knots,
    nautical miles, bearings, and the hPa isobar convention stay nautical.

  • The app menu is now a launcher: large icon tiles grouped Navigate, Conditions, Safety, and
    Settings over a dimming scrim, bottom-anchored on phones for one-handed reach, with Forecast
    now findable in the menu. Both alarm mutes moved into a new Alarms panel beside the collision
    thresholds.

  • The measure layer supports opacity like every other overlay, starting Measure re-shows a hidden
    measure layer, the Tides panel cross-links its stations layer with a show-on-chart toggle, and
    layer opacity sliders have a floor so a checked safety layer can never be dimmed invisible.

  • The Terra Draw route editor loads on first use instead of at startup, trimming the initial
    bundle by about 137 kB for faster cold loads on Pi-class displays.

  • Standard waypoints: drop one from a long press on the chart, see them as named markers, and
    locate, go to, rename, or delete them from the new Waypoints panel. They live in the server's
    own waypoint resources, so they interoperate with Freeboard-SK and every other client.

  • An Active alerts list in the Alarms panel: every notification on the boat (engine, NMEA2000,
    autopilot, or any plugin) surfaces with severity, time, and one-tap Silence and Acknowledge
    that propagate to every station on a 2.28 server.

  • Collision and MOB alerts ride the server's v2 Notifications API when available (server-managed
    ids; muting locally silences the boat-wide alert), with the v1 delta publish kept for older
    servers. Server capabilities are detected once from the features endpoint.

  • The anchor watch speaks the standard Anchor API the moment a server ships it (the proposal's
    drop, raise, radius, and reposition routes, feature-detected), ahead of the existing
    anchoralarm-plugin path and the client-local watch.

  • Custom chart symbols from the signalk-symbol-manager plugin: a note whose icon reference
    resolves to a managed symbol renders that symbol (scale and anchor honored), and a provided
    "waypoint" symbol replaces the built-in waypoint marker. At night-red, user artwork is remapped
    into the red band so the theme's no-color rule holds. Without the plugin, every icon stays
    built-in.

  • Worldwide tides through the signalk-tides plugin when the server runs it (NOAA, Neaps,
    WorldTides, or StormGlass per its configuration), with the NOAA CO-OPS path unchanged as the
    fallback; the Tides panel says which source served.

  • AIS target trails from the tracks plugin: faded wakes behind moving targets, themed for all
    three themes, fetched only when the plugin is present and the layer is visible.

  • Offline charts that actually work: PMTiles archives are cached as blocks in browser storage at
    the protocol layer, so previously viewed chart areas render offline in every context, including
    the plain-http default where no service worker can run (the old service-worker chart cache
    provably never stored anything: range responses cannot enter the Cache API). Plugin-served
    raster chart tiles, the seamark, bathymetry, boundary, and ice overlays, the base-map style,
    and CO-OPS predictions gain service-worker caching over https, with per-cache bounds and quota
    protection; opaque cross-origin responses are no longer cached (each one padded several MB of
    quota).

  • Tide stations and predictions, chart notes, and the vessel conditions panel now persist in
    browser storage, so a reload with no signal replays the last data for the area, each item
    declaring its own age, over plain http as well as https.

  • When the base map style itself is unreachable (plain http at sea with no internet), the map
    starts on a minimal water-colored fallback instead of staying blank, so cached charts and
    every overlay still load. The real base map returns on the next load with connectivity.

  • A Trends panel: depth, apparent wind, barometric pressure, and speed over the last 24 hours
    as themed graphs, served by the server's v2 History API when a history provider runs
    (signalk-questdb, signalk-to-influxdb2, or signalk-parquet), with provider fallback when the
    default provider has no data. Without one, the graphs show the current session, sampled live.

  • A "Track history (24 h)" chart layer: the vessel's server-recorded last day as a dashed line
    under the live track, gap-split across stops, opt-in from the Layers panel and only queried
    while shown.

Removed

  • The browser-local PMTiles file upload. Chart files belong on the server: install the
    signalk-pmtiles-plugin and drop .pmtiles files in its charts folder, and they appear in
    Binnacle on every device automatically. Adding a chart by URL is unchanged and still syncs to
    the server. Previously uploaded browser-local charts are dropped cleanly at upgrade.

Changed

  • Delta batching in the stream worker now runs on a timer instead of requestAnimationFrame, and
    AIS staleness pruning runs on a wall clock instead of the render loop, so live data keeps
    flowing and the collision and anchor alarms keep evaluating while the tab is hidden.
  • An AIS target that stops reporting is now dropped after seven minutes, so anchored traffic with
    a slow AIS refresh no longer flickers in and out of the target list.
  • Track recording no longer accumulates points while the boat sits at anchor: session gaps are
    detected from fix continuity, not motion.
  • Cancelling MOB and raising the anchor are now two-tap confirms, and deleting a profile or a
    saved track asks first, matching the route delete.
  • Escape handling is one shared topmost stack across the panels, the menu, and the measure tool,
    so Escape always closes the surface on top and never one underneath.
  • Layer drag-to-reorder now stays within the layer's own category instead of crossing into the
    next section.
  • Opening the Tides panel on a cold start is faster: the tide predictions and the current-station
    lookup now fetch concurrently instead of back to back.

Fixed

  • Editing a route no longer strips its waypoint names.
  • The nav strip no longer shows the next waypoint's arrival time as the whole-route ETA.
  • An active course now survives a page reload: the course state hydrates on first connect, and
    the route's Active badge tracks the server, including courses started or cleared from another
    station.
  • Arrival no longer re-alarms from GPS jitter at the arrival circle; the alarm latches until the
    boat clearly leaves the circle.
  • A failed waypoint skip and a partially failed GPX import are now reported instead of passing
    silently.
  • At night-red the own vessel, the AIS targets, and the note icons are no longer hidden along
    with the base map's sprite icons.
  • An acknowledged collision alert re-arms once the situation clears, and a contact's severity
    downgrade has hysteresis, so the alarm can neither stay silently dismissed nor flap between
    danger and warning.
  • A target reporting speed without a course is no longer modeled as steaming due north, and
    contacts with provider-supplied CPA keep classifying during an own-fix dropout.
  • The anchor watch announces a degraded state when GPS is lost, and an anchor-marker drag the
    system cancels no longer silently relocates the anchor.
  • The MOB strip dashes out bearing and range on a stale fix instead of presenting frozen numbers
    as live.
  • Wind particle colors now match the legend's absolute scale.
  • Radar frames refetch on schedule: the cache no longer extends its own expiry on every read.
  • A partial forecast no longer stretches stale wave pixels over a new viewport, and overlapping
    forecast loads can no longer finish out of order.
  • The conditions panel's forecast section falls back to the free grid when a provider returns an
    empty series, and the weather panel's clock notes stay live during a long open.
  • Deleting a user chart no longer leaves it in the persisted layer state, and renaming one
    updates its Layers row and its server resource.
  • Tide times are correct when the browser's time zone differs from the station's (predictions
    are now requested in GMT), tide data refetches after midnight at anchor, and the on-chart tide
    label no longer shows past events.
  • Tide fetches are skipped entirely while nothing displays them.
  • Note markers recover after a failed or superseded fetch instead of freezing until reload.
  • A transient network failure at startup no longer wipes the stored auth token, and a failed
    access request retries instead of hanging at "Requesting access".
  • Profiles no longer show "unsaved changes" on every launch, deleting all profiles no longer
    resurrects the starter profiles, and a synced device no longer marks a profile active without
    applying it. A failed profile import shows an error.
  • A refused alarm Silence or Acknowledge now shows an error in the Alarms panel instead of the
    alarm just continuing to sound, and a collision alert whose server notification was cleared
    from another station is re-raised instead of going silent.
  • Cleared notifications no longer linger in the Active alerts list, and an unchanged
    notification broadcast no longer re-renders the panel.
  • AIS wakes now clear after a few minutes of failed refreshes instead of freezing in p...
Read more

0.5.0

11 Jun 17:38

Choose a tag to compare

A safety-focused redesign of the man-overboard confirm, a broad weather-panel upgrade, and a new app icon.

Man overboard

Pressing MOB now opens a centered confirm dialog. The position is captured the instant you press, so the seconds spent confirming no longer carry the mark away from the person; one full-width Mark man overboard button sits in the thumb zone with a quiet Cancel above it, the dialog self-dismisses after 15 seconds with a visible countdown, and without a GPS fix the boat-wide alarm still raises, position-less. The recovery strip adds the wall-clock Marked time for the log and the VHF relay.

Weather

  • The forecast slider opens at the step nearest now (it used to open up to a day in the past), with a now tick on the track and Past/Forecast labels carrying the time zone.
  • More decision data: gusts without a provider, barometric tendency ("falling 1.2 hPa/3 h"), wave and swell direction, visibility, and water temperature, each reading tagged Observed or Forecast with its valid time.
  • Provenance: a footer states the source and fetch time, stale forecasts say how old they are, and missing wave fields are called out.
  • Radar honesty: the legend names the frame being painted, nowcast frames are labeled, offline radar is flagged as cached, and the radar hides while the slider is away from now.
  • Conditions track the slider with a provider configured and fall back to the free grid on failure; warnings sort most severe first with source and validity window.
  • Fixes: the tap readout now blends forecast steps exactly as the drawn fields do, provider detection recovers from a failed first probe, observations are picked by date, a rate-limited waves endpoint no longer blocks the wind fetch, and the course strip no longer covers the panel footer.
  • Accessibility: the slider announces real times, time changes are announced, the floating notes are reliable live regions, scrubbing stops playback, Enter samples the map center, and the tap readout can be pinned and dismissed.

Appearance

A new app icon aligned with the plugin family (a compass rose on a white compass-card badge), and the map attribution bar now follows the theme instead of glowing white at night.

Full details in the changelog.

0.4.0

10 Jun 20:28

Choose a tag to compare

Four new at-sea features, built for the watchkeeper, plus shell refinements.

Added

  • Anchor watch. Drop the anchor at the boat, set the swing radius by hand or capture it from the live distance plus a margin, and get a drag alarm after three consecutive fixes outside the circle. The alarm latches until acknowledged, so a boat that swings back inside cannot silently clear an alarm you never saw, and the watch survives a reload. When the signalk-anchoralarm-plugin is installed, Binnacle drives it instead, so the alarm keeps running with the browser closed. On the chart: the swing circle, a rode line, and a draggable drop-point marker.
  • Man overboard. An always-visible MOB button centered in the top bar. One tap pops out a large confirm (a stray tap can never raise the alarm); confirming marks the spot, publishes the boat-wide notifications.mob alarm so every station sees it, flies the chart to the mark, and raises a recovery strip with live bearing, range, and elapsed time. Steering to the mark stays a deliberate second tap through the course system, never automatic. An MOB raised by another station shows here too.
  • Measure tool. Arm it from the menu, tap points on the chart, and read each leg's range and bearing plus the running total, labeled at the last point.
  • AIS target list. Every tracked target as a tappable card with name or MMSI, live range and bearing, SOG, and CPA and TCPA when available, sortable by range, CPA, or name, with risky contacts colored by the lookout.
  • A depth readout in the anchor panel when a sounder publishes environment.depth.belowTransducer.

Changed

  • The footer's "Connected" text is now a compact status dot (green by day and dusk, a calm dim red in night-red, the caution color while the stream is down), and the footer readouts share one instrument size.
  • The four feature alarms share one edge-triggered core, with the collision alarm keeping its escalation-overrides-mute policy; each alarm remains audibly distinct.

Fixed

  • The MOB trigger's boat-wide notification never actually left the browser (a reactive proxy cannot be structured-cloned into the stream worker, so the publish threw and was lost). The mark is now snapshotted into a plain object, with a regression test, and the round trip is verified against a live server.

See the changelog for the full list.

Binnacle 0.3.0

09 Jun 22:08

Choose a tag to compare

Profiles, richer routing, and passage planning.

  • Profiles. Save named bundles of your settings (theme, which layers are on and their order, the weather layers, the collision thresholds, and the track and planning settings), switch between them in one tap, set a default, export and import them as files, and sync them across devices through a secured server.
  • Tap to navigate. Long-press or right-click the chart and choose Go to here to navigate straight to a point over the Course API.
  • GPX import and export. Move routes between Binnacle and other plotters and MFDs.
  • Passage planning. A plan speed turns the route's leg table into per-waypoint and whole-route arrival times.
  • Track-to-route. Save the current track as a route, reverse a route for the return leg, navigate home by retracing your track, and skip the active waypoint forward or back from the nav strip.
  • Fixes. Importing a malformed GPX no longer aborts the import, the Routes opacity slider now dims the waypoint labels with the rest of the route, and the waypoint-skip buttons are a full touch target.

See the changelog for the full list, including the modularization and whole-repo cleanup work.

Binnacle 0.2.1

09 Jun 12:45

Choose a tag to compare

A reliability and cleanup patch over 0.2.0.

Fixed

  • Points of interest no longer flicker. A slow or rate-limited provider response could blank the markers; a failed fetch now keeps them on screen, and the overlay caches fetched sets by area so panning and zooming reuse a recent fetch.
  • Marine warnings (gale, storm, small-craft) stay on the conditions panel through a transient weather-provider hiccup instead of flickering off.
  • An active route re-hydrates after a stream reconnect instead of freezing on stale guidance: the v2 course data is re-fetched, since resubscribing cannot redeliver it under subscribe=none.
  • Server charts no longer blank on a transient failure at map load.
  • Orphaned imported-chart storage is reclaimed at startup (a PMTiles blob left by a failed save or a degraded delete).
  • A hidden Points-of-interest layer now does no network or rendering work until shown again.
  • Silenced the base-map "styleimagemissing" console warnings.

Internal

  • Bounded the note-detail and persistent weather-grid caches, and ran a six-lane whole-codebase cleanup.

See the changelog for the full list.

Binnacle 0.2.0

08 Jun 23:30

Choose a tag to compare

Added

  • Tides (US waters): the nearest NOAA station's next high and low, a 48-hour curve with a "now" marker, and the nearest tidal-current station's next flood or ebb.
  • Free, key-free chart overlays: OpenSeaMap seamarks, marine protected areas (EMODnet with Natura 2000, and the NOAA MPA Inventory), maritime boundaries (territorial sea and jurisdiction lines), and NASA GIBS ocean conditions (sea-surface temperature and sea ice).
  • A review step when importing a chart, plus server-side registration of URL-imported charts so other devices on the same server discover them.

Changed

  • The Layers panel is reorganized into collapsible categories with a better default order (US charts on top).
  • Each depth source splits into a base chart and a nested survey-quality facet (ZOC, quality index, or uncertainty).

Fixed

  • Imported charts now take a dark theme immediately, the tides session cache rolls over on the local day, and deleting a user-imported chart now actually removes it.

A whole-codebase cleanup pass also landed. See the changelog for the full list.