Your windows, where you left them.

Ferrite is a window layout manager for macOS. It remembers where every app's windows live, restores whole workspaces with one hotkey, and lets windows snap together into magnet groups that move, resize and reflow as one.

Not an auto-tiler. Windows stay free floating and may overlap. Structure is something you opt into, one edge at a time.

Position persistence, with zero setup

Every app's windows are remembered as you work. When an app relaunches, when you log in, or when you plug a display in, its windows go back where they belong. Nothing to configure.

Records are keyed by the set of displays attached, so your desk arrangement and your laptop-only arrangement are separate memories. Multi window apps get one remembered frame per window, matched by pin rules and window identity rather than guesswork.

Workspaces bring back the whole desk

Snapshot an arrangement as a named workspace, per display. Restoring it adopts the apps already running and launches the ones that are not.

01

Arrange your windows the way you want them.

02

Save the arrangement as a named layout.

03

Record a global hotkey for it in Preferences.

04

Press it. Running apps snap into place, missing apps launch and land, stacking order included.

Magnet groups stick windows together

Drag one window's edge close to another until the guide appears, then release. The two are mated. A group behaves like one combined window: hold Command and drag any member to carry the cluster, drag an outer edge to scale the whole thing proportionally, and reflow it as a unit.

Standard

Only the window you grabbed changes. Its mates stay exactly where they are.

Shrink

The mate resizes so the shared edge stays shared, its far edge anchored.

Nudge

The mate keeps its size and slides, pushing its own mates along in turn.

Groups persist per display arrangement and survive a restart. Excluding an app takes it out of grouping entirely, so Finder never mates with anything unless you want it to.

Reflow a display, or just one group

One click arranges every window on the active display, or only the magnet group you are working in. Each diagram below is drawn by the same solver that moves your windows, so it shows exactly what you get. The accented tile is the frontmost window.

Columns
Rows
Grid
Symmetric
Main + side
Main + side, right
Main in the centre
Split spiral
Cascade
Monocle

Weighted treemap, three biases

Sizes each window by rank, so the one you are working in gets the most room. The bias picks which side the largest window occupies.

Heaviest centre
Heaviest left
Heaviest right

Or define your own

A fixed column count, an exact grid of zones, or a main-centre split with your own proportions. Custom presets sit in the menu beside the built in ones.

Grid, 7 by 3 zones
Columns, 5 wide
Centre 66%, 4 a side

Grid zones are fixed on purpose. Ask for seven by three and you get twenty one cells: open five windows and five cells fill while the rest stay empty, rather than five windows stretching to cover the screen.

Your window titles never touch disk

Ferrite's data files are built to be synced with git or Nextcloud, so a stored window title would mean syncing your browsing history. Titles are hashed with a per install salt instead. Matching still works, because it only ever needed equality, never the text.

Quarterly numbers, final draft.xlsx
titleHash: 9f2c41a7e08b5d63

Install it in about a minute

From source

Requires macOS 13 or later and a Swift 5.9 toolchain.

git clone https://github.com/vhark/Ferrite.git
cd Ferrite
./scripts/install.sh

Installs to /Applications and registers Launch at Login. On first run, grant Accessibility under System Settings, Privacy and Security. Ferrite cannot see or move windows without it.

Homebrew

Available once the first notarized release ships.

# coming with 1.0
brew tap vhark/ferrite \
  https://github.com/vhark/Ferrite.git
brew install --cask ferrite

The repository doubles as the Homebrew tap, so the cask ships from the same place as the source.

What Ferrite will not do

Current Space only. The Accessibility API cannot see windows on other Spaces, and Ferrite never disables SIP to work around it.
No Spaces management, and no window animations.
A second instance of the same app is skipped by snapshots.
Launching an app does not reopen its documents.
Excluded apps are launched and layered, never placed.
macOS first. The core engine has no AppKit dependency, so a Linux port needs only a new window driver.