Prism Window is a macOS menu bar app that moves the focused window to the correct display using user-defined rules.
- Rule-based window placement per app
- Fullscreen or windowed placement rules
- Auto-apply when an app becomes frontmost
- Multiple named setup profiles for the same physical display arrangement
- Manual move UI in the menu bar
- Remove the focused app's rule directly from the menu bar for the current display setup and profile
- Visual display layout picker
- Settings UI for editing rules, profiles, and display setups
Download the app from GitHub Releases. Official builds support automatic updates. Use “Automatically check for updates” or “Check for Updates…” in the menu bar panel.
Build and launch the app from source:
./scripts/build-app.sh
open ".build/release/Prism Window.app"Use the app bundle for local testing: it includes the Sparkle framework required at runtime. swift run PrismWindow does not bundle that framework and can fail to launch. Quit any running copy of Prism Window before opening the newly built app.
Local builds use ad-hoc signing and are not notarized. Official distribution builds use Developer ID signing and Apple notarization. Automatic updates are not configured in local builds or forks, and update controls are hidden. No update service or signing secrets are required to build and run the app locally.
- Accessibility: required for reading and moving windows
- Screen Recording: not required
Prism Window uses the macOS Accessibility API to move windows between displays.
For normal windows, Prism Window updates the window position and size directly.
For fullscreen windows, Prism Window uses a public-API fallback flow:
- Exit fullscreen
- Move the window to the target display
- Re-enter fullscreen if required
This keeps the app compatible with direct distribution and avoids private CGS APIs, but it is not a true Space-to-Space transfer.
Rules are organized in two layers:
- Physical display setup: the currently connected monitor arrangement
- Setup profile: a named rule set for that arrangement, such as
Work,Home, orPresentation
You can keep multiple profiles for the same display setup and switch which one auto-applies.
- Some apps refuse
AXFullScreentoggling or window resize operations - Fullscreen moves use a fallback flow, so stale snapshots or residual animations can sometimes remain on the source display
- Stage Manager, Mission Control, and Space transitions can affect perceived behavior
- Public APIs do not provide a true Space-to-Space fullscreen move
Official release, signing, notarization, and update-feed procedures are documented in Release Maintenance.