Portable mode
A portable Umbra keeps its data next to the program, runs alongside an installed copy and leaves the rest of the machine alone.
Enabling it
Section titled “Enabling it”Put an empty portable.txt next to Umbra.exe. The release zip Umbra-<version>-portable.zip already has one; to make any folder portable, create the file yourself.
What changes
Section titled “What changes”| Installed | Portable | |
|---|---|---|
| Data (settings, widgets, themes, logs) | %APPDATA%\Umbra |
<AppDir>\data |
| WebView2 cache | user profile | <AppDir>\data |
| Start with Windows | yes, optional | no |
| Self-update and self-install | yes | no (Settings shows a download link) |
umbractl |
on PATH |
the umbractl.exe next to the exe finds the same copy |
| Single instance | one per user | one per data folder |
The UMBRA_DATA_DIR environment variable still wins over both. Tests use it to point at a temporary directory.
No collisions
Section titled “No collisions”The control pipe and the single-instance mutex are named per user, and a portable copy adds a hash of its data folder to the name (PortableMode.Hash, in Protocol.cs). That’s why a portable copy can run beside an installed one, and why two portable copies in different folders don’t see each other.
Toasts
Section titled “Toasts”Toast notifications need an AppUserModelID. The installer provides one; a portable or source run registers its own under HKCU\Software\Classes\AppUserModelId, the one registry write portable mode makes.
