Window Switcher is an open-source desktop app that creates small always-on-top preview windows for selected applications.
It is designed for fast window switching and multibox workflows (games, tools, multi-client setups), without modifying target applications.
Inspired by eve-o-preview, the project focuses on broader use cases and cross-platform support.
- Display floating previews for selected windows
- Bring the original window to foreground by clicking a preview
- Optionally focus windows on mouse hover
- Filter displayed windows with whitelist prefixes
- Exclude windows with blacklist entries
- Temporarily hide a window for the current session (temp blacklist)
- Rename a window title directly from the UI
- Persist floating window size/position per window
- Tune preview behavior and highlight color from Settings
- Inspect runtime/OS/dependency status from the About window
- β Windows
- β Linux (X11 + Wayland)
- β³ macOS (not implemented)
- π΅ Fullscreen applications not supported
- Windows: native DWM thumbnail previews are used in floating windows.
- Linux (X11): screenshots are captured via ImageMagick
import, and window actions usewmctrl. - Linux (Wayland): PipeWire preview is used when dependencies are available; otherwise it falls back to screenshot mode.
- Launch Window Switcher.
- Open
Settings > Configure prefixesand add entries to the whitelist. - Open
Settings > Configure blacklistto exclude titles you do not want to see. - Floating previews are created for matching windows.
- Click a preview to focus the original window, or enable
Focus on hover. - Right-click a preview (or list item) to blacklist, temp-blacklist, or rename a window.
v0.4.0
- Add a window to configure settings
- Add the ability to rename windows
- keep track of different settings for clients like World of Warcraft
| Main window | Prefix window |
|---|---|
![]() |
![]() |
| Live preview | Settings / Rename |
|---|---|
![]() |
π₯ Example with Eve Online, World of Warcraft and Project Gorgon clients :
- Runtime: Windows or Linux
- Source build: .NET SDK 10 (
net10.0) - Linux preview/focus features require external tools (see Linux dependencies below)
Download the latest release here
Windows
- Download and run the
WindowSwitcher-Setup-*.exeinstaller from the releases page.
Linux
- Download the
*.AppImagefrom the releases page. - Make it executable and run it:
chmod +x WindowSwitcher-*.AppImage./WindowSwitcher-*.AppImage
From the repo root:
- Build:
dotnet build Window-Switcher.sln - Run:
dotnet run --project src/WindowSwitcher/WindowSwitcher.csproj - Test:
dotnet test src/WindowSwitcher.Tests/WindowSwitcher.Tests.csproj
Prerequisite: install NSIS (so makensis.exe is available).
From the repo root:
pwsh ./scripts/build-installer.ps1 -Version 0.7.0
(Works in Windows PowerShell too: powershell ./scripts/build-installer.ps1 -Version 0.7.0.)
From the repo root:
./scripts/build-appimage.sh -v 0.7.0
Output: ./artifacts/appimage/WindowSwitcher-0.7.0-linux-x64.AppImage
Make sure your system has:
wmctrl(list/focus/rename windows)- ImageMagick
import(screenshots for live preview) gst-launch-1.0+pipewiresrcplugin (PipeWire video stream)pw-dump(PipeWire node discovery and matching)gdbus(optional, only if portal fallback is enabled)
Install examples (depends on your distro):
- Debian/Ubuntu:
sudo apt install wmctrl imagemagick - Arch:
sudo pacman -S wmctrl imagemagick - Fedora:
sudo dnf install wmctrl ImageMagick
Wayland PipeWire packages (examples):
- Debian/Ubuntu:
sudo apt install gstreamer1.0-tools gstreamer1.0-pipewire pipewire-bin libglib2.0-bin - Arch:
sudo pacman -S gst-plugin-pipewire gstreamer pipewire glib2 - Fedora:
sudo dnf install gstreamer1 pipewire-gstreamer pipewire-utils glib2
- Whitelist prefixes: a window is shown when its title contains at least one configured prefix (case-insensitive).
- Blacklist: exact title matches are excluded (case-insensitive).
- Temp blacklist: hides a window by ID for the current session only.
- Drag preview windows when
Move windowsis enabled. - Resize previews when
Resize windowsis enabled. - With
Fixed size, all previews share configured width/height. - Preview position and size are restored per window key on next launch.
Disable previewsMove windowsResize windowsFocus on hoverStart minimizedWindow decorations(Linux policy)Fixed size+Width/HeightHighlight color
Help > About shows:
- App version
- OS / .NET runtime / architecture
- UI backend
- Config file path
- Active preview mode
- Linux dependency status
Settings are persisted to config.json under the app data folder:
- Windows:
%APPDATA%\\WindowSwitcher\\config.json - Linux:
~/.config/WindowSwitcher/config.json(typically)
This project is licensed under the GPL3 License.
If you find Window Switcher useful and would like to support its development, consider buying me a coffee β
Your support helps keep this project alive and motivates further improvements. Thank you! π






