Release 1.3.2
A maintenance release built around two whole-project reviews. Every fix ships with a test that fails without it — the suite grew from 2313 to 2998 checks, and ESLint now runs across the repo. Upgrading is drop-in: no migrations, no configuration changes.
✨ New
- Deleting a test asks first. The button sits in the panel that opens under the row you were reading, there is no undo, and it used to delete on the click.
- The whole interface answers a keyboard. Nine cards on the statistics page and every node card were click-only, so the expanded charts and the node switcher could not be reached without a mouse.
- A grade is stated on the glyph, consistently across the overview, node cards, detail pane and statistics panels — with a new preference to colour the figure as well.
- Dates and numbers follow the app's language, not the browser's.
🔒 Security
- Preview mode is genuinely read-only. Clearing the history, factory resetting, deleting a test, changing any setting and pausing the schedule were all reachable without a password on a demo instance. Worst was the node proxy: it reaches a different machine and substitutes that machine's stored password. One shared guard now covers every mutating route, and a test walks the route table so a new one cannot miss it. Running a test still works.
- The failed-password limit counts simultaneous attempts, not just sequential ones, across the password header, the sign-in route and the Prometheus scrape. A server that is merely busy comparing now says so, instead of reporting a correct password as wrong.
🐛 Fixes
Statistics — the failure count in the status bar and on the statistics page were computed by two different rules; an unrecorded test duration dragged a chart bucket's average down; the "showing N of M" note could claim a reduced view of a chart that was drawn in full; the bufferbloat trend could be drawn out of order; the expanded overview printed latency to two decimals where every other panel printed one; the two target bars ignored the grade palette.
Speedtests — a provider CLI printing an empty JSON array crashed the server outright rather than recording a failed test; a CLI download that extracted nothing reported success; a failure that could not be recorded left the instance marked "running" and silenced the integration keep-alive.
Integrations — Pushover rejects messages over 1024 characters, so the failures with the most to say never arrived; a stray backtick in a provider's error broke Discord's formatting, and a link in provider output became a real one; outbound responses are now read to completion instead of left open.
Nodes & configuration — deleting the node you were viewing left the app pointed at it; the proxy asked children for compressed replies it could not decode; a non-string password answered 500 instead of 400; a configuration change told the integrations and revoked every session before the write it described; the storage dialog could report a database size of zero; the OpenGraph image left out the current day east of UTC.
Downloads
| Platform | x86-64 | ARM64 |
|---|---|---|
| Windows | EXE · MSI | |
| Linux | Binary | Binary |
| macOS | Binary | Binary |
Source Distribution
- ZIP Archive (requires Bun runtime)
Docker Images
i7gamer/myspeed:latesti7gamer/myspeed:1.3.2