Skip to content

1.2.0: It updates itself now

Choose a tag to compare

@VagueDustin VagueDustin released this 23 Aug 06:06
· 110 commits to main since this release

It updates itself now. A tool whose whole job is "the things on this machine have fallen behind" should not be the thing on this machine that has fallen behind.

Download What it is
DontLeaveUpdatesToFate-1.2.0-portable.exe Single file. Run it from anywhere, installs nothing.
DontLeaveUpdatesToFate-1.2.0-setup.exe Normal installer: Start Menu entry, Add/Remove entry, installs to C:\Program Files\VagueDustin Enterprises.

x64, Windows 10 1809 or newer. Both are unsigned: SmartScreen will show "Windows protected your PC" on first run; More info → Run anyway. SHA256SUMS-1.2.0.txt is attached if you would rather verify the download than trust it.

This is the last release you have to download by hand. From 1.2.0 onward the app offers the next one itself.


Self-update

On launch it asks the GitHub Releases API for the latest tag and compares it with the running version using the same comparator the package table uses. If there is something newer, a strip appears under the title bar: what version, what you are on, a link to the notes, and a Download button. Nothing is fetched until you press it.

The download is hashed as it streams and checked against the SHA256SUMS published with the release: a mismatch deletes the file rather than leaving a half-verified installer on disk. Be clear about what that proves: the checksums come from the same release as the binary, so they catch a truncated or corrupted download and nothing more. Whether the release itself is honest is what code signing answers, and these builds are not signed.

Each build gets the right artifact. Handing an installed user a portable exe leaves them with a second unmanaged copy; handing a portable user an installer silently converts their "installs nothing" choice into an install.

Build What "install" does
Installed Closes the app, then runs the installer's normal wizard. Not /S: silently replacing an application is not a thing software should do to someone, even at their own request.
Portable Closes the app, overwrites the exe you double-clicked with the new one, and starts it again.
Unpackaged Checks, but is never offered an artifact.

Both paths hand off to a detached helper that calls Wait-Process on the app's process id before touching anything: you cannot replace a running executable on Windows, and racing the exit is how you get a half-written binary. The portable swap retries for a few seconds, because the portable build is a stub that extracts to a temp directory and our own exit does not mean the stub's image is unmapped yet.

Why not electron-updater

It is the obvious choice and it was the wrong one here. It cannot update a portable build at all, which would have left half of what ships here with no update path. Its integrity story is code signing, which these unsigned builds cannot use, so the one check it adds is the one that cannot apply. And it wants a latest.yml published alongside the artifacts, which a release can silently forget, and a release that forgets it is a release nobody can update to, with no error anywhere.

Privacy

The update check is the only network request this app makes on its own: one call to api.github.com per launch, switchable off in Settings, with a manual Check now button either way. Everything else on the network is a package manager you asked to run.

The renderer still cannot reach the network at all: the CSP is default-src 'none' with connect-src 'self', and the check runs in the main process. Adding api.github.com to the renderer's connect-src would have been the easy way to build this and would have widened the renderer's reach for no reason. A release asset is only ever fetched from a https://github.com/ URL; any other host in the API response is dropped before it becomes something the app could download and then execute.


Also in this release

  • The README no longer links to the private brand repository: that was a dead link for everyone but the author.
  • A full release history back to 1.0.0 is now on the repo's main page. Version control here starts at 1.1.0, so the 1.0.x entries are reconstructed from the build artifacts and the development record and are grouped by what was being fixed rather than split per point release.
  • 26 new tests. One of them caught a real bug before it shipped: a dev build was being offered the installer, producing a Download button that led somewhere install() would refuse to go.

Licence

Free software under the GNU AGPL v3 or later, with absolutely no warranty. Copyright © 2026 VagueDustin Enterprises. The product name, the VagueDustin Enterprises name, and the crest and gold-navy identity are not covered by the code licence.