adarshchoudhary.dev

projects / mullion

Mullion

A free, open-source window manager for macOS: snap windows to halves, quarters, thirds and sixths from the keyboard, or drag them to a screen edge or corner.

role
Solo developer
stack
Swift, AppKit, SwiftUI, macOS
status
v1.0.1 released 25 Oct 2026
[Demo GIF: drag to snap and ⌃⌥← cycling]

rev 25 oct: v1.0.1 released

live from GitHub · updated at each build

latest release
v1.0.1
released
25 Oct 2026
last commit
25 Oct 2026

01 / the problem

The problem

Window management on macOS is still mostly manual. Since Sequoia, macOS can tile windows to halves and quarters, but not to thirds or sixths, and it has no custom layouts, no saved workspaces and only limited multi-monitor control. Magnet covers the basics but has no custom zones or saved layouts. PowerToys solves this on Windows with FancyZones, Workspaces and Grab & Move, but nothing free and open source on the Mac offers custom zones and saved workspaces.

The goal for v1 was Magnet’s snapping features under a free, open-source licence. v2 is planned to add the PowerToys features Magnet lacks: zones, Grab & Move and workspaces.

02 / what i built

What I built

Version 1.0 is a native menu bar app:

  1. Keyboard snapping to halves, quarters, thirds, two-thirds and sixths, plus Maximize, Center and Restore, with default ⌃⌥ (Control-Option) shortcuts
  2. Pressing a half shortcut again cycles the window through ½, ⅔ and ⅓ of the screen
  3. Drag to snap: drag a window to an edge, corner or bottom third, see a live preview, and let go to snap it; hold ⌥ to move it without snapping
  4. Moving a window to the next or previous display keeps its snapped position
  5. A Settings window to remap any shortcut, set gaps between windows, start Mullion at login, exclude apps, and export or import settings
  6. No telemetry: Mullion reads only the position, size and type of windows, never their titles or contents. v1.0 makes no network calls.

03 / decisions

Decisions

decision 01

Native Swift, not cross-platform

Swift with AppKit, and SwiftUI for Settings, gives direct access to the Accessibility APIs, event monitors and overlay panels a window manager needs, with a small memory footprint. I also considered Hammerspoon, Electron or Tauri, and .NET (my main stack) with MAUI or Avalonia, where every system call would go through P/Invoke. Learning Swift and AppKit was a deliberate goal.

decision 02

Public APIs only

Some features, such as always-on-top for other apps’ windows or moving windows between Spaces, need private frameworks or SIP turned off. Mullion uses only public, documented APIs, so it breaks less across macOS updates. The trade-off is that those features are out of scope.

decision 03

A passive monitor for drag to snap

Drag to snap watches mouse drags with a passive NSEvent monitor, which can never block or swallow a user’s click. While a window is dragged, its app does not answer Accessibility requests, so Mullion reads the window’s position from the window server and looks up the window only at the drop.

04 / outcome

Outcome

I released a public beta with keyboard snapping on 19 October 2026, v1.0 with drag to snap and Settings on 21 October 2026, and v1.0.1 on 25 October 2026. v1.0.1 fixes a bug, seen with VS Code, where Top Half, Bottom Half or Maximize straight after Right Half left the window at half width. Next are signed releases that keep the Accessibility permission across updates, opt-in in-app updates, and then zones, Grab & Move and workspaces in v2. [Add users, stars or feedback once the launch post is out, and one thing you learned.]

nextAnkommen in Paderborn