Strip is an experimental macOS window manager that arranges application windows on a horizontal "film strip": the focused window stays centered while its neighbors flow past it.
Website: shidil.github.io/strip, with an animated walkthrough of the idea.
Warning
Strip is an early, source-first project for developers and testers. There are no supported public binary releases yet. It can move and resize other applications' windows.
parked ← [ window ] [ window ] [ FOCUSED ] [ window ] [ window ] → parked
Strip is built with Swift and AppKit. It uses macOS Accessibility for window control and does not require disabling System Integrity Protection or installing a scripting addition.
Left: monocle (⌃⌥1). Right: Finder pinned (⌃⌥P) while the film rolls.
- A fixed center slot. Roll the film with ⌃⌥H / ⌃⌥L and the next window slides into the center; your eyes stay put. Choose one, two or three slots with ⌃⌥1–⌃⌥3.
- Pinning. Pin a slot with ⌃⌥P to keep a reference window in place while the others roll past it.
- Tiles as you work. New windows open next to the focused one; closing the centered window hands the center to its neighbor. Dialogs, palettes and small windows float.
- Overview (⌃⌥Space). Live thumbnails of every window on the film, navigable with
the arrow keys or
hjkl. - Window and tab search (⌃⌥F). Type to find any window, or any tab in Firefox, Safari, Chrome, Terminal or Finder. Arrowing onto a browser tab previews it in its card.
- Film rail and focus ring. A minimap of app icons with hover previews, dockable to any screen edge, and a colored ring around the focused window.
- Respects your hands. Strip pauses while you drag. A moved window springs back to its slot; a resized main window keeps its new size and the layout reflows around it.
- Fits stubborn apps. Strip learns each window's minimum and maximum size from what the app allows and sizes slots around those limits.
- Escape hatch. ⌃⌥0 puts every window back on screen and pauses Strip. Quitting never strands a window off-screen.
Every shortcut is behind ⌃⌥ (Control + Option). ⌃⌥/ shows them all in the app.
| Keys | Action |
|---|---|
| ⌃⌥H / ⌃⌥L | Roll the film to the previous / next window |
| ⌃⌥J / ⌃⌥K, ⌃⌥Tab | Move focus between slots |
| ⌃⌥⇧H / ⌃⌥⇧L | Swap the focused window with its neighbor |
| ⌃⌥1 ⌃⌥2 ⌃⌥3 | Monocle, two-up, three-up |
| ⌃⌥P | Pin or unpin the focused slot |
| ⌃⌥E | Toggle focus emphasis / equal widths |
| ⌃⌥= / ⌃⌥- | Widen / narrow the focused window |
| ⌃⌥↑ / ⌃⌥↓ | Make windows taller / shorter |
| ⌃⌥[ / ⌃⌥] | Tighten / loosen gaps and padding |
| ⌃⌥T | Cycle the motion style: Track, Pop, Glide |
| ⌃⌥Space | Overview |
| ⌃⌥F | Search windows and tabs (or / inside the Overview) |
| ⌃⌥0 | Release all windows / resume |
| ⌃⌥/ | Show every shortcut |
Strip's menu bar item offers the main commands, plus layout, minimap position and focus-ring options.
- Status: experimental alpha / daily-driver spike, not a supported product.
- Tested platform: macOS 14 and newer, primarily on a single ultrawide display.
- Architecture: menu-bar accessory app with a pure, unit-tested layout engine.
- Distribution: source builds only until Developer ID signing and notarized releases are ready.
- App Store: not eligible while it uses the private
_AXUIElementGetWindowidentity bridge. - Next: workspaces (several independent strips), then launch at login, a config file for hotkeys and per-app rules, and vertical columns inside each slot.
Multi-display behavior, separate Spaces, polished installation, and stable binary releases remain incomplete. See PLAN.md and BUGS.md for current status.
- macOS 14 or newer
- Xcode 16 command-line tools
- Accessibility permission for moving, resizing, observing, and focusing windows
- Screen Recording permission only for Overview thumbnails
make test
make bundle
make openUse make open for real testing. Launching the inner executable from a terminal does not receive
the same Accessibility trust because macOS TCC attributes that execution differently.
make setup-signing is an optional developer-only convenience. It creates a local self-signed
identity named Strip Dev so repeated development builds retain a stable TCC identity. It is not an
installation method and must never produce public binaries. See
docs/DEVELOPMENT_SIGNING.md.
| Permission | Why Strip uses it | When requested |
|---|---|---|
| Accessibility | Enumerate, focus, move, and resize windows; receive global hotkeys | At first launch |
| Screen Recording | Capture still in-memory thumbnails for Overview | When Overview first requests thumbnails |
Strip currently contains no networking, telemetry, analytics, crash-upload, or update-checking
code. Window data and thumbnails remain local. Thumbnails are held in memory and are not written to
disk by Strip. _AXUIElementGetWindow is used only for stable identity; movement and resizing use
public Accessibility APIs.
Read PRIVACY.md for the complete data model, compatibility warning, and revocation steps.
- Quit Strip from its menu-bar menu and delete
Strip.app. - Remove Strip from System Settings → Privacy & Security → Accessibility.
- Remove Strip from Screen & System Audio Recording in the same settings area.
- Contributors who ran
make setup-signingmay deleteStrip Devfrom the login keychain.
If macOS retains stale records:
tccutil reset Accessibility io.github.shidil.strip
tccutil reset ScreenCapture io.github.shidil.strip- The private identity symbol can change or disappear in a future macOS release.
- Mac App Store distribution is not supported.
- Terminal applications resize in character-cell increments and may visibly step.
- Applications can impose minimum or fixed window sizes that differ from requested layouts.
- Multi-display and Spaces behavior is deliberately limited.
- Privacy grants are tied to bundle identity and code signing.
- CONTRIBUTING.md — setup, tests, style, and performance rules
- docs/README.md — documentation map
- ARCHITECTURE.md — current architecture
- TESTING.md — unit, live, and VM end-to-end testing
- MEASURING.md — required performance workflow
- SECURITY.md — vulnerability reporting
Strip is available under the MIT License. Vendored development tooling retains its own license; see THIRD_PARTY_NOTICES.md.



