Native Linux windows for every Windows app — real icons, real WM_CLASS,
pin-to-taskbar. FreeRDP RemoteApp + dockur/windows. Zero config.
# Latest stable release (default)
curl -fsSL https://raw.githubusercontent.com/kernalix7/winpodx/main/install.sh | bash
# Latest main HEAD (development; may be unstable)
curl -fsSL https://raw.githubusercontent.com/kernalix7/winpodx/main/install.sh | bash -s -- --main
# Uninstall (keeps Windows VM data; pass --purge to wipe everything)
curl -fsSL https://raw.githubusercontent.com/kernalix7/winpodx/main/uninstall.sh | bash -s -- --confirm
Windows About / Performance Monitor / PowerShell each in their own Linux window, alongside the winpodx Apps grid.
English · 한국어 · Install · Usage · Features · Architecture · Comparison
winpodx is in active development (v0.5.0). The headline of v0.5.0 is reverse-open: Linux apps now appear in the Windows guest's right-click "Open with…" menu by default, with correct per-app icons. Double-click a
.txtinside the guest, pick Kate from the menu, and it opens in your Linux Kate against the real host file path. The host→guest pipeline (bearer-authed HTTP agent on127.0.0.1:8765, FreeRDP RemoteApp fallback) is unchanged from v0.3.x. First install still takes ~5–10 minutes (Windows VM ISO download + Sysprep + OEM apply);winpodx pod wait-ready --logsshows live progress. Please file issues at https://github.com/kernalix7/winpodx/issues if something breaks.
No full-screen RDP. Each Windows app becomes its own Linux window with its real icon — pinnable, alt-tabbable, file-associated, both directions. Drop into a full Windows desktop only when you actually want one (winpodx app run desktop).
winpodx runs a Windows container (via dockur/windows) in the background and presents Windows apps as native Linux applications through FreeRDP RemoteApp, while a bearer-authed HTTP agent inside the guest handles the host→guest command channel without flashing a PowerShell window. The reverse direction — Linux apps surfaced in the Windows "Open with…" menu — is handled by a host-side listener that consumes JSON requests written by per-slug Rust shims inside the guest. Near-zero external Python dependencies (stdlib only on Python 3.11+; one pure-Python tomli fallback on 3.9/3.10).
One-liner (any supported Linux distro):
curl -fsSL https://raw.githubusercontent.com/kernalix7/winpodx/main/install.sh | bashOr via a native package manager:
# 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
sudo dnf config-manager --add-repo https://download.opensuse.org/repositories/home:/Kernalix7/Fedora_43/home:Kernalix7.repo
sudo dnf install winpodx
# Debian / Ubuntu — grab the matching .deb from the latest release
sudo apt install ./winpodx_0.5.0_all_debian13.deb
# AlmaLinux / Rocky / RHEL 9 / 10 — grab the matching .rpm
sudo dnf install ./winpodx-0.5.0-0.noarch.el10.rpm
# Arch
yay -S winpodx
# Nix
nix run github:kernalix7/winpodxSee docs/INSTALL.md for offline / air-gapped builds, source installs, version pinning, and uninstall.
winpodx app run word # Launch Word
winpodx app run word ~/doc.docx # Open a file
winpodx app run desktop # Full Windows desktopOr just click an app icon in your application menu. See docs/USAGE.md for the full CLI, the Qt6 GUI, health checks, and configuration.
|
Reverse-open (new in v0.5.0)
|
Seamless app windows
|
|
Zero-config launch
|
Peripherals & sharing
|
|
Automation & security
|
Operations & resilience
|
See docs/FEATURES.md for deep dives, including multi-session RDP internals, app profile schema, and the reverse-open architecture.
| Document | What's inside |
|---|---|
| INSTALL.md | Every install path — one-liner, package managers, offline, Nix, source |
| USAGE.md | CLI reference, Qt6 GUI tour, health checks, configuration file |
| FEATURES.md | Reverse-open, multi-session RDP, peripherals, app profiles, auto-discovery |
| ARCHITECTURE.md | How it works (diagram), tech stack, source tree, data flows |
| COMPARISON.md | winpodx vs winapps / LinOffice / winboat, and winpodx vs Wine |
| CHANGELOG.md | Full version history |
| CONTRIBUTING.md | Development setup and workflow |
| SECURITY.md | Security disclosure process |
| Distro | Package manager | Status |
|---|---|---|
| openSUSE Tumbleweed / Leap 15.6 / Leap 16.0 / Slowroll | zypper | Tested |
| Fedora 42 / 43 / 44 | dnf | Supported |
| Fedora Silverblue / Kinoite / Sericea / Bluefin / Bazzite (42 / 43 / 44) | rpm-ostree (OBS, --apply-live) |
Supported |
| Debian 12 / 13, Ubuntu 24.04 / 25.04 / 25.10 | apt | Supported |
| AlmaLinux / Rocky / RHEL 9 / 10 | dnf | Supported |
| Arch / Manjaro | pacman + yay -S winpodx |
Supported |
| NixOS (and Nix on any distro) | nix flake | Supported |
Each tag push (v*.*.*) publishes to all channels automatically — see packaging/ for maintainer details.
# From repo root (no install needed)
export PYTHONPATH="$PWD/src"
python3 -m pytest tests/ # 1090+ tests
ruff check src/ tests/ # Lint
ruff format --check src/ tests/See CONTRIBUTING.md for development setup, branch naming, commit conventions, and CI expectations.
For security issues, follow the process in SECURITY.md.
If winpodx makes your Linux desktop a little nicer:
Ko-fi handles international cards and PayPal; fairy.hada.io is a Korean tipping platform. Bug reports, PRs, and stars on the repo are equally appreciated and free.
MIT — Kim DaeHyun (kernalix7@kodenet.io)