kernalix7/winpodx

Windows pod system for Linux

Python

2,097

897 commits

updated Oct 12, 2026

See the code

README

WinPodX

Click an app. Word opens. That's it.

Windows apps as native Linux windows — real icons, real WM_CLASS, pin-to-taskbar.
FreeRDP RemoteApp over dockur/windows. No permanent full-screen desktop, no manual setup.

# Install (latest stable release)
curl -fsSL https://raw.githubusercontent.com/kernalix7/winpodx/main/install.sh | bash

# Development branch (may be unstable)
curl -fsSL https://raw.githubusercontent.com/kernalix7/winpodx/main/install.sh | bash -s -- --main

# Uninstall (keeps the Windows VM; add --purge to wipe everything)
curl -fsSL https://raw.githubusercontent.com/kernalix7/winpodx/main/uninstall.sh | bash -s -- --confirm
Windows apps as native Linux windows on KDE

Windows About / Task Manager / PowerShell, each in its own Linux window, next to the WinPodX Dashboard.

Beta Latest CI tests Discord

license python stars downloads

Works on

openSUSE Fedora Fedora Atomic Desktops Debian Ubuntu RHEL family Arch NixOS AppImage

English · 한국어 · Install · Usage · Features · Architecture · Comparison


Contents: Requirements · Install · Launch · Desktop app · Key features · Documentation · Testing · Contributing


Status: Beta

WinPodX is in active development, v0.12.0.

  • A six-page Windows-style setup wizard in the desktop app (Welcome, Configuration, Prerequisites, Review, Install, Finish), with storage directory and a local Windows ISO picked from one place
  • Setup progress in CLI and GUI, shared GUI dialog chrome, and localized installer messages
  • First GUI provisioning requires the guest agent; automatic discovery retries use 60/120/180/240/300-second delays when needed
  • Install-time recovery notifications stay suppressed for the duration of a GUI install, without changing recovery-toast behaviour for non-install launches
  • Installed PNG icons gain SVG wrappers without vectorization; hicolor index.theme is repaired, and .desktop Icon= values remain theme names
  • AppImage source delivery is implemented: SHA256-verified originals, indexes, licenses, input locks, and recipes form winpodx-appimage-sources.tar.gz; tag builds attach it with PROVENANCE.json, SOURCE-OFFER.txt, and SHA256SUMS alongside the binary. Each artifact has its own provenance and source-delivery record; this is not blanket legal or security clearance.
  • Opt-in [pod] extra_ports accepts port-mapping strings, for example ["25000:30000/tcp"]
  • Reverse-open shim builds have a recorded lockfile and build inventory; crate and Rust standard-library notices accompany guest copies

Full detail in the CHANGELOG.

What you get

Each Windows app opens as its own Linux window, keeping its icon, taskbar entry, and file associations. Clipboard, audio, printers, and your home directory are shared both ways. You only see a full Windows desktop when you ask for one with winpodx app run desktop.

WinPodX runs Windows in a container in the background and starts it on demand — the pod pauses when idle and wakes on your next launch.

Requirements

Virtualization must be available before Windows can boot. These three checks catch almost every "installed fine but Windows never started" report:

RequirementCheckFix
Intel VT-x or AMD-V enabledlscpu | grep -i virtualizationEnable Intel Virtualization Technology, SVM Mode, or VT-x in firmware.
KVM module loadedlsmod | grep kvmsudo modprobe kvm_intel or sudo modprobe kvm_amd.
Your user can reach KVMid -nG | tr ' ' '\n' | grep kvmsudo usermod -aG kvm $USER, then log out and back in.

Hardware: x86_64 or aarch64 with virtualization extensions, 8 GB RAM (12 GB recommended), and room for the 64 GB default Windows disk plus an installer ISO.

Software: FreeRDP 3+ and Podman with a compose provider, or Docker. Rootless Podman also needs /etc/subuid and /etc/subgid entries. Run winpodx setup-host to fix the group and subuid setup in one prompt, and winpodx doctor any time to see what is still missing.

Install

The curl one-liner in the header works on every supported distribution and finishes setup for you. Native packages are also available:

# openSUSE Tumbleweed / Leap / Slowroll
sudo zypper addrepo https://download.opensuse.org/repositories/home:/Kernalix7/openSUSE_Tumbleweed/home:Kernalix7.repo
sudo zypper install winpodx

