Releases: SignalK/signalk-server
Releases · SignalK/signalk-server
v2.26.0
🚀 Features
- fix(security): remove per-message token override in WebSocket handler
- PR: #2564
- feat: Plugin Testsuite as Developer CI Workflow
- PR: #2400
- perf(streams): lazy-load N2K dependencies
- PR: #2493
- feat(admin-ui): createDevice checkbox for Yacht Devices gateways
- PR: #2616
- ⏺ feat(unitpreferences): auto-assign category from base unit with per-user primary disambiguation
- PR: #2580
- perf(backpressure): cache getBufferLength across send and assertBufferSize
- PR: #2606
- perf(pipedproviders): collapse DevNull + data listener into one Writable
- PR: #2607
🐛 Fixes
- fix(admin-ui): restore logo loading broken by Vite 8 upgrade
- PR: #2609
- fix(streams): use event-based reconnection in mdns-ws provider
- PR: #2514
- fix(oidc): validate config eagerly at startup to prevent auth bypass
- PR: #2599
- fix(admin-ui): restore N2K provider filter editing
- PR: #2614
📦 Uncategorized
v2.25.0
🚀 Features
- feat: add DISABLE_SECURITY_ACTIVATION environment variable
- PR: #2522
- Use 2048-bit key for self-signed SSL certificates
- PR: #2500
- feat: add conversion formulas to active preset and bulk metadata endpoint
- PR: #2436
- feat: add custom unit support for per-path display unit override
- PR: #2512
- Add unit category to performance paths
- PR: #2539
- feat: add AsyncAPI docs for WebSocket delta APIs
- PR: #2491
- Add input filtering for SeaTalk1 connections
- PR: #2499
- feat(security): add disable/restore security from Admin UI
- PR: #2530
- feat(tcp): guard against send buffer overflow in TCP connections
- PR: #2472
- fix(admin-ui): redesign plugin config page layout
- PR: #2457
- Radar API refactored
- PR: #2357
- Feat: Add config & data preservation option to plugin removal
- PR: #2575
- feat(ws): limit concurrent WebSocket connections per IP
- PR: #2578
- feat: add environment variable TRUST_PROXY
- PR: #2579
- Improve logging when auth cookies are cleared
- PR: #2542
- perf(deltacache): string-compare ISO 8601 timestamps when sorting
- PR: #2585
- perf: use structuredClone for metadata deep clones
- PR: #2584
- perf: short-circuit eager JSON.stringify in debug calls
- PR: #2581
- chore(logging): log full error objects to capture stack traces
- PR: #2565
- feat(admin-ui): support ESM module federation containers
- PR: #2552
- feat: include app-dock by default
- PR: #2597
🐛 Fixes
- fix(streams): set provider error status on tcp disconnect
- PR: #2525
- fix: sourcepriorities in admin ui not populating
- PR: #2541
- fix(streams): improve gpsd connection handling , add connection timeout
- PR: #2503
- fix(security): include timeToLive in login responses
- PR: #2468
- fix(interfaces): convert NMEA0183PORT env var to number for mDNS
- PR: #2548
- fix: prevent context prefix from contaminating meta PUT path
- PR: #2544
- refactor(settings): defer in-memory mutation until after persist
- PR: #2550
- fix(plugins): clean up leftover files after plugin uninstall
- PR: #2458
- fix(security): add rate limiting to WebSocket login endpoint
- PR: #2568
- fix: parse websocket PUT responses before matching requestId
- PR: #2571
- Fix ReDoS vulnerability in chart tile route regex
- PR: #2573
- fix: move anchor unit category to length
- PR: #2576
- fix: reject deltas with invalid values entries
- PR: #2460
- fix(streams): silence gpiod-seatalk noise via # comment convention
- PR: #2586
- fix: suppress missing security.json warning on fresh install
- PR: #2598
- Resources Provider: Fix the test for resource being within a specified distance from a position
- PR: #2577
- fix(oidc): add redirectUri field to admin GUI and fix ENV validation
- PR: #2603
- fix(oidc): persist user identity metadata to security.json
- PR: #2600
📦 Uncategorized
- test(history): add tests for History API v2 endpoints
- PR: #2490
- chore: add tests for login over websocket
- PR: #2540
- refactor(interfaces): migrate providers to TypeScript
- PR: #2537
- fix(admin-ui): resolve circular dependency in server-admin-ui
- PR: #2558
- chore(admin-ui): upgrade to Vite 8
- PR: #2553
- chore(deps): bump docker/login-action from 3 to 4
- PR: #2557
- chore(deps): bump docker/metadata-action from 5 to 6
- PR: #2556
- chore(deps): bump docker/setup-buildx-action from 3 to 4
- PR: #2555
- chore(deps): bump docker/build-push-action from 6 to 7
- PR: #2554
- docs(agents): add performance guidance for the hot path
- PR: #2583
- chore(deps): bump @signalk/nmea0183-utilities to ^0.12.0 in streams
- PR: #2596
- docs(oidc): fix auto-login bypass parameter
- PR: #2602
v2.24.0
🚀 Features
- chore: update default Node.js from 22 to 24
- feat: upgrade baconjs from v1.0.1 to v3.0
- PR: #2384
- feature: default allow_readonly to false when security is enabled
- PR: #2366
- fix(streams): set default TCP idle timeout to 60 seconds
- PR: #2465
- Add EXTERNALSSL env var for proxy-terminated TLS
- PR: #2484
- feat: Authenticate WebSocket provider connections to secured remote servers
- PR: #2365
- feat: make server-admin-ui-react19 the main server-admin-ui
- PR: #2441
- feat(plugins): isolate plugin crashes from server process
- PR: #2447
- feat(appstore): show update-disabled plugins in admin UI
- PR: #2467
- fix(admin-ui): warn about disk space when enabling data logging
- PR: #2463
- fix(streams): fetch remote metadata on demand via HTTP
- PR: #2449
- feat(admin-ui): R19 Show node/npm version and compatibility warnings in admin UI footer
- PR: #2443
- fix: extend atomic writes to all config file saves
- PR: #2461
- refactor(history): add HistoryProvider type and HistoryProviderRegistry
- PR: #2495
🐛 Fixes
- fix(streams): handle serial port write backpressure correctly
- PR: #2464
- fix(course): use courseApi provider id for v2 deltas
- PR: #2450
- fix(udp): report connection status to dashboard
- PR: #2469
- fix(settings): correct mDNS default status in admin UI
- PR: #2471
- fix(admin-ui): encode connection ID in provider API URLs
- PR: #2470
- fix(rest): serve snapshot at spec-compliant path /signalk/v1/snapshot
- PR: #2473
- fix(appstore): handle invalid semver versions gracefully
- PR: #2456
- fix(admin-ui): bridge legacy React plugins in React 19 admin UI
- PR: #2452
- fix(security): make token expiration "NEVER" case-insensitive
- PR: #2459
- fix(meta): prevent deleted metadata fields from reappearing
- PR: #2482
- fix(admin-ui): use separate R16 share scope for legacy plugin bridge
- PR: #2496
- fix: persist unit preferences in config directory instead of package directory
- PR: #2454
- fix: Validate permissions in device access requests
- PR: #2445
- feat(security): add sliding session token refresh
- PR: #2476
- fix(resources): return 404 for nonexistent resource ID
- PR: #2462
- fix(security): require admin auth for config mutation endpoints
- PR: #2505
- fix(security): add auth middleware for v2 API endpoints
- PR: #2506
- fix(demo): enable security with readonly access for demo.signalk.org
- PR: #2509
- fix(admin-ui): preserve enabled state when editing data connections
- PR: #2511
- fix(security): validate from field in JSON patch prototype pollution guard
- PR: #2518
- fix(subscriptions): coerce period and minPeriod to number
- PR: #2526
📦 Uncategorized
- Replace express-easy-zip with archiver to fix glob deprecation
- PR: #2213
- chore(deps): remove unused fix and express-namespace
- PR: #2442
- fix: Deduplicate geolib to single version
- PR: #2444
- Replace heavy dependencies in signalk-server-setup with lighter alternatives
- PR: #2479
- feature: add TypeBox schemas for OpenApi data objects
- PR: #2480
- test(security): add auth tests for config and v2 API endpoints
- PR: #2507
v2.24.0-beta.4
🚀 Features
- feature: bring back Simple Line Icons
- PR: #2439
- feat: rename server-admin-ui-react19 to server-admin-ui
- PR: #2441
- feat(plugins): isolate plugin crashes from server process
- PR: #2447
- feat(appstore): show update-disabled plugins in admin UI
- PR: #2467
- fix(admin-ui): warn about disk space when enabling data logging
- PR: #2463
- fix(streams): fetch remote metadata on demand via HTTP
- PR: #2449
- feat(admin-ui): R19 Show node/npm version and compatibility warnings in admin UI footer
- PR: #2443
- chore: update default Node.js from 22 to 24
- PR: #2373
- chore: docker image build upgrades, Node 22 to 24
- PR: #2374
- feature: default allow_readonly to false when security is enabled
- PR: #2366
- fix(streams): set default TCP idle timeout to 60 seconds
- PR: #2465
- fix: extend atomic writes to all config file saves
- PR: #2461
- refactor(history): add HistoryProvider type and HistoryProviderRegistry
- PR: #2495
- Add EXTERNALSSL env var for proxy-terminated TLS
- PR: #2484
🐛 Fixes
- fix(course): use courseApi provider id for v2 deltas
- PR: #2450
- fix(udp): report connection status to dashboard
- PR: #2469
- fix(settings): correct mDNS default status in admin UI
- PR: #2471
- fix(admin-ui): encode connection ID in provider API URLs
- PR: #2470
- fix(streams): handle serial port write backpressure correctly
- PR: #2464
- fix(rest): serve snapshot at spec-compliant path /signalk/v1/snapshot
- PR: #2473
- fix(appstore): handle invalid semver versions gracefully
- PR: #2456
- fix(admin-ui): bridge legacy React plugins in React 19 admin UI
- PR: #2452
- fix(security): make token expiration "NEVER" case-insensitive
- PR: #2459
- fix(meta): prevent deleted metadata fields from reappearing
- PR: #2482
- fix(admin-ui): use separate R16 share scope for legacy plugin bridge
- PR: #2496
- fix: resolve baconjs version mismatch between server and plugins
- PR: #2487
- fix: persist unit preferences in config directory instead of package directory
- PR: #2454
- fix: Validate permissions in device access requests
- PR: #2445
- feat(security): add sliding session token refresh
- PR: #2476
- fix(resources): return 404 for nonexistent resource ID
- PR: #2462
- fix(security): require admin auth for config mutation endpoints
- PR: #2505
- fix(security): add auth middleware for v2 API endpoints
- PR: #2506
- fix(demo): enable security with readonly access for demo.signalk.org
- PR: #2509
- fix(admin-ui): preserve enabled state when editing data connections
- PR: #2511
📦 Uncategorized
- chore(deps): bump aquasecurity/trivy-action from 0.34.0 to 0.35.0
- PR: #2389
- Replace express-easy-zip with archiver to fix glob deprecation
- PR: #2213
- chore(deps): remove unused fix and express-namespace
- PR: #2442
- doc: tweak unitprefs docs
- PR: #2438
- fix: Deduplicate geolib to single version
- PR: #2444
- Replace heavy dependencies in signalk-server-setup with lighter alternatives
- PR: #2479
- fix(lint): disable @typescript-eslint/no-unused-expressions in test files
- PR: #2481
- feature: add TypeBox schemas for OpenApi data objects
- PR: #2480
- fix(admin-ui): unpin @module-federation/vite version
- PR: #2494
- test(security): add auth tests for config and v2 API endpoints
- PR: #2507
- fix(chore): gitignore debug remember-me artifacts in test configs
- PR: #2510
v2.24.0-beta.3
🚀 Features
- feature: bring back Simple Line Icons
- PR: #2439
- feat: rename server-admin-ui-react19 to server-admin-ui
- PR: #2441
- feat(plugins): isolate plugin crashes from server process
- PR: #2447
- feat(appstore): show update-disabled plugins in admin UI
- PR: #2467
- fix(admin-ui): warn about disk space when enabling data logging
- PR: #2463
- fix(streams): fetch remote metadata on demand via HTTP
- PR: #2449
- feat(admin-ui): R19 Show node/npm version and compatibility warnings in admin UI footer
- PR: #2443
- chore: update default Node.js from 22 to 24
- PR: #2373
- chore: docker image build upgrades, Node 22 to 24
- PR: #2374
- feature: default allow_readonly to false when security is enabled
- PR: #2366
- fix(streams): set default TCP idle timeout to 60 seconds
- PR: #2465
- fix: extend atomic writes to all config file saves
- PR: #2461
- refactor(history): add HistoryProvider type and HistoryProviderRegistry
- PR: #2495
- Add EXTERNALSSL env var for proxy-terminated TLS
- PR: #2484
🐛 Fixes
- fix(course): use courseApi provider id for v2 deltas
- PR: #2450
- fix(udp): report connection status to dashboard
- PR: #2469
- fix(settings): correct mDNS default status in admin UI
- PR: #2471
- fix(admin-ui): encode connection ID in provider API URLs
- PR: #2470
- fix(streams): handle serial port write backpressure correctly
- PR: #2464
- fix(rest): serve snapshot at spec-compliant path /signalk/v1/snapshot
- PR: #2473
- fix(appstore): handle invalid semver versions gracefully
- PR: #2456
- fix(admin-ui): bridge legacy React plugins in React 19 admin UI
- PR: #2452
- fix(security): make token expiration "NEVER" case-insensitive
- PR: #2459
- fix(meta): prevent deleted metadata fields from reappearing
- PR: #2482
- fix(admin-ui): use separate R16 share scope for legacy plugin bridge
- PR: #2496
- fix: resolve baconjs version mismatch between server and plugins
- PR: #2487
- fix: persist unit preferences in config directory instead of package directory
- PR: #2454
- fix: Validate permissions in device access requests
- PR: #2445
- feat(security): add sliding session token refresh
- PR: #2476
- fix(resources): return 404 for nonexistent resource ID
- PR: #2462
- fix(security): require admin auth for config mutation endpoints
- PR: #2505
- fix(security): add auth middleware for v2 API endpoints
- PR: #2506
📦 Uncategorized
- chore(deps): bump aquasecurity/trivy-action from 0.34.0 to 0.34.1
- PR: #2389
- Replace express-easy-zip with archiver to fix glob deprecation
- PR: #2213
- chore(deps): remove unused fix and express-namespace
- PR: #2442
- doc: tweak unitprefs docs
- PR: #2438
- fix: Deduplicate geolib to single version
- PR: #2444
- Replace heavy dependencies in signalk-server-setup with lighter alternatives
- PR: #2479
- fix(lint): disable @typescript-eslint/no-unused-expressions in test files
- PR: #2481
- feature: add TypeBox schemas for OpenApi data objects
- PR: #2480
- fix(admin-ui): unpin @module-federation/vite version
- PR: #2494
- test(security): add auth tests for config and v2 API endpoints
- PR: #2507
v2.23.0
🚀 Features
- feat: surface pre-release versions in appstore
- PR: #2335
- feat: add "All" context option to data browser
- PR: #2333
- feat: add showcase banner to React 19 admin UI header
- PR: #2348
- Implementing display units system in metadata
- PR: #2225
- fix(ui): replace unit preferences pill buttons with dropdown select R19
- PR: #2371
- feat: add native WebSocket ping/pong heartbeat for stale connection cleanup
- PR: #2387
- feat(history): add multi-provider support to History API
- PR: #2381
- feat: track and display device token expiry in admin UI
- PR: #2369
- feat: R19 Data Browser multi-term OR search
- PR: #2415
- fix: filter version list in R19 app store versions modal
- PR: #2413
- feat: include resolved IP address in mDNS discovery results
- PR: #2404
🐛 Fixes
- fix: history duration and resolution in seconds
- PR: #2338
- fix: update previousPoint when active route geometry changes
- PR: #2337
- fix: appstore install/remove progress not shown in UI
- PR: #2339
- fix: R19 hamburger menu not working on mobile (iOS)
- PR: #2346
- Fix duplicate user creation + convert tokensecurity to TypeScript
- PR: #2347
- fix: DataBrowser meta toggle stops data updates and multiple UX issues - R19
- PR: #2341
- fix: move baconjs from peerDependencies to dependencies in server-api
- PR: #2328
- fix: drop ignored NMEA sentences instead of emptying them
- PR: #2361
- fix: restart connection pipelines on config change without server restart
- PR: #2332
- fix: Support R16 embedded Webapps in React 19 admin UI
- PR: #2342
- fix: restore express.static trailing-slash redirect for webapp routes
- PR: #2364
- fix(ui): remove noisy success alerts from connection operations
- PR: #2363
- fix(ui): prevent duplicate description on boolean plugin config fields
- PR: #2382
- feat(ui): add server default preset functionality in unit preferences…
- PR: #2395
- fix: use correct listener reference in startEvents cleanup
- PR: #2385
- fix: prevent applicationData corruption under concurrent writes (#2303)
- PR: #2394
- fix: reconnect WebSocket after login/logout in R19 admin UI
- PR: #2403
- fix: detect legacy React before container.init() in R16 bridge
- PR: #2408
- fix: R19 admin UI corrections
- PR: #2405
- fix: reject revoked tokens instead of downgrading to anonymous read-only
- PR: #2401
- fix: three Server Log bugs in R19 (auto-scroll, duplicate entries, InvalidStateError)
- PR: #2421
- fix: guard against ENOENT when deleting debug persistence file
- PR: #2423
- fix: respect forLoginStatus flag in bad-token branch of http_authorize
- PR: #2429
📦 Uncategorized
- chore: rename contributing.md to CONTRIBUTING.md
- PR: #2334
- fix: make applicationData test robust by sharing server lifecycle
- PR: #2336
- test: add dependency version sync test for React 19 admin UI
- PR: #2331
- Migrate React 19 admin UI from reactstrap to react-bootstrap
- PR: #2340
- chore(deps): bump actions/setup-node from 4 to 6
- PR: #2133
- fix: include server-api tests in npm test
- PR: #2349
- fix: guard document.title access in setVesselInfo for vitest compatibility - R19
- PR: #2352
- Fix server-api test glob to include src/ root test files
- PR: #2351
- docs: remove unsupported signalk-category-hidden keyword
- PR: #2355
- test: add metadata end2end test
- PR: #2356
- chore(deps): bump aquasecurity/trivy-action from 0.33.1 to 0.34.0 in /.github/workflows
- PR: #2345
- chore: fix docker image copy from ghcr.io to docker.io
- PR: #2368
- chore: integrate assemblyscript-prettier 3.0.2
- PR: #2378
- refactor: convert requestResponse to TypeScript
- PR: #2284
- refactor: convert packages/streams to strict TypeScript
- PR: #2354
- feature: keep track of image sizes
- PR: #2388
- fix: pin @module-federation/vite to 1.9.4 to fix CI build
- PR: #2412
- fix: layer size skopeo invocation
- PR: #2402
- chore: add .gitattributes to enforce LF line endings
- PR: #2419
- chore: use just tag in container image tracking
- PR: #2418
- fix: Skip CI/CD workflows on forks
- PR: #2426
- fix: Add root-level
plugin-config-data/to.gitignore- PR: #2425
- fix: filter bundled Admin UI packages from Appstore and Webapps list
- PR: #2430
- test: Optimize root tests - reduce hardcoded delays
- PR: #2433
- test: replace hardcoded timeouts with event-driven assertions in stream tests
- PR: #2431
- chore(deps): bump actions/checkout from 5 to 6
- PR: #2392
- chore(deps): bump actions/upload-artifact from 6 to 7
- PR: #2391
- chore(deps): bump actions/download-artifact from 6 to 8
- PR: #2393
v2.23.0-beta.2
🚀 Features
- feat: surface pre-release versions in appstore
- PR: #2335
- feat: add "All" context option to data browser
- PR: #2333
- feat: add showcase banner to React 19 admin UI header
- PR: #2348
- Implementing display units system in metadata
- PR: #2225
- fix(ui): replace unit preferences pill buttons with dropdown select R19
- PR: #2371
- feat: add native WebSocket ping/pong heartbeat for stale connection cleanup
- PR: #2387
- feat(history): add multi-provider support to History API
- PR: #2381
- feat: track and display device token expiry in admin UI
- PR: #2369
- feat: R19 Data Browser multi-term OR search
- PR: #2415
- fix: filter version list in R19 app store versions modal
- PR: #2413
- feat: include resolved IP address in mDNS discovery results
- PR: #2404
🐛 Fixes
- fix: history duration and resolution in seconds
- PR: #2338
- fix: update previousPoint when active route geometry changes
- PR: #2337
- fix: appstore install/remove progress not shown in UI
- PR: #2339
- fix: R19 hamburger menu not working on mobile (iOS)
- PR: #2346
- Fix duplicate user creation + convert tokensecurity to TypeScript
- PR: #2347
- fix: DataBrowser meta toggle stops data updates and multiple UX issues - R19
- PR: #2341
- fix: move baconjs from peerDependencies to dependencies in server-api
- PR: #2328
- fix: drop ignored NMEA sentences instead of emptying them
- PR: #2361
- fix: restart connection pipelines on config change without server restart
- PR: #2332
- fix: Support R16 embedded Webapps in React 19 admin UI
- PR: #2342
- fix: restore express.static trailing-slash redirect for webapp routes
- PR: #2364
- fix(ui): remove noisy success alerts from connection operations
- PR: #2363
- fix(ui): prevent duplicate description on boolean plugin config fields
- PR: #2382
- feat(ui): add server default preset functionality in unit preferences…
- PR: #2395
- fix: use correct listener reference in startEvents cleanup
- PR: #2385
- fix: prevent applicationData corruption under concurrent writes (#2303)
- PR: #2394
- fix: reconnect WebSocket after login/logout in R19 admin UI
- PR: #2403
- fix: detect legacy React before container.init() in R16 bridge
- PR: #2408
- fix: R19 admin UI corrections
- PR: #2405
- fix: reject revoked tokens instead of downgrading to anonymous read-only
- PR: #2401
- fix: three Server Log bugs in R19 (auto-scroll, duplicate entries, InvalidStateError)
- PR: #2421
- fix: guard against ENOENT when deleting debug persistence file
- PR: #2423
📦 Uncategorized
- chore: rename contributing.md to CONTRIBUTING.md
- PR: #2334
- fix: make applicationData test robust by sharing server lifecycle
- PR: #2336
- test: add dependency version sync test for React 19 admin UI
- PR: #2331
- Migrate React 19 admin UI from reactstrap to react-bootstrap
- PR: #2340
- chore(deps): bump actions/setup-node from 4 to 6
- PR: #2133
- fix: include server-api tests in npm test
- PR: #2349
- fix: guard document.title access in setVesselInfo for vitest compatibility - R19
- PR: #2352
- Fix server-api test glob to include src/ root test files
- PR: #2351
- docs: remove unsupported signalk-category-hidden keyword
- PR: #2355
- test: add metadata end2end test
- PR: #2356
- chore(deps): bump aquasecurity/trivy-action from 0.33.1 to 0.34.0 in /.github/workflows
- PR: #2345
- chore: fix docker image copy from ghcr.io to docker.io
- PR: #2368
- chore: integrate assemblyscript-prettier 3.0.2
- PR: #2378
- refactor: convert requestResponse to TypeScript
- PR: #2284
- refactor: convert packages/streams to strict TypeScript
- PR: #2354
- feature: keep track of image sizes
- PR: #2388
- fix: pin @module-federation/vite to 1.9.4 to fix CI build
- PR: #2412
- fix: layer size skopeo invocation
- PR: #2402
- chore: add .gitattributes to enforce LF line endings
- PR: #2419
- chore: use just tag in container image tracking
- PR: #2418
v2.23.0-beta.1
🚀 Features
- feat: surface pre-release versions in appstore
- PR: #2335
- feat: add "All" context option to data browser
- PR: #2333
- feat: add showcase banner to React 19 admin UI header
- PR: #2348
- Implementing display units system in metadata
- PR: #2225
- fix(ui): replace unit preferences pill buttons with dropdown select R19
- PR: #2371
- feat: add native WebSocket ping/pong heartbeat for stale connection cleanup
- PR: #2387
- feat(history): add multi-provider support to History API
- PR: #2381
🐛 Fixes
- fix: history duration and resolution in seconds
- PR: #2338
- fix: update previousPoint when active route geometry changes
- PR: #2337
- fix: appstore install/remove progress not shown in UI
- PR: #2339
- fix: R19 hamburger menu not working on mobile (iOS)
- PR: #2346
- Fix duplicate user creation + convert tokensecurity to TypeScript
- PR: #2347
- fix: DataBrowser meta toggle stops data updates and multiple UX issues - R19
- PR: #2341
- fix: move baconjs from peerDependencies to dependencies in server-api
- PR: #2328
- fix: drop ignored NMEA sentences instead of emptying them
- PR: #2361
- fix: restart connection pipelines on config change without server restart
- PR: #2332
- fix: Support R16 embedded Webapps in React 19 admin UI
- PR: #2342
- fix: restore express.static trailing-slash redirect for webapp routes
- PR: #2364
- fix(ui): remove noisy success alerts from connection operations
- PR: #2363
- fix(ui): prevent duplicate description on boolean plugin config fields
- PR: #2382
- feat(ui): add server default preset functionality in unit preferences…
- PR: #2395
- fix: use correct listener reference in startEvents cleanup
- PR: #2385
- fix: prevent applicationData corruption under concurrent writes (#2303)
- PR: #2394
📦 Uncategorized
- chore: rename contributing.md to CONTRIBUTING.md
- PR: #2334
- fix: make applicationData test robust by sharing server lifecycle
- PR: #2336
- test: add dependency version sync test for React 19 admin UI
- PR: #2331
- Migrate React 19 admin UI from reactstrap to react-bootstrap
- PR: #2340
- chore(deps): bump actions/setup-node from 4 to 6
- PR: #2133
- fix: include server-api tests in npm test
- PR: #2349
- fix: guard document.title access in setVesselInfo for vitest compatibility - R19
- PR: #2352
- Fix server-api test glob to include src/ root test files
- PR: #2351
- docs: remove unsupported signalk-category-hidden keyword
- PR: #2355
- test: add metadata end2end test
- PR: #2356
- chore(deps): bump aquasecurity/trivy-action from 0.33.1 to 0.34.0 in /.github/workflows
- PR: #2345
- chore: fix docker image copy from ghcr.io to docker.io
- PR: #2368
- chore: integrate assemblyscript-prettier 3.0.2
- PR: #2378
- refactor: convert requestResponse to TypeScript
- PR: #2284
- refactor: convert packages/streams to strict TypeScript
- PR: #2354
- feature: keep track of image sizes
- PR: #2388