(public) Build system migrated from webpack 4 to rspack and Node.js 16 to 24
(public) Network tests use XMLHttpRequest directly instead of the Node.js https client emulation
(public) Code style tooling migrated from TSLint to ESLint + Prettier (@signageos/codestyle)
(public) Menu navigation refactor for better navigation between elements and menu itself - no more random bugged switching pages
(public) Keyboard focus is shown by the same yellow ring everywhere - menu, buttons, inputs, selects and the console - instead of a different color per element; the yellow fill now only ever means active
(public) Network Test page checks every signageOS cluster endpoint - the EU or US cluster, switchable, plus the shared configuration CDN - and a custom URL typed in by the technician, streaming each result into a live console with its status, HTTP status and response time
(public) Connection test tells an endpoint the browser hid from one that is genuinely unreachable, so a red row now really means the device cannot reach the platform
(public) Ethernet setup can switch the interface back to automatic (DHCP)
(public) Ethernet setup validates the address, netmask, gateway and DNS before writing them, and refuses to apply a gateway that is outside the subnet it would be reached through
(public) Navigable input fields can carry a hint under the field, shown in gray and replaced by the validation message in red once the value has been submitted
(public) Internet Speed Test page redesigned into a grid of metric boxes colored by how good each result is, with live download and upload charts, per-transfer-size results, latency and jitter spread, TCP retransmits, a network quality verdict and a comparison against the previous run
(public) Speed test shows the Cloudflare edge it measured against, the public address and the device's own network
(public) Speed test can be stopped while it is running
(public) Speed test measures downloads up to 50MB and uploads of 100KB, 1MB and 10MB; the large transfers trim their number of passes to fit a time budget, so a slow link cannot keep the test running for many minutes
(public) Saving network settings reported "Saved" even when the device rejected them
(public) After saving network settings the form reloaded whichever interface came back first rather than the one just configured, so it could display another interface's addresses
(public) "Saving..." appeared only after the save had already finished instead of while it was running, and the button never returned to "Save" for a second edit
(public) Ethernet setup showed "Loading network info. Please wait." forever on a device with no Ethernet interface, while the status line simultaneously claimed a state it had not checked
(public) Only the first DNS server was ever shown on the network settings, and an empty DNS list turned the field into an uncontrolled input
(public) Fields on the Ethernet and Wi-Fi setup pages were stacked flush against each other and against their labels
(public) Rows touching with no gap also left spatial navigation comparing exactly equal edges, which could make the arrow keys skip a field such as Gateway
(public) Missing background icons on Wi-Fi and Ethernet setup pages
(public) Missing legacy vendor prefixes (e.g. flexbox) in CSS for old devices
(public) Speed test latency, jitter and upload speed showed NaN because Cloudflare changed the server-timing response header format
(public) Speed test reported upload speeds tens of times too high and latency measured as client overhead, because the metrics Cloudflare sends in the server-timing header today time server processing instead of the whole request
(public) Speed test average speeds were skewed by the 100KB transfer, which is too small to measure throughput
(public) Speed test could stay stuck showing a run in progress when every download failed
(public) Speed test showed no Cloudflare edge location and no public IP address after Cloudflare retired the /locations endpoint the edge was looked up through