# Fedora 42 / 43 / 44 (dnf5 — Fedora 41+)
sudo dnf config-manager addrepo --from-repofile=https://download.opensuse.org/repositories/home:/Kernalix7/Fedora_43/home:Kernalix7.repo
sudo dnf install winpodx

# Debian / Ubuntu — the matching .deb from the latest release
sudo apt install ./winpodx_<version>_all_debian13.deb

# AlmaLinux / Rocky / RHEL 9 / 10 — the matching .rpm
sudo dnf install ./winpodx-<version>-0.noarch.el10.rpm

# Arch
yay -S winpodx

# Nix
nix run github:kernalix7/winpodx

# AppImage — one file, any x86_64 distro
chmod +x winpodx-x86_64.AppImage
./winpodx-x86_64.AppImage setup

After a package, AppImage, source, or wheel install, run setup once. Package installs deliberately ship the binary only, so apt install never triggers a long Windows download on its own:

winpodx setup              # host-detected defaults, no prompts
winpodx setup --customize  # pick backend, VM settings, storage directory, and optional local Windows ISO

Setup writes the configuration, verifies the host, provisions Windows, discovers your apps, and registers desktop entries. In --customize, press Enter at the storage and ISO prompts to keep the default storage directory and download Windows; the wizard reviews both choices before creating the pod. Existing guest storage is not moved or replaced by setup; use winpodx setup --migrate-storage to relocate it. winpodx gui first-run setup uses the same six-page wizard: Welcome, Configuration, Prerequisites, Review, Install, Finish. It selects Podman or Docker, VM specs, edition, storage directory, and an optional local ISO, then checks those exact choices before provisioning. A local ISO does not promise a fully offline install. Reinstall keeps the existing backend, storage, and installation media, and asks for wipe confirmation only after review.

Updating: re-run the curl installer to upgrade a curl install in place, keeping your config and VM (this works on Bazzite and other rpm-ostree hosts too). Package and AppImage installs update through whatever you installed them with.

On RHEL 9, AlmaLinux 9, and Rocky Linux 9 the default python3 is older than WinPodX supports; the el9 package pulls in the Python 3.11 stack from AppStream automatically.

Offline and air-gapped installs, building from source, Nix, and full uninstall are covered in INSTALL.md.

Launch

winpodx app run word              # Launch Word
winpodx app run word ~/doc.docx   # Open a file with it
winpodx app run desktop           # Full Windows desktop
winpodx launch                    # Searchable Start-style app picker
winpodx gui                       # Desktop app

Or just click a Windows app in your application menu — WinPodX installs real desktop entries for everything it discovers. Bind winpodx launch to a custom shortcut (KDE: System Settings → Shortcuts; GNOME: Settings → Keyboard) for a system-wide hotkey.

Desktop app

WinPodX Dashboard

winpodx gui opens a Windows 11 Settings-style shell with eight pages:

PageWhat it holds
DashboardPod state with Start/Stop, RAM / CPU / disk rings, quick actions, running sessions, pinned apps
ApplicationsStart Menu tiles with search, category counts, grid or list view, and per-app actions
SettingsConnection, hardware, Windows Update, integration, and language, grouped by intent, with a marker until you save
ToolsPod and guest operations — suspend, resume, grow disk, debloat, apply fixes
TerminalPod and app logs with a filtered command bar
InfoVersion, health checks, and one-click copyable diagnostics
DevicesUSB and PCI passthrough, grouped by bus, with risky assignments flagged
LicenseLicense text and third-party acknowledgements

The navigation pane is 320 px wide normally and collapses to a 48 px icon rail below 1100 px, where the hamburger button overlays it on top of the content. The theme follows your desktop's light or dark preference; set WINPODX_COLOR_SCHEME=light|dark to override it, or WINPODX_NATIVE_TITLEBAR=1 to use your window manager's decorations instead of the built-in title bar. See the GUI tour for the rest.

Key features

