signalk-server
Version:
An implementation of a [Signal K](http://signalk.org) server for boats.
195 lines (193 loc) • 25.3 kB
HTML
<html class="default" lang="en" data-base="../"><head><meta charset="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>Breaking Changes | Signal K</title><meta name="description" content="Documentation for Signal K"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css?cache=1783009712609"/><link rel="stylesheet" href="../assets/highlight.css?cache=1783009712609"/><script defer src="../assets/main.js?cache=1783009712609"></script><script async src="../assets/icons.js?cache=1783009712609" id="tsd-icons-script"></script><script async src="../assets/search.js?cache=1783009712609" id="tsd-search-script"></script><script async src="../assets/navigation.js?cache=1783009712609" id="tsd-nav-script"></script><script async src="../assets/hierarchy.js?cache=1783009712609" id="tsd-hierarchy-script"></script><link rel="stylesheet" href="../assets/theme.css"/><script>if(window.self!==window.top){document.documentElement.classList.add('embedded')}</script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os";document.body.style.display="none";setTimeout(() => window.app?app.showPage():document.body.style.removeProperty("display"),500)</script><header class="tsd-page-toolbar"><div class="tsd-toolbar-contents container"><a href="../index.html" class="title"><img class="title-logo" src="../assets/logo.svg" alt="Signal K"/><svg class="title-home-icon" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-label="Documentation home"><path d="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"></path><polyline points="9 22 9 12 15 12 15 22"></polyline></svg></a><button id="tsd-search-trigger" class="tsd-widget" aria-label="Search"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-search"></use></svg><span class="visible@s">Search</span></button><dialog id="tsd-search" aria-label="Search"><input role="combobox" id="tsd-search-input" aria-controls="tsd-search-results" aria-autocomplete="list" aria-expanded="true" autocapitalize="off" autocomplete="off" placeholder="Search the docs" maxLength="100"/><ul role="listbox" id="tsd-search-results"></ul><div id="tsd-search-status" aria-live="polite" aria-atomic="true"><div>Preparing search index...</div></div></dialog><div id="tsd-toolbar-links"><a href="https://discord.gg/uuZrwz4dCS" target="_blank" rel="noopener" class="toolbar-icon visible@s" aria-label="Discord"><svg width="24" height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path d="M524.5 69.8a1.5 1.5 0 0 0 -.8-.7A485.1 485.1 0 0 0 404.1 32a1.8 1.8 0 0 0 -1.9 .9 337.5 337.5 0 0 0 -14.9 30.6 447.8 447.8 0 0 0 -134.4 0 309.5 309.5 0 0 0 -15.1-30.6 1.9 1.9 0 0 0 -1.9-.9A483.7 483.7 0 0 0 116.1 69.1a1.7 1.7 0 0 0 -.8 .7C39.1 183.7 18.2 294.7 28.4 404.4a2 2 0 0 0 .8 1.4A487.7 487.7 0 0 0 176 479.9a1.9 1.9 0 0 0 2.1-.7A348.2 348.2 0 0 0 208.1 430.4a1.9 1.9 0 0 0 -1-2.6 321.2 321.2 0 0 1 -45.9-21.9 1.9 1.9 0 0 1 -.2-3.1c3.1-2.3 6.2-4.7 9.1-7.1a1.8 1.8 0 0 1 1.9-.3c96.2 43.9 200.4 43.9 295.5 0a1.8 1.8 0 0 1 1.9 .2c2.9 2.4 6 4.9 9.1 7.2a1.9 1.9 0 0 1 -.2 3.1 301.4 301.4 0 0 1 -45.9 21.8 1.9 1.9 0 0 0 -1 2.6 391.1 391.1 0 0 0 30 48.8 1.9 1.9 0 0 0 2.1 .7A486 486 0 0 0 610.7 405.7a1.9 1.9 0 0 0 .8-1.4C623.7 277.6 590.9 167.5 524.5 69.8zM222.5 337.6c-29 0-52.8-26.6-52.8-59.2S193.1 219.1 222.5 219.1c29.7 0 53.3 26.8 52.8 59.2C275.3 311 251.9 337.6 222.5 337.6zm195.4 0c-29 0-52.8-26.6-52.8-59.2S388.4 219.1 417.9 219.1c29.7 0 53.3 26.8 52.8 59.2C470.7 311 447.5 337.6 417.9 337.6z"></path></svg></a><a href="https://github.com/SignalK/signalk-server" target="_blank" rel="noopener" class="toolbar-icon visible@s" aria-label="Discord"><svg width="24" height="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3 .3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5 .3-6.2 2.3zm44.2-1.7c-2.9 .7-4.9 2.6-4.6 4.9 .3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3 .7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3 .3 2.9 2.3 3.9 1.6 1 3.6 .7 4.3-.7 .7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3 .7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3 .7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"></path></svg></a><a href="#" class="tsd-widget menu" id="tsd-toolbar-menu-trigger" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-menu"></use></svg></a></div></div></header><div class="container container-main"><div class="col-content"><div class="tsd-page-title"><ul class="tsd-breadcrumb" aria-label="Breadcrumb"><li><a href="../Developing.html">Developing</a></li><li><a href="" aria-current="page">Breaking Changes</a></li></ul></div><div class="tsd-panel tsd-typography"><h1 id="breaking-changes-deprecations" class="tsd-anchor-link">Breaking Changes & Deprecations<a href="#breaking-changes-deprecations" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h1>
<p>This document lists breaking changes and deprecations in Signal K Server.</p>
<hr>
<h2 id="nodejs-default-version-updated-to-24" class="tsd-anchor-link">Node.js: Default Version Updated to 24<a href="#nodejs-default-version-updated-to-24" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h2>
<p>Signal K Server now defaults to <strong>Node.js 24</strong> and requires <strong>Node.js 22 or later</strong>.</p>
<h3 id="what-changed" class="tsd-anchor-link">What Changed<a href="#what-changed" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3>
<table>
<thead>
<tr>
<th>Setting</th>
<th>Before</th>
<th>After</th>
</tr>
</thead>
<tbody>
<tr>
<td>Recommended</td>
<td>22</td>
<td>24</td>
</tr>
<tr>
<td>Minimum required</td>
<td>20</td>
<td>22</td>
</tr>
</tbody>
</table>
<h3 id="dropped-platform-support" class="tsd-anchor-link">Dropped Platform Support<a href="#dropped-platform-support" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3>
<p>Node.js 24 drops support for the following platforms:</p>
<ul>
<li><strong>armv7</strong> (32-bit ARM) — Affects older Raspberry Pi models (Pi 2, Pi Zero/Zero W). Use a 64-bit OS on Pi 3/4/5 or stay on an older Signal K Server version.</li>
<li><strong>Windows x86</strong> (32-bit Windows) — Use 64-bit Windows instead.</li>
</ul>
<h3 id="action-required" class="tsd-anchor-link">Action Required<a href="#action-required" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3>
<ul>
<li>Update your Node.js installation to version 22 or later (version 24 recommended)</li>
<li>If running on armv7 or Windows x86, you must migrate to a supported platform or remain on the previous Signal K Server version</li>
</ul>
<hr>
<h2 id="nmea-2000-source-identification-can-name" class="tsd-anchor-link">NMEA 2000 Source Identification: CAN Name<a href="#nmea-2000-source-identification-can-name" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h2>
<p>NMEA 2000 sources are now identified by their <strong>CAN Name</strong> instead of the N2K source address. The CAN Name is a stable, globally unique identifier derived from the device's ISO Address Claim (PGN 60928).</p>
<h3 id="what-changed-1" class="tsd-anchor-link">What Changed<a href="#what-changed-1" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3>
<table>
<thead>
<tr>
<th>Before</th>
<th>After</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>$source = "can0.22"</code></td>
<td><code>$source = "can0.c0788c00e7e04312"</code></td>
</tr>
<tr>
<td>Source address changes when devices are added/removed</td>
<td>CAN Name is stable regardless of bus topology</td>
</tr>
</tbody>
</table>
<p>The Admin UI shows human-readable labels like <em>Furuno (can0.c0788c00e7e04312)</em> derived from PGN 60928 + 126996.</p>
<h3 id="impact" class="tsd-anchor-link">Impact<a href="#impact" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3>
<ul>
<li>
<p><strong>Source Priority configuration</strong> — Existing <code>sourcePriorities</code> entries in <code>settings.json</code> that reference old-style source addresses (e.g. <code>can0.22</code>) will no longer match. You will need to reconfigure source priorities using the new CAN Name identifiers via <em>Data -> Source Priority</em> in the Admin UI.</p>
</li>
<li>
<p><strong>Security ACLs</strong> — If you have ACL rules that filter by <code>$source</code> (e.g. <code>"sources": ["can0.22"]</code>), these need to be updated to use the CAN Name format.</p>
</li>
<li>
<p><strong>Plugins</strong> — Plugins that compare or store <code>$source</code> values for N2K devices should be aware that the format has changed. Plugin-originated sources (using <code>app.handleMessage(plugin.id, ...)</code>) are not affected.</p>
</li>
<li>
<p><strong>WebSocket clients</strong> — Clients that parse or filter by <code>$source</code> will see the new format for N2K sources.</p>
</li>
</ul>
<h3 id="migration" class="tsd-anchor-link">Migration<a href="#migration" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3>
<p>Open <em>Data -> Source Priority</em> in the Admin UI to reconfigure priorities with the new identifiers. The path-priority dropdowns show the device manufacturer and model name alongside the CAN Name, making it easy to identify devices.</p>
<hr>
<h2 id="source-priority-all-source-data-preserved" class="tsd-anchor-link">Source Priority: All Source Data Preserved<a href="#source-priority-all-source-data-preserved" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h2>
<p>Previously, the source priority engine discarded data from non-preferred sources entirely — it never reached the delta cache, data model, or WebSocket subscribers. Lower-priority sensors were invisible to the server and all clients.</p>
<p>Now, <strong>all source data is preserved</strong> in the server's data model. The priority engine filters at the subscription level rather than at ingest time. This means:</p>
<ul>
<li>All sources are stored in the delta cache and available via the REST API at <code>/signalk/v1/api/</code></li>
<li>WebSocket subscribers receive preferred-source data by default, but can opt in to all sources with <code>sourcePolicy=all</code></li>
</ul>
<p>This is a behavioral change — plugins and clients that previously only saw the preferred source's data may now see additional sources when querying the data model directly. WebSocket subscriptions are not affected unless <code>sourcePolicy=all</code> is explicitly requested.</p>
<hr>
<h2 id="admin-ui-react-19-migration" class="tsd-anchor-link">Admin UI: React 19 Migration<a href="#admin-ui-react-19-migration" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h2>
<p>The Admin UI has been upgraded from React 16 to <strong>React 19</strong>. This is a significant update that may affect embedded webapps and plugin configuration panels.</p>
<h3 id="what-changed-2" class="tsd-anchor-link">What Changed<a href="#what-changed-2" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3>
<table>
<thead>
<tr>
<th>Component</th>
<th>Before</th>
<th>After</th>
</tr>
</thead>
<tbody>
<tr>
<td>React</td>
<td>16.14.0</td>
<td>19.x</td>
</tr>
<tr>
<td>React DOM</td>
<td>16.14.0</td>
<td>19.x</td>
</tr>
<tr>
<td>React Router</td>
<td>4.x</td>
<td>6.x</td>
</tr>
<tr>
<td>Language</td>
<td>JavaScript</td>
<td>TypeScript</td>
</tr>
</tbody>
</table>
<h3 id="impact-on-embedded-webapps" class="tsd-anchor-link">Impact on Embedded Webapps<a href="#impact-on-embedded-webapps" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3>
<p><strong>If your webapp uses Module Federation to share React with the Admin UI:</strong></p>
<ol>
<li>
<p><strong>Singleton sharing is now required</strong> - Your webapp must configure React and ReactDOM as singletons with <code>requiredVersion: false</code>. See <a href="https://github.com/SignalK/signalk-server/blob/master/packages/server-admin-ui/vite.config.js">vite.config.js</a> for the current configuration.</p>
</li>
<li>
<p><strong>React 19 compatibility</strong> - If your webapp bundles its own React, it should be compatible with components rendered by the host. Most React 16/17/18 code works unchanged in React 19, but some deprecated APIs have been removed.</p>
</li>
<li>
<p><strong>String refs removed</strong> - React 19 no longer supports string refs (<code>ref="myRef"</code>). Use <code>useRef()</code> instead.</p>
</li>
<li>
<p><strong><code>defaultProps</code> on function components</strong> - Deprecated. Use JavaScript default parameters instead.</p>
</li>
</ol>
<h3 id="impact-on-plugin-configuration-panels" class="tsd-anchor-link">Impact on Plugin Configuration Panels<a href="#impact-on-plugin-configuration-panels" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3>
<p>Plugin configuration panels using <code>./PluginConfigurationPanel</code> export continue to work. The props interface remains the same:</p>
<ul>
<li><code>configuration</code> - the plugin's configuration data</li>
<li><code>save</code> - function to save configuration</li>
</ul>
<h3 id="no-impact" class="tsd-anchor-link">No Impact<a href="#no-impact" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3>
<ul>
<li><strong>Standalone webapps</strong> - Webapps that don't use Module Federation sharing are not affected</li>
<li><strong>Server APIs</strong> - All Signal K HTTP and WebSocket APIs remain unchanged</li>
<li><strong>Plugin JavaScript APIs</strong> - Server-side plugin APIs are not affected</li>
</ul>
<hr>
<h2 id="security-anonymous-read-access-disabled-by-default" class="tsd-anchor-link">Security: Anonymous Read Access Disabled by Default<a href="#security-anonymous-read-access-disabled-by-default" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h2>
<p>When security is first enabled on a new installation, <code>allow_readonly</code> now defaults to <code>false</code>. Previously it defaulted to <code>true</code>, meaning anyone could read all Signal K data without authentication.</p>
<h3 id="impact-1" class="tsd-anchor-link">Impact<a href="#impact-1" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3>
<ul>
<li><strong>New installations</strong> will require authentication for all access, including read-only. Devices like chart plotters and instrument displays that previously worked without a token will need to be configured with access credentials.</li>
<li><strong>Existing installations</strong> are <strong>not affected</strong> — the <code>allow_readonly</code> value is already written explicitly in <code>security.json</code> and will be preserved.</li>
</ul>
<h3 id="mitigation" class="tsd-anchor-link">Mitigation<a href="#mitigation" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3>
<p>During initial security setup, the Enable Security dialog offers an <strong>"Allow Readonly Access"</strong> checkbox to opt in. Alternatively, you can enable it at any time in <strong>Security > Settings</strong>.</p>
<hr>
<h2 id="rest-api-changes" class="tsd-anchor-link">REST API Changes<a href="#rest-api-changes" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h2>
<p>The following changes have been implemented with the introduction of <strong>Resources API</strong> and apply to applications using the <code>./signalk/v2/resources</code> endpoint.</p>
<p><em>Note: These changes DO NOT impact applications using the <code>./signalk/v1/resources</code> endpoint.</em></p>
<h3 id="1-resource-id-prefix-assignment" class="tsd-anchor-link">1. Resource ID prefix assignment<a href="#1-resource-id-prefix-assignment" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3>
<p>The version 1 specification defined resource Ids with the following format <code>urn:mrn:signalk:uuid:<UUIDv4></code>.</p>
<p><em>e.g. <code>urn:mrn:signalk:uuid:18592f80-3425-43c2-937b-0be64b6be68c</code></em></p>
<p>The Resource API has dropped the use the prefix and ids are now just a uuidv4 value.</p>
<p><em>e.g. <code>18592f80-3425-43c2-937b-0be64b6be68c</code></em></p>
<p>This format is used for both accessing a resource <em>e.g. <code>/signalk/v1/api/resources/waypoints/18592f80-3425-43c2-937b-0be64b6be68c</code></em> as well as the value within an <code>href</code> attribute.</p>
<p><em>Example:</em></p>
<pre><code><span class="hl-0">{</span><br/><span class="hl-0"> </span><span class="hl-4">"name"</span><span class="hl-0">: </span><span class="hl-4">"..."</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-4">"descripton"</span><span class="hl-0">: </span><span class="hl-4">"..."</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-4">"href"</span><span class="hl-0">: </span><span class="hl-4">"/resources/waypoints/18592f80-3425-43c2-937b-0be64b6be68c"</span><span class="hl-0">,</span><br/><span class="hl-0"> </span><span class="hl-1">...</span><br/><span class="hl-0">}</span>
</code><button>Copy</button></pre>
<h3 id="2-resource-attributes" class="tsd-anchor-link">2. Resource Attributes<a href="#2-resource-attributes" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3>
<p>The Resources API has updated the definition of the following resources and may break applications that simply shift to using the <code>v2</code> api without catering for the changes:</p>
<ul>
<li><strong>routes</strong>: removed the <code>start</code>, <code>end</code> properties.</li>
<li><strong>waypoints</strong>: removed <code>position</code> attribute, added <code>name</code>, <code>description</code> and <code>type</code> attributes.</li>
<li><strong>regions</strong>: removed <code>geohash</code> attribute, added <code>name</code> and <code>description</code> properties.</li>
<li><strong>notes</strong>: removed <code>geohash</code> and <code>region</code> attributes, added <code>href</code> and <code>properties</code> attributes.</li>
<li><strong>charts</strong>: There has been a significant changes to include support for WMS, WMTS and TileJSON sources.</li>
</ul>
<p>Please see the <a href="https://github.com/SignalK/signalk-server/blob/master/src/api/resources/openApi.json">Resources OpenAPI definition</a> for details.</p>
<hr>
<h2 id="deprecations" class="tsd-anchor-link">Deprecations:<a href="#deprecations" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h2>
<h3 id="1-coursegreatcircle-courserhumbline-paths" class="tsd-anchor-link">1. courseGreatCircle, courseRhumbline paths<a href="#1-coursegreatcircle-courserhumbline-paths" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3>
<p>With the introduction of the Course API the following paths should now be considered deprecated:</p>
<ul>
<li><code>/signalk/v1/api/vessels/self/navigation/courseGreatCircle</code></li>
<li><code>/signalk/v1/api/vessels/self/navigation/courseRhumbline</code></li>
</ul>
<p><em>Note: The Course API does currently maintain values in these paths for the purposes of backward compatibility, but applications and plugins referencing these paths should plan to move to using the equivalent paths under <code>/signalk/v2/api/vessels/self/navigation/course</code>.</em></p>
</div></div><div class="col-sidebar"><div class="page-menu"><details open class="tsd-accordion tsd-page-navigation"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h3>On This Page</h3></summary><div class="tsd-accordion-details"><a href="#nodejs-default-version-updated-to-24"><span>Node.js: <wbr/>Default <wbr/>Version <wbr/>Updated to 24</span></a><ul><li><a href="#what-changed"><span>What <wbr/>Changed</span></a></li><li><a href="#dropped-platform-support"><span>Dropped <wbr/>Platform <wbr/>Support</span></a></li><li><a href="#action-required"><span>Action <wbr/>Required</span></a></li></ul><a href="#nmea-2000-source-identification-can-name"><span>NMEA 2000 <wbr/>Source <wbr/>Identification: <wbr/>CAN <wbr/>Name</span></a><ul><li><a href="#what-changed-1"><span>What <wbr/>Changed</span></a></li><li><a href="#impact"><span>Impact</span></a></li><li><a href="#migration"><span>Migration</span></a></li></ul><a href="#source-priority-all-source-data-preserved"><span>Source <wbr/>Priority: <wbr/>All <wbr/>Source <wbr/>Data <wbr/>Preserved</span></a><a href="#admin-ui-react-19-migration"><span>Admin <wbr/>UI: <wbr/>React 19 <wbr/>Migration</span></a><ul><li><a href="#what-changed-2"><span>What <wbr/>Changed</span></a></li><li><a href="#impact-on-embedded-webapps"><span>Impact on <wbr/>Embedded <wbr/>Webapps</span></a></li><li><a href="#impact-on-plugin-configuration-panels"><span>Impact on <wbr/>Plugin <wbr/>Configuration <wbr/>Panels</span></a></li><li><a href="#no-impact"><span>No <wbr/>Impact</span></a></li></ul><a href="#security-anonymous-read-access-disabled-by-default"><span>Security: <wbr/>Anonymous <wbr/>Read <wbr/>Access <wbr/>Disabled by <wbr/>Default</span></a><ul><li><a href="#impact-1"><span>Impact</span></a></li><li><a href="#mitigation"><span>Mitigation</span></a></li></ul><a href="#rest-api-changes"><span>REST <wbr/>API <wbr/>Changes</span></a><ul><li><a href="#1-resource-id-prefix-assignment"><span>1. <wbr/>Resource <wbr/>ID prefix assignment</span></a></li><li><a href="#2-resource-attributes"><span>2. <wbr/>Resource <wbr/>Attributes</span></a></li></ul><a href="#deprecations"><span>Deprecations:</span></a><ul><li><a href="#1-coursegreatcircle-courserhumbline-paths"><span>1. course<wbr/>Great<wbr/>Circle, course<wbr/>Rhumbline paths</span></a></li></ul></div></details></div><div class="site-menu"><nav class="tsd-navigation"><a href="../modules.html">Signal K</a><ul class="tsd-small-nested-navigation" id="tsd-nav-container"><li>Loading...</li></ul></nav></div></div></div><footer><p class="tsd-generator">Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></footer><div class="overlay"></div></body></html>