TrellisWM
The fractal window manager for Mac
Features
- Nest Spaces Inside Spaces
- Dock Windows to Any Edge
- Pinch to Zoom Anywhere
- Cross-App Tab Groups
- Saved Views (1–9)
- Rectangle Zoom Framing
- URL Scheme for Every Action
- Customizable Shortcuts
About
TrellisWM, developed by Dan Fessler, replaces overlapping windows and flat desktops with a nested, zoomable canvas. Real app windows dock, split and nest inside one another to any depth, and you navigate the layout with ⌥-pinch zoom or keyboard shortcuts.
Who It's For
TrellisWM suits Mac users who keep many windows open across several projects. If macOS Spaces and window overlap don't give you enough structure, it offers one large spatial map instead, where windows are grouped by where they sit. It is aimed at people who like to see the whole picture first and then zoom in on one task. Users who want keyboard or script control can drive it from Raycast, Alfred, Shortcuts, a Stream Deck or a shell.
How It Works
Most windows in TrellisWM are *docked*: they share the screen side by side and never overlap. To dock a window, drag it (or a whole tab group) over the edge of another window or the edge of the screen, and a space opens for it. Drop a window onto the middle of another and pause, and the two share a strip of tabs, even if they come from different apps. Drag a window onto the Desktop and it floats as it would on any Mac. Docked windows can hold spaces inside spaces, as deep as you like. Windows that are too small to use are covered in their app's colour and icon until there's room.
Navigation works like a camera. Zoom out and every open window is laid out like a map. ⌥-pinch on anything settles the view on it, and holding ⌘⇧ while dragging a rectangle fits the camera to it. Each display keeps its own spaces and camera. Full-screen apps and your other macOS desktops are left to macOS. TrellisWM moves and resizes windows through the Accessibility permission. Screen Recording is optional and lets windows show their contents while they move; without it, moving windows appear as their app colour and icon.
Configuration
There is no config file. Settings are changed in the app (General, Windows, Tabs, Appearance, Gestures, Apps, Shortcuts, License) and stored in ~/Library/Preferences/app.trellisui.trelliswm.plist. Saved arrangements live in ~/Library/Application Support/TrellisWM. For automation, every action is a URL (a Pro feature):
open trelliswm://everything # show everything
open trelliswm://zoom-out # step out a level
open trelliswm://neighbour?dir=left # left, right, up or down
open trelliswm://frame-window # focused window on its own
open trelliswm://save-view?n=1 # save the view as 1–9
open trelliswm://view?n=1 # go to saved view 1
open trelliswm://arrange # arrange all windows
open trelliswm://settings?pane=shortcuts
Compared to Alternatives
Compared to AeroSpace, TrellisWM is more visual and spatial. AeroSpace uses i3-style tree layouts, a TOML config and a CLI, while TrellisWM is set up by dragging windows and navigated by zooming. Its scripting surface is a URL scheme, not a command-line client. Compared to Paneru, which places windows on an infinite horizontal strip, TrellisWM nests layouts in depth instead of extending them sideways. Unlike both, which are free and open source, TrellisWM is a closed-source freemium app.
Requirements
- macOS 14 Sonoma or later
- Apple silicon (M1 or later); Intel Macs aren't supported
- Accessibility permission required; Screen Recording optional
- Free tier: up to 5 docked windows per macOS desktop. Pro adds unlimited docked windows, tab groups, saved views and URL actions
- Launched in October 2026
Getting Started
Download TrellisWM from trelliswm.app. Every download starts with 14 days of Pro. Grant Accessibility when prompted, and Screen Recording too if you want live window contents while they move. Drag a window onto the edge of another to dock it, then press ⌃⌥Space to see everything, and ⌃⌥↑ / ⌃⌥↓ to step out and in a level. All shortcuts can be changed in Settings ▸ Shortcuts. The full shortcut and URL reference is in the docs.