2026-07-22 · Jordan Hale · 877 words
Update channel habits
electron-updater talks to updates.maskwright.com. Core version versus spoofed UA is a coherence issue. This how-to is update hygiene for a local app.

Packaged MaskWright builds ask https://updates.maskwright.com whether a newer package exists. That is electron-updater with a generic provider. Dev builds skip the path. This how-to is update hygiene: what leaves, what a core bump does to a profile, and why a spoofed user agent that disagrees with the binary is a coherence bug.
What leaves this machine is the ledger. This page is the habit. The rest of the cluster lives under Privacy.
What the update check is
The app, not the profile browser, talks to the update host. I have not logged the exact payload in our repo. Treat it as ordinary electron-updater behavior: version, platform, a request for a package. It is not a profile upload. profiles.json stays on disk. Cookie JSON stays on disk.
The update host sees that a copy of the app checked in. If you run an air-gapped box, you will not get packages from us unless you carry them yourself. That is a valid choice. You will also miss fixes.
There is no analytics SDK in the desktop source. The update check is still traffic. "No server" as a slogan is overstated. "No profile cloud" is the claim that holds.
| Build type | Update check | What it is not |
|---|---|---|
| Packaged Windows build | updates.maskwright.com via electron-updater | A profile upload |
| Dev build | Skipped (dev-skipped) | A reason to skip backups |
| Air-gapped box | None unless you carry the installer | Fully offline forever without a process |
A cloud browser updates on the vendor's schedule, on the vendor's disk. Cloud browser risk is that custody. Our update is a package for your Windows box. If a vendor is breached matters less for cookies we never held, and still matters for the update host if someone ships a bad package. Download from the channel you meant.
Core version versus spoofed UA
The custom Chromium target is 131.0.6778.85. Fingerprint apply can set a user agent and Client Hints. If those say 131 and you actually launched system Chrome 132-plus, the page can read both stories. If those say a current Chrome and you launched the 131 core, same problem the other way.
Habit: after an app update or a core install, check which executable came up, then check that UA and Client Hints match that family. Do not leave a lab UA on a live ads profile across a bump.
Firefox and Camoufox are a second family. A bump from stock Firefox to Camoufox (or the reverse) is a new handshake. Do not do that under a login you intend to keep without noticing.
What is a cloud phone: we do not ship one. An update will not add Android. Desktop profiles stay desktop.
What I do before I take a package
I note which profiles are live and I stop them from the app. I do not update underneath a running Chromium with a listening internal CDP port and a full login.
I back up maskwright-data if the profiles matter. An update should not wipe the store. I still want a copy I can point at. The index is AES-256-GCM. The trees are not. localStorage exports are plaintext. So are cookie exports. Those backups are keys.
I read the notes for the package if we published any. I do not take a core bump on Friday before a Monday ads launch unless I have a reason.
Downloads: installer files in the tray are not secrets, but they are easy to grab from the wrong USB. Keep the NSIS you meant.
What I do not do
I do not turn the update channel into a fingerprint. The host is ours. It does not need to see your profiles.
I do not disable updates forever on a box that holds live logins unless I have a patch process of my own. Stale Electron and stale Chromium are security problems even when the job is isolation, not hardening. We dropped bandwidth sharing. We did not drop the updater.
I do not spoof a UA to look updated while I pin an old core. That is a costume. Coherence is the bar.
I do not install a third-party updater that claims to patch antidetect tools. That is how you hand the store to a stranger.
Operator sequence
- Stop work profiles.
- Copy
maskwright-dataif the logins matter. - Take the packaged update, or skip it on purpose.
- Confirm the app version and the core executable.
- Confirm UA and Client Hints still match the binary for each profile you will reopen.
- Launch one non-critical profile first if the bump was large.
Air-gap: carry the installer yourself, same sequence, no check-in to updates.maskwright.com.
FAQ
Does the updater upload my profiles? No. It is a package check. Profiles stay on disk.
Should I spoof a newer UA on an old core? No. That is a coherence bug.
Can I stay air-gapped? Yes, if you carry installers yourself and accept missed fixes.
The channel is updates.maskwright.com for packaged builds. The risk is a bad package or a mismatched UA. The habit is stop, copy, update, confirm the binary, then open authorized work. That is hygiene for a local app, not a cloud locker.
Related notes
- What leaves this machinePrivacy
- Why we dropped bandwidth sharingPrivacy
- If a vendor is breachedPrivacy
- What a cloud browser isPrivacy
- localStorage is a second cookie jarPrivacy
- Cloud browser riskPrivacy
- Downloads folder disciplinePrivacy
- What a cloud phone isPrivacy