v0.9.1
[0.9.1] - 2026-07-14
Fixed
-
Reinstalling after a non-purge uninstall now repopulates the app menu instead of opening to an empty first-run screen. A non-purge uninstall removes the app
.desktopentries but keeps the config, so a reinstall was detected as an "already current" migration and only re-applied the guest fixes — it never re-ran discovery, leaving the menu empty until the GUI self-healed. The migrate path now detects an empty app menu on the "already current" branch and queues discovery (the same mechanism a cross-version upgrade uses), so the apps come back automatically on the next launch. -
A non-purge
uninstall.shno longer deletes the Windows VM disk (#716, thanks @munir-abbasi — data-loss report). The default VM storage lives under the app-data dir (~/.local/share/winpodx/storage/data.img), and the "remove app definitions" step did a plainrm -rf ~/.local/share/winpodx— so a non-purge uninstall (documented as keeping the VM data), especially via the package-managerpostrmre-entry where it runs unattended, recursively wiped the Windows VM out from understorage/. Uninstall now canonicalizes both paths and, when the storage dir isDATA_DIRitself or nested beneath it and--purgewas not given, preserves the storage subtree and removes only the other app-data entries. It also reads the realstorage_pathfromwinpodx.toml(a relocated--storage-dirdisk is protected at its actual location, not just the default), requires an absolute path, and always keeps a top-levelstorageentry. A customWINPODX_STORAGE_PATHoutside the app-data dir is untouched as before, and--purgestill wipes everything. Regression-tested via the uninstall smoke harness (nested-storage, external-storage, and purge cases). -
uninstall.sh --purgenow actually purges on a package-managed install (#716 audit). It used to print "Mode: FULL PURGE" and thenexecthe package manager, replacing the process so none of its own purge steps ran — the container, volumes,storage/data.img, and the config holding your RDP password all survived while the banner claimed a full wipe.--purgenow runs every user-side purge step first and removes the package last (apt remove→purgeso dpkg drops conffiles too); non-purge still hands off as before. -
Package removal (deb/rpm/AUR) now actually cleans up (#716 audit). Every post-remove hook delegated to helper scripts under
/usr/share/winpodx/that the package manager had already deleted, soapt/dnf/pacmanremoval left the container, VM disk, config, desktop entries, autostart, and tray listener behind. Cleanup moved to the pre-remove stage (Debianprerm+ a staged copy for the purge wipe, RPM%preungated on erase, pacmanpre_remove); an in-place package upgrade never touches user data or the VM. Per-user cleanup now runs with a scrubbed environment (no rootXDG_*/D-Bus leak). -
install.shupgrades are now atomic and honest about failures (#716 audit). An upgrade builds the new tree + venv at a staging path and swaps it in only after the build succeeds, so a mid-install failure no longer leaves you with nothing (and the rollback message reflects the real state instead of always claiming "not touched"). It also honorsXDG_CONFIG_HOME, backs up (never deletes) a pre-existing pip/pipxwinpodxentry point before symlinking, and reports a failedwinpodx setupinstead of printing the success banner unconditionally.
Added
- Launching a Linux app directly from its "Linux Apps" shortcut on Windows now runs it (#616, thanks @notnotno). The reverse-open shims placed under Windows' Start Menu / Desktop "Linux Apps" folder are primarily "Open with…" chooser entries, but clicking one directly (with no file) used to do nothing — the guest shim silently exited because it required a file argument. It now emits a launch-only request (
origin: "launch", empty path) and the host runs the Linux app with no file (the%f/%uplaceholder is stripped rather than filled), so the shortcuts double as plain app launchers. Requires the updated guest shim (re-provisions on the nextwinpodx guest sync/apply-fixes).
Fixed
- The GUI's
libxcb-cursor0dependency is now auto-installed on a minimal desktop (#712, thanks @numericOverflow). Qt 6.5+ (PySide6) refuses to start itsxcbplatform plugin withoutlibxcb-cursor.so.0— "could not load the Qt platform plugin 'xcb'" — and it isn't pulled in transitively on a fresh minimal install (e.g. Linux Mint 22).install.shnow installs it (distro-mapped:libxcb-cursor0on Debian/Ubuntu/openSUSE,xcb-util-cursoron Fedora/Arch) when the GUI is enabled and the runtime lib isn't already present. Presence is detected by probing the real.soon disk across the standard lib dirs rather thanldconfig -p— on openSUSE the library lives in/usr/lib64but is absent from the ld.so cache, so anldconfigprobe re-prompted every run even with the package installed.
Contributors
Thanks to everyone who reported issues or contributed to this release: @notnotno (#616), @numericOverflow (#712), and @munir-abbasi (#716 — the data-loss report).