github i7Gamer/MySpeed v1.2.0
Release 1.2.0

latest releases: v1.7.0, v1.6.1, v1.6.0...
one month ago

Changes since 1.1.6

New

  • Every test now records which provider measured it. The three providers do not measure the same things, so a blank packet loss could equally mean a clean line or a provider that never looks — the test now says which. Shown as "Measured with".
  • Cloudflare and LibreSpeed tests carry more. Cloudflare records the edge that answered and the address the test went out from; LibreSpeed records the network and address where its backend knows them. Both were being parsed and discarded, which is why those tests used to name no server at all. Packet loss and latency under load remain Ookla-only — neither of the others measures them.
  • "Data used" per test. How much traffic the run itself cost, in each direction — a single Ookla test moves upwards of two gigabytes, which is worth knowing before testing every fifteen minutes on a metered line.
  • The statistics cards say more, and open into something worth opening. Each of the three top cards gained a row — peak-hour slowdown, packet loss, connection stability — and the download/upload cards now state how much of your target the average reached, with the target itself named. Opening the last test shows its whole record rather than repeating the three numbers already on the card.
  • docker stop now stops. No signal handlers were installed, so every stop, restart and image upgrade blocked for the full ten-second grace period and then exited 137. Nothing was ever corrupted by it; it was just slow.

Fixed

  • A node's dashboard was sent your session cookie. While a node was selected, the parent forwarded the browser's own credential to it on every poll — typically over plain HTTP on the LAN. The proxy now substitutes the node's own credentials, as it already did for password headers.
  • Restoring a backup or resetting to factory left every existing session signed in. Both paths changed the stored password without revoking sessions, so browsers holding one kept full access for the rest of its seven days — on exactly the path an operator uses to take an instance back.
  • On SQLite, widening the error column rebuilt the speedtests table and stripped AUTOINCREMENT from its primary key. IDs of deleted tests were then handed out again, and since the list identifies tests by ID, deleting a stale row could destroy a newer one. SQLite never needed the change; it is now skipped there.
  • On MySQL, failed tests were not recorded at all. The error column was too small for what the CLI prints, and the insert was rejected from inside the handler that exists to record failures.
  • Daylight-saving edges. A range bound naming an hour the clocks repeated now takes the reading the caller asked for rather than whichever matched first, and one naming an hour that never happened moves past the gap. Range lengths are counted in days rather than milliseconds, so a window whose ends sit at different offsets is no longer a day out.
  • Views that kept showing what was no longer true. Switching range while a fetch was in flight could discard the new query and leave the list mixing two of them; a refresh landing after a node change could prepend — or replace the list with — another instance's history.
  • The server no longer refuses to start when a provider CLI cannot be downloaded, and a run no longer pins whichever server it happened to be given when "choose automatically" was selected.
  • Packet loss and connection stability each have their own icon. The square wave stood for jitter, standard deviation and packet loss at once, a few centimetres apart on the same page; it now means variation and nothing else.
  • The opened "Last test" panel was a 400px column on every display, from a laptop to an ultrawide, because a shrink-to-fit dialog gave its grid no width to lay out in. The opened overview now uses two columns where two fit.
  • Also: an allowlist entry's port is honoured as written, including a zero-padded one; interfaces the machine no longer has are dropped; Prometheus can scrape a test whose server ID was never recorded; retention's save button is released when a request never answers; a restored backup writes its defaults instead of skipping them; and the average line is no longer drawn across a range that measured nothing.

Under the hood

  • Hardening: the timezone formatter cache is bounded, prototype names are refused as integration names, and text fields reject non-strings.
  • Both READMEs' screenshots were retaken against the current interface and are now hosted in the repository rather than on a third party.

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:latest
  • i7gamer/myspeed:1.2.0

Don't miss a new MySpeed release

NewReleases is sending notifications on new releases.