Skip to content

SebastienDuruz/Window-Switcher

Repository files navigation

Window Switcher

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.

What you can do

  • 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

Compatibility

  • βœ… Windows
  • βœ… Linux (X11 + Wayland)
  • ⏳ macOS (not implemented)

Limitations

  • πŸ–΅ Fullscreen applications not supported

How it works

  • Windows: native DWM thumbnail previews are used in floating windows.
  • Linux (X11): screenshots are captured via ImageMagick import, and window actions use wmctrl.
  • Linux (Wayland): PipeWire preview is used when dependencies are available; otherwise it falls back to screenshot mode.

Typical workflow

  1. Launch Window Switcher.
  2. Open Settings > Configure prefixes and add entries to the whitelist.
  3. Open Settings > Configure blacklist to exclude titles you do not want to see.
  4. Floating previews are created for matching windows.
  5. Click a preview to focus the original window, or enable Focus on hover.
  6. Right-click a preview (or list item) to blacklist, temp-blacklist, or rename a window.

Demo

v0.7.0

πŸŽ₯ Example with 3 World of Warcraft clients, on Arch Linux KDE (Wayland)

Watch the video

v0.4.0

Features

  • 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
Screenshot 1 Screenshot 2
Live preview Settings / Rename
Screenshot 3 Screenshot 4 Screenshot 4

πŸŽ₯ Example with Eve Online, World of Warcraft and Project Gorgon clients :

Watch the video

Requirements

  • Runtime: Windows or Linux
  • Source build: .NET SDK 10 (net10.0)
  • Linux preview/focus features require external tools (see Linux dependencies below)

Installation

Download the latest release here

Quick start

Windows

  • Download and run the WindowSwitcher-Setup-*.exe installer from the releases page.

Linux

  • Download the *.AppImage from the releases page.
  • Make it executable and run it:
    • chmod +x WindowSwitcher-*.AppImage
    • ./WindowSwitcher-*.AppImage

Build from source

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

Build Windows installer (scripted)

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.)

Build Linux AppImage (scripted)

From the repo root:

./scripts/build-appimage.sh -v 0.7.0

Output: ./artifacts/appimage/WindowSwitcher-0.7.0-linux-x64.AppImage

Linux dependencies

Make sure your system has:

  • wmctrl (list/focus/rename windows)
  • ImageMagick import (screenshots for live preview)
  • gst-launch-1.0 + pipewiresrc plugin (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

Usage

Filters behavior

  • 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.

Floating preview behavior

  • Drag preview windows when Move windows is enabled.
  • Resize previews when Resize windows is enabled.
  • With Fixed size, all previews share configured width/height.
  • Preview position and size are restored per window key on next launch.

Settings available in-app

  • Disable previews
  • Move windows
  • Resize windows
  • Focus on hover
  • Start minimized
  • Window decorations (Linux policy)
  • Fixed size + Width/Height
  • Highlight color

In-app diagnostics

Help > About shows:

  • App version
  • OS / .NET runtime / architecture
  • UI backend
  • Config file path
  • Active preview mode
  • Linux dependency status

Configuration

Settings are persisted to config.json under the app data folder:

  • Windows: %APPDATA%\\WindowSwitcher\\config.json
  • Linux: ~/.config/WindowSwitcher/config.json (typically)

License

This project is licensed under the GPL3 License.

Donations

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! πŸ™Œ

About

A simple application to switch between windows with clickable thumbnails

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages