Skip to content
 
 

Repository files navigation

winpodx

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

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
winpodx in action — Windows apps as native Linux windows on KDE

Windows About / Performance Monitor / PowerShell each in their own Linux window, alongside the winpodx Apps grid.

Beta Latest

license python tests CI stars downloads

Works on

openSUSE Fedora Fedora Atomic Desktops Debian Ubuntu RHEL family Arch NixOS

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


Status: Beta

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 .txt inside 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 on 127.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 --logs shows 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).

Quick install

One-liner (any supported Linux distro):

curl -fsSL https://raw.githubusercontent.com/kernalix7/winpodx/main/install.sh | bash

Or 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/winpodx

See docs/INSTALL.md for offline / air-gapped builds, source installs, version pinning, and uninstall.

Launch

winpodx app run word              # Launch Word
winpodx app run word ~/doc.docx   # Open a file
winpodx app run desktop           # Full Windows desktop

Or just click an app icon in your application menu. See docs/USAGE.md for the full CLI, the Qt6 GUI, health checks, and configuration.

Key features

Reverse-open (new in v0.5.0)

  • Linux apps appear in the Windows guest's right-click "Open with…" menu by default
  • Correct per-app icons in both the short menu and the long "Choose another app" dialog
  • Selecting one round-trips the file open to host xdg-open
  • Auto-discovers host-side Linux apps + their MIME associations from freedesktop standards
  • Manage via winpodx host-open CLI or the GUI Settings panel
  • Details →

Seamless app windows

  • RemoteApp (RAIL) renders each Windows app as a native Linux window — no full desktop
  • Per-app taskbar icons via WM_CLASS matching (/wm-class:<stem> + StartupWMClass)
  • Bidirectional file associations: double-click .docx in your file manager → Word opens
  • Multi-session RDP: bundled rdprrap auto-enables up to 10 independent sessions
  • RAIL prerequisites set automatically during unattended install

Zero-config launch

  • First app click auto-provisions everything: config, container, desktop entries
  • Auto-discovery on first boot scans the running Windows guest and registers every installed app with its real icon (Registry App Paths, Start Menu, UWP/MSIX, Chocolatey, Scoop)
  • Manual rescan any time via winpodx app refresh or the GUI Refresh button
  • Multi-backend: Podman (default), Docker, libvirt/KVM, manual RDP

Peripherals & sharing

  • Clipboard: bidirectional copy-paste (text + images) — on by default
  • Sound: RDP audio streaming (/sound:sys:alsa) — on by default
  • Printer: Linux printers shared to Windows — on by default
  • Home directory: shared as \\tsclient\home
  • USB drives: auto-mapped to drive letters (E:, F:, …) via FileSystemWatcher; subfolders work for drives plugged in after session start
  • USB device passthrough: opt-in via extra_flags (/usb:auto)

Automation & security

  • Auto suspend / resume: container pauses when idle, resumes on next launch
  • Password auto-rotation: 20-char cryptographic password, 7-day cycle with atomic rollback
  • Smart DPI scaling: auto-detects from GNOME, KDE, Sway, Hyprland, Cinnamon, xrdb
  • Windows debloat: telemetry, ads, Cortana, search indexing disabled by default
  • FreeRDP extra_flags allowlist (regex-validated) as the user-input safety boundary
  • Time sync: force Windows clock resync after host sleep/wake

Operations & resilience

  • Offline / air-gapped install (--source + --image-tar)
  • One-line uninstall (keeps Windows VM data unless --purge)
  • Health checks via winpodx check (pod / RDP / agent / disk / round-trip / password age)
  • Qt6 GUI: Apps / Settings / Tools / Terminal / Info pages — plus a lighter system tray
  • Stdlib-leaning Python (no pip-deps on 3.11+; one tomli fallback on 3.9 / 3.10)

See docs/FEATURES.md for deep dives, including multi-session RDP internals, app profile schema, and the reverse-open architecture.

Documentation

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

Supported distros

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.

Testing

# 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/

Contributing

See CONTRIBUTING.md for development setup, branch naming, commit conventions, and CI expectations.

Security

For security issues, follow the process in SECURITY.md.

Star History

Star History Chart

Support

If winpodx makes your Linux desktop a little nicer:

Ko-fi Fairy

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.

License

MIT — Kim DaeHyun (kernalix7@kodenet.io)

About

Windows pod system for Linux

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages