The localised-notifications release: every prose notifier writes in a language you pick, and the alert says why it arrived. Drop-in — no migrations, no new environment variables, and existing notifiers keep writing English until you set their language. One behaviour changes on its own: Prometheus and InfluxDB stop publishing a latency nobody measured, so absent(myspeed_ping) starts firing where a provider reports none.
✨ New
- Notifications in the recipient's language — Discord, e-mail, Gotify, ntfy, Pushover and Telegram each take one of the interface's 23; the six shipped templates and the alert passage come from the locale files. Unset means English, and a template you edited by hand stays as you wrote it. The webhook keeps English.
- The alert says what crossed —
%alertSummary%closes the six shipped finished-templates with the baseline line and the limits missed, and vanishes on a healthy test;%baselineShortfallDownload%and%baselineShortfallUpload%give the figure alone. Add it by hand to a template you have already edited. - A failed test says what failed — the timeout, a CLI that could not be installed and an unusable interface all read "Unknown error"; a restart landing on a running test and a kill from outside read "exited with code null". All five are named now, on the row and in the notification.
- The statistics say when they cannot answer — a node too old for a comparison is named rather than drawn as an empty period, and "Last test" names its target on a multi-target instance.
🔒 Security
- The session cookie is scoped to the prefix it was issued under, and signing out clears every scope and destroys every session the browser holds. Not retroactive: a cookie already at
Path=/lives out its seven-dayMax-Age. A request without the prefix still getsPath=/, since the server answers on both routes. ChangingBASE_PATHfrom now on signs everyone out of the prefixed route. - The install path is verified —
install.shcomes from the latest release rather than the development branch, and the binary is checked against the release'sSHA256SUMS; both work from this release on. The MSI installers get checksums too. - The HTTPS redirect refuses a Host header carrying userinfo.
🐛 Fixes
- The dashboard speaks for an instance nobody alerts on — with every target opted out, the last test and the failure count went blank; and a failed first load offers a retry instead of reporting years of history as no tests.
- The metric sinks stop exporting a latency nobody measured — an empty latency block stores 0 ms, which the page already drew as a gap, and Prometheus and InfluxDB sent it, and a
-1placeholder, as real readings. InfluxDB also writes a measurement an imported history stored as text. - An impossible cron no longer leaves the instance unscheduled —
0 0 31 4 1removed the schedule entirely, broke every later settings save and stopped a clean shutdown; it falls back to the default and says so.MON,sunand7are accepted for Sunday. - The Nodes page grades against the row's own target, so a test stops wearing one colour there and another on the dashboard.
- Three sends failed on values the form accepted — an SMTP relay or MQTT broker as
[fd00::1], and ntfy or InfluxDB tokens carrying unusual characters. - A shutdown waits for the round's writes;
RUN_TEST_ON_STARTUPruns immediately rather than after the schedule offset; a CLI download that cannot succeed is left alone for five minutes instead of re-fetched on every test; template timestamps follow the instance's timezone. - iperf3 refuses a UDP target with no usable bitrate before the CLI runs, holds the bitrate to 1–10000, and shows what blank duration and stream fields run (10 s, 4 streams).
- More of the interface follows the reader's language — the calendar's first weekday, "3 dni" in Polish and Czech, "vor 7 Tagen" in German, the page's
lang, and the chart's failure tooltip, with a form of its own for a single failure. - Renaming and deleting a remote server have a button on the card, reachable by touch and keyboard, and tabbed controls are named.
- Smaller edges — daylight-saving-day comparisons cut at time lived; an unreachable node answers 502, not 400;
GET /apianswers JSON, not the dashboard;BASE_PATHlink previews point inside the app; a browser that cannot parseprefers-color-schemestays dark; results with no elapsed figure insert; the stability card says±<1 Mbps, not±0; a refused import leaves its dialog open; and Preferences stops saving a statistics range nobody chose.
Downloads
| Platform | x86-64 | ARM64 |
|---|---|---|
| Windows | EXE · MSI · EXE (no AVX2) · MSI (no AVX2) | |
| Linux | Binary · No AVX2 | Binary |
| macOS | Binary | Binary |
Source Distribution
- ZIP Archive (requires Bun runtime)
Docker Images
i7gamer/myspeed:latesti7gamer/myspeed:1.5.2
What's Changed
- Fix/review round three by @i7Gamer in #43
- chore(deps): Bump nodemailer from 9.0.5 to 9.1.0 in the server-minor-and-patch group by @dependabot[bot] in #44
- chore(deps): Bump the client-minor-and-patch group in /client with 2 updates by @dependabot[bot] in #45
- fix(release): let the MSI build use the WiX the runner already has by @i7Gamer in #46
Full Changelog: v1.5.1...v1.5.2