Skip to content
shidilPublic

About

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.

Topics

Resources

Contributing

Security policy

Stars

1 star

Watchers

0 watching

Forks

Latest commit

 

History

50 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Strip

Strip: a strip of app windows rolls beneath three fixed slots; the center slot never moves.

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.

Strip in three-up layout on a 3440×1440 ultrawide: Chrome in the center slot with a green focus ring, Terminal on the left, Finder on the right, the status pill at the top and the film rail at the bottom.

Monocle layout: one Chrome window centered, its neighbors parked just past the screen edges. Pinned layout: Finder holds the right slot while Safari and Chrome roll past it.

Left: monocle (⌃⌥1). Right: Finder pinned (⌃⌥P) while the film rolls.

What It Does

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

Strip's Overview in search mode: the query "spring" lists a Chrome tab and a Safari tab, and Chrome's card previews the selected tab.

Keyboard

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 and Scope

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

Requirements

  • 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

Build and Run

make test
make bundle
make open

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

Permissions and Privacy

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.

Uninstall

  1. Quit Strip from its menu-bar menu and delete Strip.app.
  2. Remove Strip from System Settings → Privacy & Security → Accessibility.
  3. Remove Strip from Screen & System Audio Recording in the same settings area.
  4. Contributors who ran make setup-signing may delete Strip Dev from the login keychain.

If macOS retains stale records:

tccutil reset Accessibility io.github.shidil.strip
tccutil reset ScreenCapture io.github.shidil.strip

Known Limitations

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

Development

License

Strip is available under the MIT License. Vendored development tooling retains its own license; see THIRD_PARTY_NOTICES.md.

About

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.

Topics

Resources

Contributing

Security policy

Stars

1 star

Watchers

0 watching

Forks

Releases

Contributors

Languages