Bring the right window forward.
Website · Build from source · Development guide
Most switchers stop at the application. Window Gaffer goes straight to the window you meant — the project, terminal, game, conversation, or dashboard you want right now.
Give a window a shortcut, place a compact label anywhere on the screen, or use both. Labels snap to screen edges and nearby overlays as you arrange them. One action brings that window to the front while the rest of your workspace stays exactly where it was.
- One command, one exact window. Skip app-level cycling and focus the registered window directly.
- Clickable overlays across Spaces. Keep small text or emoji markers within reach, including over full-screen applications.
- Global hotkeys. Call a window without looking away from what you are doing.
- Profiles for every context. Switch complete sets of windows, labels, and shortcuts for work, focus, or play.
- A layout that stays yours. Place overlays anywhere, align them with magnetic guides, resize and rename them, then lock the layout in place.
- Automatic reconnection. If a target disappears, its marker stays muted and reconnects when the window returns.
Playing the same game through several windows? Give each character its own hotkey or overlay label and bring the right client forward without cycling through a stack of identical-looking windows. This works especially well for games such as EVE Online, where you may play several characters at once and need to switch between them quickly.
Window Gaffer only focuses the window you choose. It does not automate gameplay or broadcast input between clients.
- Open Window Gaffer from the menu bar and choose a window.
- Keep its suggested name or replace it with your own text or emoji.
- Assign a global hotkey, enable a clickable overlay, or use both.
- Click the marker or press the shortcut whenever that exact window should come forward.
Turn on Edit Overlays to arrange and resize labels. Turn it off to lock the layout and make every click focus its linked window. The built-in Default profile works immediately; creating more profiles is optional.
No screenshots. No stored pixels.
Window Gaffer uses macOS Accessibility to list and focus ordinary windows. Screen Recording permission is not required for switching. The optional Detailed Window Names permission reads window metadata for applications that hide useful titles, but Window Gaffer never captures or stores their contents.
For runtimes such as Wine that do not register as ordinary macOS applications, Window Gaffer reads CoreGraphics metadata only: process ID, bounds, and name.
Window Gaffer currently targets macOS 27 and requires Xcode 27 with the macOS 27 SDK.
./Scripts/build-app.sh
open ".build/Window Gaffer.app"On first launch, grant access in System Settings → Privacy & Security → Accessibility.
Run the core test suite with:
swift testWindow Gaffer is a Swift Package with a native AppKit/SwiftUI application and a small platform-independent core:
| Path | Purpose |
|---|---|
Sources/WindowGaffer |
macOS application, window discovery, overlays, hotkeys, and UI |
Sources/WindowGafferCore |
matching, snapping, sizing, and persistence behavior |
Tests/WindowGafferCoreTests |
automated core tests |
Configuration/Info.plist |
application bundle metadata |
Assets |
app, menu-bar, and brand artwork |
Scripts |
reproducible build and asset utilities |
website/dist |
deployable static product website |
See DEVELOPMENT.md for repository conventions, generated files, website packaging notes, and verification commands.
Stop searching. Call the window.