AreaWhat it does
Seamless appsRemoteApp opens each app as a native window with real icons, WM_CLASS, taskbar integration, file associations, multi-monitor support, and up to 50 concurrent RDP sessions.
App discoveryImports Start Menu-visible Win32 and UWP apps with their icons. Rescan with winpodx app refresh or from Applications.
SharingTwo-way clipboard, audio, printers, \\tsclient\home, removable media, and USB or PCI passthrough.
Reverse-openLinux apps appear in the Windows Open with menu and receive files back on the host through a controlled listener.
Pod operationPodman by default, with Docker and manual RDP supported. Auto-pauses when idle, recovers a stalled guest, rotates passwords, and grows the Windows disk.
Privacy and tuningOptional Windows debloat, host-adaptive KVM tuning, DPI detection, an allowlist for FreeRDP flags, time sync, and optional bare-metal disguise.
LanguagesCLI, tray, and desktop app in English, Korean, Chinese, Japanese, German, French, and Italian.

Documentation

DocumentContents
INSTALL.mdEvery install path, updating, offline, source, Nix, uninstall
USAGE.mdCLI reference, GUI tour, health checks, configuration
FEATURES.mdRemoteApp, reverse-open, peripherals, discovery, passthrough
ARCHITECTURE.mdSystem diagram, source tree, data flows
COMPARISON.mdWinPodX vs winapps, LinOffice, winboat, and Wine
CHANGELOG.mdVersion history
CONTRIBUTING.mdDevelopment setup and workflow
SECURITY.mdSecurity reporting process

Testing

export PYTHONPATH="$PWD/src"
python3 -m pytest tests/ -n auto     # 4000+ tests, seconds in parallel
ruff check src/ tests/
ruff format --check src/ tests/

Contributing and license

Read CONTRIBUTING.md before sending a change; security reports follow SECURITY.md. WinPodX is MIT licensed, Kim DaeHyun.

For setup help, questions, and release chatter, join the Discord community. Bugs and feature requests still belong in issues so they stay searchable.

Star History

WinPodX GitHub star history

Support

If WinPodX makes your Linux desktop a little nicer:

GitHub Sponsors Ko-fi Fairy

GitHub Sponsors handles recurring or one-time sponsorship, Ko-fi covers international cards and PayPal, and fairy.hada.io is a Korean tipping platform. Bug reports, PRs, and stars are just as welcome — and free.

kernalix7/winpodx

Windows pod system for Linux

Python

2,097

897 commits

updated Oct 12, 2026

See the code

README

WinPodX

Click an app. Word opens. That's it.

Windows apps as native Linux windows — real icons, real WM_CLASS, pin-to-taskbar.
FreeRDP RemoteApp over dockur/windows. No permanent full-screen desktop, no manual setup.

# Install (latest stable release)
curl -fsSL https://raw.githubusercontent.com/kernalix7/winpodx/main/install.sh | bash

# Development branch (may be unstable)
curl -fsSL https://raw.githubusercontent.com/kernalix7/winpodx/main/install.sh | bash -s -- --main

# Uninstall (keeps the Windows VM; add --purge to wipe everything)
curl -fsSL https://raw.githubusercontent.com/kernalix7/winpodx/main/uninstall.sh | bash -s -- --confirm
Windows apps as native Linux windows on KDE

Windows About / Task Manager / PowerShell, each in its own Linux window, next to the WinPodX Dashboard.

Beta Latest CI tests Discord

license python stars downloads

Works on

openSUSE Fedora Fedora Atomic Desktops Debian Ubuntu RHEL family Arch NixOS AppImage

English · 한국어 · Install · Usage · Features · Architecture · Comparison


Contents: Requirements · Install · Launch · Desktop app · Key features · Documentation · Testing · Contributing


Status: Beta

WinPodX is in active development, v0.12.0.

  • A six-page Windows-style setup wizard in the desktop app (Welcome, Configuration, Prerequisites, Review, Install, Finish), with storage directory and a local Windows ISO picked from one place
  • Setup progress in CLI and GUI, shared GUI dialog chrome, and localized installer messages
  • First GUI provisioning requires the guest agent; automatic discovery retries use 60/120/180/240/300-second delays when needed
  • Install-time recovery notifications stay suppressed for the duration of a GUI install, without changing recovery-toast behaviour for non-install launches
  • Installed PNG icons gain SVG wrappers without vectorization; hicolor index.theme is repaired, and .desktop Icon= values remain theme names
  • AppImage source delivery is implemented: SHA256-verified originals, indexes, licenses, input locks, and recipes form winpodx-appimage-sources.tar.gz; tag builds attach it with PROVENANCE.json, SOURCE-OFFER.txt, and SHA256SUMS alongside the binary. Each artifact has its own provenance and source-delivery record; this is not blanket legal or security clearance.
  • Opt-in [pod] extra_ports accepts port-mapping strings, for example ["25000:30000/tcp"]
  • Reverse-open shim builds have a recorded lockfile and build inventory; crate and Rust standard-library notices accompany guest copies

Full detail in the CHANGELOG.

What you get

Each Windows app opens as its own Linux window, keeping its icon, taskbar entry, and file associations. Clipboard, audio, printers, and your home directory are shared both ways. You only see a full Windows desktop when you ask for one with winpodx app run desktop.

WinPodX runs Windows in a container in the background and starts it on demand — the pod pauses when idle and wakes on your next launch.

Requirements

Virtualization must be available before Windows can boot. These three checks catch almost every "installed fine but Windows never started" report:

RequirementCheckFix
Intel VT-x or AMD-V enabledlscpu | grep -i virtualizationEnable Intel Virtualization Technology, SVM Mode, or VT-x in firmware.
KVM module loadedlsmod | grep kvmsudo modprobe kvm_intel or sudo modprobe kvm_amd.
Your user can reach KVMid -nG | tr ' ' '\n' | grep kvmsudo usermod -aG kvm $USER, then log out and back in.

Hardware: x86_64 or aarch64 with virtualization extensions, 8 GB RAM (12 GB recommended), and room for the 64 GB default Windows disk plus an installer ISO.

Software: FreeRDP 3+ and Podman with a compose provider, or Docker. Rootless Podman also needs /etc/subuid and /etc/subgid entries. Run winpodx setup-host to fix the group and subuid setup in one prompt, and winpodx doctor any time to see what is still missing.

Install

The curl one-liner in the header works on every supported distribution and finishes setup for you. Native packages are also available:

# openSUSE Tumbleweed / Leap / Slowroll
sudo zypper addrepo https://download.opensuse.org/repositories/home:/Kernalix7/openSUSE_Tumbleweed/home:Kernalix7.repo
sudo zypper install winpodx

# Fedora 42 / 43 / 44 (dnf5 — Fedora 41+)
sudo dnf config-manager addrepo --from-repofile=https://download.opensuse.org/repositories/home:/Kernalix7/Fedora_43/home:Kernalix7.repo
sudo dnf install winpodx

# Debian / Ubuntu — the matching .deb from the latest release
sudo apt install ./winpodx_<version>_all_debian13.deb

# AlmaLinux / Rocky / RHEL 9 / 10 — the matching .rpm
sudo dnf install ./winpodx-<version>-0.noarch.el10.rpm

# Arch
yay -S winpodx

# Nix
nix run github:kernalix7/winpodx

# AppImage — one file, any x86_64 distro
chmod +x winpodx-x86_64.AppImage
./winpodx-x86_64.AppImage setup

After a package, AppImage, source, or wheel install, run setup once. Package installs deliberately ship the binary only, so apt install never triggers a long Windows download on its own:

winpodx setup              # host-detected defaults, no prompts
winpodx setup --customize  # pick backend, VM settings, storage directory, and optional local Windows ISO

Setup writes the configuration, verifies the host, provisions Windows, discovers your apps, and registers desktop entries. In --customize, press Enter at the storage and ISO prompts to keep the default storage directory and download Windows; the wizard reviews both choices before creating the pod. Existing guest storage is not moved or replaced by setup; use winpodx setup --migrate-storage to relocate it. winpodx gui first-run setup uses the same six-page wizard: Welcome, Configuration, Prerequisites, Review, Install, Finish. It selects Podman or Docker, VM specs, edition, storage directory, and an optional local ISO, then checks those exact choices before provisioning. A local ISO does not promise a fully offline install. Reinstall keeps the existing backend, storage, and installation media, and asks for wipe confirmation only after review.

Updating: re-run the curl installer to upgrade a curl install in place, keeping your config and VM (this works on Bazzite and other rpm-ostree hosts too). Package and AppImage installs update through whatever you installed them with.

On RHEL 9, AlmaLinux 9, and Rocky Linux 9 the default python3 is older than WinPodX supports; the el9 package pulls in the Python 3.11 stack from AppStream automatically.

Offline and air-gapped installs, building from source, Nix, and full uninstall are covered in INSTALL.md.

Launch

winpodx app run word              # Launch Word
winpodx app run word ~/doc.docx   # Open a file with it
winpodx app run desktop           # Full Windows desktop
winpodx launch                    # Searchable Start-style app picker
winpodx gui                       # Desktop app

Or just click a Windows app in your application menu — WinPodX installs real desktop entries for everything it discovers. Bind winpodx launch to a custom shortcut (KDE: System Settings → Shortcuts; GNOME: Settings → Keyboard) for a system-wide hotkey.

Desktop app

WinPodX Dashboard

winpodx gui opens a Windows 11 Settings-style shell with eight pages:

PageWhat it holds
DashboardPod state with Start/Stop, RAM / CPU / disk rings, quick actions, running sessions, pinned apps
ApplicationsStart Menu tiles with search, category counts, grid or list view, and per-app actions
SettingsConnection, hardware, Windows Update, integration, and language, grouped by intent, with a marker until you save
ToolsPod and guest operations — suspend, resume, grow disk, debloat, apply fixes
TerminalPod and app logs with a filtered command bar
InfoVersion, health checks, and one-click copyable diagnostics
DevicesUSB and PCI passthrough, grouped by bus, with risky assignments flagged
LicenseLicense text and third-party acknowledgements

The navigation pane is 320 px wide normally and collapses to a 48 px icon rail below 1100 px, where the hamburger button overlays it on top of the content. The theme follows your desktop's light or dark preference; set WINPODX_COLOR_SCHEME=light|dark to override it, or WINPODX_NATIVE_TITLEBAR=1 to use your window manager's decorations instead of the built-in title bar. See the GUI tour for the rest.

Key features

AreaWhat it does
Seamless appsRemoteApp opens each app as a native window with real icons, WM_CLASS, taskbar integration, file associations, multi-monitor support, and up to 50 concurrent RDP sessions.
App discoveryImports Start Menu-visible Win32 and UWP apps with their icons. Rescan with winpodx app refresh or from Applications.
SharingTwo-way clipboard, audio, printers, \\tsclient\home, removable media, and USB or PCI passthrough.
Reverse-openLinux apps appear in the Windows Open with menu and receive files back on the host through a controlled listener.
Pod operationPodman by default, with Docker and manual RDP supported. Auto-pauses when idle, recovers a stalled guest, rotates passwords, and grows the Windows disk.
Privacy and tuningOptional Windows debloat, host-adaptive KVM tuning, DPI detection, an allowlist for FreeRDP flags, time sync, and optional bare-metal disguise.
LanguagesCLI, tray, and desktop app in English, Korean, Chinese, Japanese, German, French, and Italian.

Documentation

DocumentContents
INSTALL.mdEvery install path, updating, offline, source, Nix, uninstall
USAGE.mdCLI reference, GUI tour, health checks, configuration
FEATURES.mdRemoteApp, reverse-open, peripherals, discovery, passthrough
ARCHITECTURE.mdSystem diagram, source tree, data flows
COMPARISON.mdWinPodX vs winapps, LinOffice, winboat, and Wine
CHANGELOG.mdVersion history
CONTRIBUTING.mdDevelopment setup and workflow
SECURITY.mdSecurity reporting process

Testing

export PYTHONPATH="$PWD/src"
python3 -m pytest tests/ -n auto     # 4000+ tests, seconds in parallel
ruff check src/ tests/
ruff format --check src/ tests/

Contributing and license

Read CONTRIBUTING.md before sending a change; security reports follow SECURITY.md. WinPodX is MIT licensed, Kim DaeHyun.

For setup help, questions, and release chatter, join the Discord community. Bugs and feature requests still belong in issues so they stay searchable.

Star History

WinPodX GitHub star history

Support

If WinPodX makes your Linux desktop a little nicer:

GitHub Sponsors Ko-fi Fairy

GitHub Sponsors handles recurring or one-time sponsorship, Ko-fi covers international cards and PayPal, and fairy.hada.io is a Korean tipping platform. Bug reports, PRs, and stars are just as welcome — and free.

Significant stargazers

XhmikosR

3,475 followers · starred Jun 2026

Neal Gompa (ニール・ゴンパ)

468 followers · starred May 2026

Salim B

36 followers · starred May 2026

Adam Haglund

145 followers · starred May 2026