Your windows, where you left them. Perch quietly remembers where each of your windows lives — which screen, which spot, what size — and puts them back there every time they reopen.
Perch sits in your system tray and does one thing well: it stops you from dragging the same windows into the same places every single day. Open your editor and it lands on the left half of your second monitor, like it always does. Reconnect your laptop to your desk and everything shuffles back to where it belongs.
Status: v2.0.0 · Linux · free & open source (GPL-3.0). See
CHANGELOG.md for what's new.
Perch ships as an AppImage — a single file you download and run. No installing, no dependencies, no Python to set up. It works on any modern Linux desktop (Ubuntu 20.04+, Debian, Fedora, openSUSE, Arch, and more).
- Download
Perch-2.0.0-x86_64.AppImagefrom the Releases page. - Make it runnable (once):
chmod +x Perch-2.0.0-x86_64.AppImage
- Run it:
./Perch-2.0.0-x86_64.AppImage
Perch appears in your system tray. Right-click the tray icon for everything — snap presets, layouts, and settings. To start it automatically at login, use the General → Start at login toggle in its settings.
Prefer a normal package that updates along with the rest of your system? Perch has a build repository, covering openSUSE Tumbleweed and Fedora from the same recipe in this repo.
openSUSE Tumbleweed
sudo zypper addrepo https://download.opensuse.org/repositories/home:/milnet:/perch/openSUSE_Tumbleweed/home:milnet:perch.repo
sudo zypper refresh
sudo zypper install perchFedora
sudo dnf config-manager addrepo --from-repofile=https://download.opensuse.org/repositories/home:/milnet:/perch/Fedora_44/home:milnet:perch.repo
sudo dnf install perchYour package manager will ask you to trust the repository's signing key the first time — that's expected. Afterwards Perch updates with everything else.
Coming soon: one-command installs via Flathub and the AUR — see the roadmap. Until then, the AppImage above is the easy button and the RPM repository is the tidy one.
- Remembers everything about each window — position, size, which monitor, which virtual desktop — and restores it when the window reopens.
- Snap presets from the tray: centre, left/right half, the four quarters, and "maximise on this screen".
- Named layouts — flip your whole screen between "coding", "media", and "writing" arrangements in one click.
- Rules — "always open Firefox on monitor 2, maximised" and it just happens.
- Docked vs. laptop profiles — different window positions for when your laptop is at your desk versus on its own.
- Global hotkeys for snap presets.
- An exclusions list so splash screens and little dialogs are left alone.
- Export / import your setup so it survives a reinstall or moves to a new machine.
Perch supports the mainstream Linux display servers through a plug-in design.
| Your desktop | Support |
|---|---|
| KDE Plasma (X11 or Wayland) | ✅ full |
| Any X11 desktop (Xfce, MATE, Cinnamon, i3, …) | ✅ full |
| GNOME (Wayland) | 🚧 stub — help wanted |
| Sway / wlroots | 🚧 stub — help wanted |
| Hyprland | 🚧 stub — help wanted |
The "stub" backends have the wiring in place but need a contributor to finish
them — adding one means implementing a single interface
(docs/03-backend-interface.md), no changes to
Perch's core.
Not yet — Perch is Linux-only today. A Windows edition (same idea, native Win32 backend, fully self-contained installer) is on the roadmap.
Perch is Python 3.12+ with PySide6 (Qt 6). To run from source:
git clone https://github.com/milnet01/perch.git
cd perch
python -m venv .venv && source .venv/bin/activate
python -m pip install -e ".[dev]"
perch --version- Full dev setup, tests, and the pre-push check:
docs/contributing-dev-setup.md. - Build the AppImage yourself:
packaging/appimage/. - Design docs (how it all works):
docs/.
Contributions welcome — please read CONTRIBUTING.md first.
Perch is docs-first: any behaviour change updates the relevant docs/ file
in the same change.