Initial public release.
Added
- Zero-config auto-provisioning: first app launch auto-creates config, generates the compose file, starts the container, and registers desktop entries.
- 14 bundled app definitions: Word, Excel, PowerPoint, Outlook, OneNote, Access, Notepad, Explorer, CMD, PowerShell, Paint, Calculator, VS Code, Teams.
- Auto suspend / resume: container pauses when idle and auto-resumes on the next app launch; graceful shutdown on exit.
- Password auto-rotation: cryptographically secure 20-char password, rotated every 7 days (configurable), with automatic rollback on failure.
- Manual password rotation:
winpodx rotate-password. - Office lock-file cleanup:
winpodx cleanupremoves~$*.*lock files from the home directory. - Windows time sync:
winpodx timesyncforces clock resync after host sleep/wake. - Windows debloat:
winpodx debloatdisables telemetry, ads, Cortana, search indexing. - Power management:
winpodx power --suspend/--resumefor manual container pause/unpause. - System diagnostics:
winpodx infoshows display, dependency, and config status. - Desktop notifications on app launch (D-Bus /
notify-send). - Smart DPI scaling: auto-detects scale from GNOME, KDE Plasma 5/6, Sway, Hyprland, Cinnamon, env vars, xrdb.
- Qt system tray: pod controls, app launchers, maintenance tools, idle monitor, auto-refresh.
- Multi-backend: Podman (default), Docker, libvirt/KVM, manual RDP — unified interface.
- Compose file generation for Podman/Docker backends, using the
dockur/windowsimage. - Per-app taskbar separation: each app gets its own WM_CLASS /
StartupWMClass. - Windows build pinning: feature updates blocked via
TargetReleaseVersionpolicy; security updates still applied. - Upstream update monitoring: weekly CI check for new
dockur/windowsreleases. - Concurrent launch protection: threading lock prevents simultaneous app-launch crashes.
- Windows Update toggle in GUI (services + scheduled tasks + hosts-file block).
- Sound + printer redirection enabled by default.
- USB drive sharing with hot-plug support (subfolders appear without reconnecting).
- USB device redirection via FreeRDP
urbdrcwhen available; graceful fallback to drive sharing. - USB auto drive-letter mapping on the Windows side (event-driven, no polling).
- Desktop integration:
.desktopentries, hicolor icons, MIME registration, icon-cache refresh. - TOML configuration with restrictive (
0600) file permissions for credentials. - FreeRDP session management with process tracking and a zombie reaper.
winapps.confimport for migrating from existing winapps setups.
Security
- RDP bound to 127.0.0.1 only; not exposed to the network.
- TLS-only RDP channel (SecurityLayer=2); NLA disabled only because RDP is loopback-bound.
- Input validation for container names, app names, and imported RDP flags (strict allowlists).
- Symlink / path-traversal guards on icon install and bundled-data lookups.
- Atomic config writes with
fsyncto prevent torn writes on power loss. - Password redacted from log output; log-record args cleared to prevent late-formatting leaks.
- Cert policy:
/cert:ignoreonly on localhost,/cert:tofuon remote connections. - Exclusive file locking (PID files) to prevent races on concurrent launches.
- Subprocess timeouts on desktop-integration helpers to prevent indefinite hangs.
- Imported
winapps.confRDP flag sets are filtered all-or-nothing; partial acceptance is never silent. - Username escaping on PowerShell invocations to prevent command injection.
Changed
- Default RDP port: 3390 (avoids collision with other containers on 3389).
- Default VNC port: 8007 (avoids collision with LinOffice on 8006).
- FreeRDP search order: `xfreerdp3 → xfreerdp → sdl-freerdp3 → sdl-freerdp → flatpak`.
- Uninstall always removes the container (previously `--purge` only).
- RemoteApp / RAIL enabled for seamless app windows (no full desktop).
- Per-app desktop notification removed (was noisy on every launch).