Skip to content

Releases: SignalK/signalk-server

v2.26.0

25 Apr 18:47

Choose a tag to compare

🚀 Features

  • fix(security): remove per-message token override in WebSocket handler
  • feat: Plugin Testsuite as Developer CI Workflow
  • perf(streams): lazy-load N2K dependencies
  • feat(admin-ui): createDevice checkbox for Yacht Devices gateways
  • ⏺ feat(unitpreferences): auto-assign category from base unit with per-user primary disambiguation
  • perf(backpressure): cache getBufferLength across send and assertBufferSize
  • perf(pipedproviders): collapse DevNull + data listener into one Writable

🐛 Fixes

  • fix(admin-ui): restore logo loading broken by Vite 8 upgrade
  • fix(streams): use event-based reconnection in mdns-ws provider
  • fix(oidc): validate config eagerly at startup to prevent auth bypass
  • fix(admin-ui): restore N2K provider filter editing

📦 Uncategorized

  • chore(deps): bump mathjs to ^15.2.0 (GHSA-jvff-x2qm-6286) (#71)
  • chore: bump @signalk/nmea0183-utilities to ^1.0.0
  • fix(hot-fix): Pin Vite version 8.0.8
  • refactor(interfaces): migrate nmea-tcp to TypeScript
  • chore(server-admin-ui): restore Vite 8 build

v2.25.0

19 Apr 06:49
9fec95f

Choose a tag to compare

🚀 Features

  • feat: add DISABLE_SECURITY_ACTIVATION environment variable
  • Use 2048-bit key for self-signed SSL certificates
  • feat: add conversion formulas to active preset and bulk metadata endpoint
  • feat: add custom unit support for per-path display unit override
  • Add unit category to performance paths
  • feat: add AsyncAPI docs for WebSocket delta APIs
  • Add input filtering for SeaTalk1 connections
  • feat(security): add disable/restore security from Admin UI
  • feat(tcp): guard against send buffer overflow in TCP connections
  • fix(admin-ui): redesign plugin config page layout
  • Radar API refactored
  • Feat: Add config & data preservation option to plugin removal
  • feat(ws): limit concurrent WebSocket connections per IP
  • feat: add environment variable TRUST_PROXY
  • Improve logging when auth cookies are cleared
  • perf(deltacache): string-compare ISO 8601 timestamps when sorting
  • perf: use structuredClone for metadata deep clones
  • perf: short-circuit eager JSON.stringify in debug calls
  • chore(logging): log full error objects to capture stack traces
  • feat(admin-ui): support ESM module federation containers
  • feat: include app-dock by default

🐛 Fixes

  • fix(streams): set provider error status on tcp disconnect
  • fix: sourcepriorities in admin ui not populating
  • fix(streams): improve gpsd connection handling , add connection timeout
  • fix(security): include timeToLive in login responses
  • fix(interfaces): convert NMEA0183PORT env var to number for mDNS
  • fix: prevent context prefix from contaminating meta PUT path
  • refactor(settings): defer in-memory mutation until after persist
  • fix(plugins): clean up leftover files after plugin uninstall
  • fix(security): add rate limiting to WebSocket login endpoint
  • fix: parse websocket PUT responses before matching requestId
  • Fix ReDoS vulnerability in chart tile route regex
  • fix: move anchor unit category to length
  • fix: reject deltas with invalid values entries
  • fix(streams): silence gpiod-seatalk noise via # comment convention
  • fix: suppress missing security.json warning on fresh install
  • Resources Provider: Fix the test for resource being within a specified distance from a position
  • fix(oidc): add redirectUri field to admin GUI and fix ENV validation
  • fix(oidc): persist user identity metadata to security.json

📦 Uncategorized

  • test(history): add tests for History API v2 endpoints
  • chore: add tests for login over websocket
  • refactor(interfaces): migrate providers to TypeScript
  • fix(admin-ui): resolve circular dependency in server-admin-ui
  • chore(admin-ui): upgrade to Vite 8
  • chore(deps): bump docker/login-action from 3 to 4
  • chore(deps): bump docker/metadata-action from 5 to 6
  • chore(deps): bump docker/setup-buildx-action from 3 to 4
  • chore(deps): bump docker/build-push-action from 6 to 7
  • docs(agents): add performance guidance for the hot path
  • chore(deps): bump @signalk/nmea0183-utilities to ^0.12.0 in streams
  • docs(oidc): fix auto-login bypass parameter

v2.24.0

26 Mar 18:29
494baed

Choose a tag to compare

🚀 Features

  • chore: update default Node.js from 22 to 24
  • feat: upgrade baconjs from v1.0.1 to v3.0
  • feature: default allow_readonly to false when security is enabled
  • fix(streams): set default TCP idle timeout to 60 seconds
  • Add EXTERNALSSL env var for proxy-terminated TLS
  • feat: Authenticate WebSocket provider connections to secured remote servers
  • feat: make server-admin-ui-react19 the main server-admin-ui
  • feat(plugins): isolate plugin crashes from server process
  • feat(appstore): show update-disabled plugins in admin UI
  • fix(admin-ui): warn about disk space when enabling data logging
  • fix(streams): fetch remote metadata on demand via HTTP
  • feat(admin-ui): R19 Show node/npm version and compatibility warnings in admin UI footer
  • fix: extend atomic writes to all config file saves
  • refactor(history): add HistoryProvider type and HistoryProviderRegistry

🐛 Fixes

  • fix(streams): handle serial port write backpressure correctly
  • fix(course): use courseApi provider id for v2 deltas
  • fix(udp): report connection status to dashboard
  • fix(settings): correct mDNS default status in admin UI
  • fix(admin-ui): encode connection ID in provider API URLs
  • fix(rest): serve snapshot at spec-compliant path /signalk/v1/snapshot
  • fix(appstore): handle invalid semver versions gracefully
  • fix(admin-ui): bridge legacy React plugins in React 19 admin UI
  • fix(security): make token expiration "NEVER" case-insensitive
  • fix(meta): prevent deleted metadata fields from reappearing
  • fix(admin-ui): use separate R16 share scope for legacy plugin bridge
  • fix: persist unit preferences in config directory instead of package directory
  • fix: Validate permissions in device access requests
  • feat(security): add sliding session token refresh
  • fix(resources): return 404 for nonexistent resource ID
  • fix(security): require admin auth for config mutation endpoints
  • fix(security): add auth middleware for v2 API endpoints
  • fix(demo): enable security with readonly access for demo.signalk.org
  • fix(admin-ui): preserve enabled state when editing data connections
  • fix(security): validate from field in JSON patch prototype pollution guard
  • fix(subscriptions): coerce period and minPeriod to number

📦 Uncategorized

  • Replace express-easy-zip with archiver to fix glob deprecation
  • chore(deps): remove unused fix and express-namespace
  • fix: Deduplicate geolib to single version
  • Replace heavy dependencies in signalk-server-setup with lighter alternatives
  • feature: add TypeBox schemas for OpenApi data objects
  • test(security): add auth tests for config and v2 API endpoints

v2.24.0-beta.4

25 Mar 06:03
b6e8bcd

Choose a tag to compare

v2.24.0-beta.4 Pre-release
Pre-release

🚀 Features

  • feature: bring back Simple Line Icons
  • feat: rename server-admin-ui-react19 to server-admin-ui
  • feat(plugins): isolate plugin crashes from server process
  • feat(appstore): show update-disabled plugins in admin UI
  • fix(admin-ui): warn about disk space when enabling data logging
  • fix(streams): fetch remote metadata on demand via HTTP
  • feat(admin-ui): R19 Show node/npm version and compatibility warnings in admin UI footer
  • chore: update default Node.js from 22 to 24
  • chore: docker image build upgrades, Node 22 to 24
  • feature: default allow_readonly to false when security is enabled
  • fix(streams): set default TCP idle timeout to 60 seconds
  • fix: extend atomic writes to all config file saves
  • refactor(history): add HistoryProvider type and HistoryProviderRegistry
  • Add EXTERNALSSL env var for proxy-terminated TLS

🐛 Fixes

  • fix(course): use courseApi provider id for v2 deltas
  • fix(udp): report connection status to dashboard
  • fix(settings): correct mDNS default status in admin UI
  • fix(admin-ui): encode connection ID in provider API URLs
  • fix(streams): handle serial port write backpressure correctly
  • fix(rest): serve snapshot at spec-compliant path /signalk/v1/snapshot
  • fix(appstore): handle invalid semver versions gracefully
  • fix(admin-ui): bridge legacy React plugins in React 19 admin UI
  • fix(security): make token expiration "NEVER" case-insensitive
  • fix(meta): prevent deleted metadata fields from reappearing
  • fix(admin-ui): use separate R16 share scope for legacy plugin bridge
  • fix: resolve baconjs version mismatch between server and plugins
  • fix: persist unit preferences in config directory instead of package directory
  • fix: Validate permissions in device access requests
  • feat(security): add sliding session token refresh
  • fix(resources): return 404 for nonexistent resource ID
  • fix(security): require admin auth for config mutation endpoints
  • fix(security): add auth middleware for v2 API endpoints
  • fix(demo): enable security with readonly access for demo.signalk.org
  • fix(admin-ui): preserve enabled state when editing data connections

📦 Uncategorized

  • chore(deps): bump aquasecurity/trivy-action from 0.34.0 to 0.35.0
  • Replace express-easy-zip with archiver to fix glob deprecation
  • chore(deps): remove unused fix and express-namespace
  • doc: tweak unitprefs docs
  • fix: Deduplicate geolib to single version
  • Replace heavy dependencies in signalk-server-setup with lighter alternatives
  • fix(lint): disable @typescript-eslint/no-unused-expressions in test files
  • feature: add TypeBox schemas for OpenApi data objects
  • fix(admin-ui): unpin @module-federation/vite version
  • test(security): add auth tests for config and v2 API endpoints
  • fix(chore): gitignore debug remember-me artifacts in test configs

v2.24.0-beta.3

23 Mar 21:11
44bc530

Choose a tag to compare

v2.24.0-beta.3 Pre-release
Pre-release

🚀 Features

  • feature: bring back Simple Line Icons
  • feat: rename server-admin-ui-react19 to server-admin-ui
  • feat(plugins): isolate plugin crashes from server process
  • feat(appstore): show update-disabled plugins in admin UI
  • fix(admin-ui): warn about disk space when enabling data logging
  • fix(streams): fetch remote metadata on demand via HTTP
  • feat(admin-ui): R19 Show node/npm version and compatibility warnings in admin UI footer
  • chore: update default Node.js from 22 to 24
  • chore: docker image build upgrades, Node 22 to 24
  • feature: default allow_readonly to false when security is enabled
  • fix(streams): set default TCP idle timeout to 60 seconds
  • fix: extend atomic writes to all config file saves
  • refactor(history): add HistoryProvider type and HistoryProviderRegistry
  • Add EXTERNALSSL env var for proxy-terminated TLS

🐛 Fixes

  • fix(course): use courseApi provider id for v2 deltas
  • fix(udp): report connection status to dashboard
  • fix(settings): correct mDNS default status in admin UI
  • fix(admin-ui): encode connection ID in provider API URLs
  • fix(streams): handle serial port write backpressure correctly
  • fix(rest): serve snapshot at spec-compliant path /signalk/v1/snapshot
  • fix(appstore): handle invalid semver versions gracefully
  • fix(admin-ui): bridge legacy React plugins in React 19 admin UI
  • fix(security): make token expiration "NEVER" case-insensitive
  • fix(meta): prevent deleted metadata fields from reappearing
  • fix(admin-ui): use separate R16 share scope for legacy plugin bridge
  • fix: resolve baconjs version mismatch between server and plugins
  • fix: persist unit preferences in config directory instead of package directory
  • fix: Validate permissions in device access requests
  • feat(security): add sliding session token refresh
  • fix(resources): return 404 for nonexistent resource ID
  • fix(security): require admin auth for config mutation endpoints
  • fix(security): add auth middleware for v2 API endpoints

📦 Uncategorized

  • chore(deps): bump aquasecurity/trivy-action from 0.34.0 to 0.34.1
  • Replace express-easy-zip with archiver to fix glob deprecation
  • chore(deps): remove unused fix and express-namespace
  • doc: tweak unitprefs docs
  • fix: Deduplicate geolib to single version
  • Replace heavy dependencies in signalk-server-setup with lighter alternatives
  • fix(lint): disable @typescript-eslint/no-unused-expressions in test files
  • feature: add TypeBox schemas for OpenApi data objects
  • fix(admin-ui): unpin @module-federation/vite version
  • test(security): add auth tests for config and v2 API endpoints

v2.23.0

12 Mar 17:14
62063c1

Choose a tag to compare

🚀 Features

  • feat: surface pre-release versions in appstore
  • feat: add "All" context option to data browser
  • feat: add showcase banner to React 19 admin UI header
  • Implementing display units system in metadata
  • fix(ui): replace unit preferences pill buttons with dropdown select R19
  • feat: add native WebSocket ping/pong heartbeat for stale connection cleanup
  • feat(history): add multi-provider support to History API
  • feat: track and display device token expiry in admin UI
  • feat: R19 Data Browser multi-term OR search
  • fix: filter version list in R19 app store versions modal
  • feat: include resolved IP address in mDNS discovery results

🐛 Fixes

  • fix: history duration and resolution in seconds
  • fix: update previousPoint when active route geometry changes
  • fix: appstore install/remove progress not shown in UI
  • fix: R19 hamburger menu not working on mobile (iOS)
  • Fix duplicate user creation + convert tokensecurity to TypeScript
  • fix: DataBrowser meta toggle stops data updates and multiple UX issues - R19
  • fix: move baconjs from peerDependencies to dependencies in server-api
  • fix: drop ignored NMEA sentences instead of emptying them
  • fix: restart connection pipelines on config change without server restart
  • fix: Support R16 embedded Webapps in React 19 admin UI
  • fix: restore express.static trailing-slash redirect for webapp routes
  • fix(ui): remove noisy success alerts from connection operations
  • fix(ui): prevent duplicate description on boolean plugin config fields
  • feat(ui): add server default preset functionality in unit preferences…
  • fix: use correct listener reference in startEvents cleanup
  • fix: prevent applicationData corruption under concurrent writes (#2303)
  • fix: reconnect WebSocket after login/logout in R19 admin UI
  • fix: detect legacy React before container.init() in R16 bridge
  • fix: R19 admin UI corrections
  • fix: reject revoked tokens instead of downgrading to anonymous read-only
  • fix: three Server Log bugs in R19 (auto-scroll, duplicate entries, InvalidStateError)
  • fix: guard against ENOENT when deleting debug persistence file
  • fix: respect forLoginStatus flag in bad-token branch of http_authorize

📦 Uncategorized

  • chore: rename contributing.md to CONTRIBUTING.md
  • fix: make applicationData test robust by sharing server lifecycle
  • test: add dependency version sync test for React 19 admin UI
  • Migrate React 19 admin UI from reactstrap to react-bootstrap
  • chore(deps): bump actions/setup-node from 4 to 6
  • fix: include server-api tests in npm test
  • fix: guard document.title access in setVesselInfo for vitest compatibility - R19
  • Fix server-api test glob to include src/ root test files
  • docs: remove unsupported signalk-category-hidden keyword
  • test: add metadata end2end test
  • chore(deps): bump aquasecurity/trivy-action from 0.33.1 to 0.34.0 in /.github/workflows
  • chore: fix docker image copy from ghcr.io to docker.io
  • chore: integrate assemblyscript-prettier 3.0.2
  • refactor: convert requestResponse to TypeScript
  • refactor: convert packages/streams to strict TypeScript
  • feature: keep track of image sizes
  • fix: pin @module-federation/vite to 1.9.4 to fix CI build
  • fix: layer size skopeo invocation
  • chore: add .gitattributes to enforce LF line endings
  • chore: use just tag in container image tracking
  • fix: Skip CI/CD workflows on forks
  • fix: Add root-level plugin-config-data/ to .gitignore
  • fix: filter bundled Admin UI packages from Appstore and Webapps list
  • test: Optimize root tests - reduce hardcoded delays
  • test: replace hardcoded timeouts with event-driven assertions in stream tests
  • chore(deps): bump actions/checkout from 5 to 6
  • chore(deps): bump actions/upload-artifact from 6 to 7
  • chore(deps): bump actions/download-artifact from 6 to 8

v2.23.0-beta.2

08 Mar 20:23
3f22aa9

Choose a tag to compare

v2.23.0-beta.2 Pre-release
Pre-release

🚀 Features

  • feat: surface pre-release versions in appstore
  • feat: add "All" context option to data browser
  • feat: add showcase banner to React 19 admin UI header
  • Implementing display units system in metadata
  • fix(ui): replace unit preferences pill buttons with dropdown select R19
  • feat: add native WebSocket ping/pong heartbeat for stale connection cleanup
  • feat(history): add multi-provider support to History API
  • feat: track and display device token expiry in admin UI
  • feat: R19 Data Browser multi-term OR search
  • fix: filter version list in R19 app store versions modal
  • feat: include resolved IP address in mDNS discovery results

🐛 Fixes

  • fix: history duration and resolution in seconds
  • fix: update previousPoint when active route geometry changes
  • fix: appstore install/remove progress not shown in UI
  • fix: R19 hamburger menu not working on mobile (iOS)
  • Fix duplicate user creation + convert tokensecurity to TypeScript
  • fix: DataBrowser meta toggle stops data updates and multiple UX issues - R19
  • fix: move baconjs from peerDependencies to dependencies in server-api
  • fix: drop ignored NMEA sentences instead of emptying them
  • fix: restart connection pipelines on config change without server restart
  • fix: Support R16 embedded Webapps in React 19 admin UI
  • fix: restore express.static trailing-slash redirect for webapp routes
  • fix(ui): remove noisy success alerts from connection operations
  • fix(ui): prevent duplicate description on boolean plugin config fields
  • feat(ui): add server default preset functionality in unit preferences…
  • fix: use correct listener reference in startEvents cleanup
  • fix: prevent applicationData corruption under concurrent writes (#2303)
  • fix: reconnect WebSocket after login/logout in R19 admin UI
  • fix: detect legacy React before container.init() in R16 bridge
  • fix: R19 admin UI corrections
  • fix: reject revoked tokens instead of downgrading to anonymous read-only
  • fix: three Server Log bugs in R19 (auto-scroll, duplicate entries, InvalidStateError)
  • fix: guard against ENOENT when deleting debug persistence file

📦 Uncategorized

  • chore: rename contributing.md to CONTRIBUTING.md
  • fix: make applicationData test robust by sharing server lifecycle
  • test: add dependency version sync test for React 19 admin UI
  • Migrate React 19 admin UI from reactstrap to react-bootstrap
  • chore(deps): bump actions/setup-node from 4 to 6
  • fix: include server-api tests in npm test
  • fix: guard document.title access in setVesselInfo for vitest compatibility - R19
  • Fix server-api test glob to include src/ root test files
  • docs: remove unsupported signalk-category-hidden keyword
  • test: add metadata end2end test
  • chore(deps): bump aquasecurity/trivy-action from 0.33.1 to 0.34.0 in /.github/workflows
  • chore: fix docker image copy from ghcr.io to docker.io
  • chore: integrate assemblyscript-prettier 3.0.2
  • refactor: convert requestResponse to TypeScript
  • refactor: convert packages/streams to strict TypeScript
  • feature: keep track of image sizes
  • fix: pin @module-federation/vite to 1.9.4 to fix CI build
  • fix: layer size skopeo invocation
  • chore: add .gitattributes to enforce LF line endings
  • chore: use just tag in container image tracking

v2.23.0-beta.1

03 Mar 20:31
902a701

Choose a tag to compare

v2.23.0-beta.1 Pre-release
Pre-release

🚀 Features

  • feat: surface pre-release versions in appstore
  • feat: add "All" context option to data browser
  • feat: add showcase banner to React 19 admin UI header
  • Implementing display units system in metadata
  • fix(ui): replace unit preferences pill buttons with dropdown select R19
  • feat: add native WebSocket ping/pong heartbeat for stale connection cleanup
  • feat(history): add multi-provider support to History API

🐛 Fixes

  • fix: history duration and resolution in seconds
  • fix: update previousPoint when active route geometry changes
  • fix: appstore install/remove progress not shown in UI
  • fix: R19 hamburger menu not working on mobile (iOS)
  • Fix duplicate user creation + convert tokensecurity to TypeScript
  • fix: DataBrowser meta toggle stops data updates and multiple UX issues - R19
  • fix: move baconjs from peerDependencies to dependencies in server-api
  • fix: drop ignored NMEA sentences instead of emptying them
  • fix: restart connection pipelines on config change without server restart
  • fix: Support R16 embedded Webapps in React 19 admin UI
  • fix: restore express.static trailing-slash redirect for webapp routes
  • fix(ui): remove noisy success alerts from connection operations
  • fix(ui): prevent duplicate description on boolean plugin config fields
  • feat(ui): add server default preset functionality in unit preferences…
  • fix: use correct listener reference in startEvents cleanup
  • fix: prevent applicationData corruption under concurrent writes (#2303)

📦 Uncategorized

  • chore: rename contributing.md to CONTRIBUTING.md
  • fix: make applicationData test robust by sharing server lifecycle
  • test: add dependency version sync test for React 19 admin UI
  • Migrate React 19 admin UI from reactstrap to react-bootstrap
  • chore(deps): bump actions/setup-node from 4 to 6
  • fix: include server-api tests in npm test
  • fix: guard document.title access in setVesselInfo for vitest compatibility - R19
  • Fix server-api test glob to include src/ root test files
  • docs: remove unsupported signalk-category-hidden keyword
  • test: add metadata end2end test
  • chore(deps): bump aquasecurity/trivy-action from 0.33.1 to 0.34.0 in /.github/workflows
  • chore: fix docker image copy from ghcr.io to docker.io
  • chore: integrate assemblyscript-prettier 3.0.2
  • refactor: convert requestResponse to TypeScript
  • refactor: convert packages/streams to strict TypeScript
  • feature: keep track of image sizes

v2.22.1

15 Feb 15:31
7edf2b6

Choose a tag to compare

🐛 Fixes

  • fix: /signalk/v2/api/history in History API provider

v2.22.0

14 Feb 17:56
21841c3

Choose a tag to compare

🚀 Features

  • feat: add ema and sma to History API
  • feature: drop arm/v7 container image support
  • feat: add React 19 Admin UI with runtime switching
  • chore: add alpine builds, development and release docker image build upgrades