AuthonAuthon Blog
tutorial3 min read

I set up a Mac without the App Store and couldn't install my window manager

Free, open-source macOS window manager with keyboard shortcuts and drag-to-edge snapping.

AW
Alan West
Authon Team
I set up a Mac without the App Store and couldn't install my window manager

I've been using Magnet for years. Then I got a Mac Mini to run OpenClaw agents 24/7. Didn't want to sign in with my Apple ID on that machine, so I skipped the App Store entirely.

That's when I found out: Magnet is App Store only. No DMG, no Homebrew, nothing.

Tried going without a window manager for two days. Couldn't do it. So I built one.

Nudge

Nudge is a free, open-source macOS window manager built with pure Swift and AppKit. 19 layouts, customizable keyboard shortcuts, drag-to-edge snapping, multi-monitor support. The whole app is under 1MB.

How it works

Started with the basics — keyboard shortcuts for halves, quarters, thirds. Every layout uses Ctrl+Option as the modifier. Arrow keys for halves, U/I/J/K for quarters, D/F/G for thirds. All fully remappable.

Then I added drag-to-edge snapping. Drag a window to a screen edge, a blue translucent overlay shows where it'll land, release to snap. The overlay fades in at 150ms — fast enough to feel responsive, slow enough to not be jarring.

Multi-monitor support came next. Press the same shortcut twice and the window moves to the next display with the position mirrored (left becomes right). Dedicated Next Display / Previous Display shortcuts are also there for explicit control.

Here's what it looks like in action:

!Nudge window snapping demo

The Accessibility API rabbit hole

macOS window management is entirely through the Accessibility API (AXUIElement). You ask the system for the focused window, read its position and size, then set new values. Straightforward in theory.

In practice, some apps don't play nice:

Problem 1: Apps that don't expose windows. Some Electron apps report 0 windows through AX even though you can see the window on screen. Fixed it with a multi-step fallback:
  • Try kAXFocusedWindowAttribute (standard)
  • Try kAXMainWindowAttribute (popups/dialogs)
  • Walk kAXWindowsAttribute array
  • Fall back to NSWorkspace.frontmostApplication + AXUIElementCreateApplication
  • Last resort: CGWindowListCopyWindowInfo with .optionAll to find the window by PID and match by bounds
  • Problem 2: Chrome's animated resize. Chrome enables AXEnhancedUserInterface which causes window moves via AX to animate instead of snapping instantly. Fix: disable that flag before each move. Rectangle uses the same workaround. Problem 3: SkyLight fallback. For apps where AX truly can't control windows (position/size calls succeed but nothing happens), the app falls back to Apple's private SkyLight framework loaded at runtime via dlopen/dlsym. Not ideal, but it works and degrades gracefully if the APIs change.

    Why not Rectangle?

    Rectangle is a good app. If you're happy with it, keep using it.

    But I wanted something minimal. Here's the comparison:

    | | Nudge | Magnet | Rectangle |
    |---|---|---|---|
    | Price | Free | $9.99 | Free |
    | Open Source | Yes (MIT) | No | Yes |
    | App Size | <1MB | ~5MB | ~15MB |
    | Dependencies | None | - | Several |
    | Drag-to-Edge | Yes | Yes | Yes |
    | Multi-Monitor | Yes | Yes | Yes |
    | App Store Required | No | Yes | No |

    Nudge is 17 Swift files. No SwiftUI, no Electron, no frameworks. Hotkeys use Carbon's RegisterEventHotKey. Drag detection uses a CGEvent tap. The entire codebase is auditable in an afternoon.

    Install

    bash
    brew tap mikusnuz/tap
    brew install nudge-run

    Or download the DMG from GitHub Releases. Signed and notarized — no Gatekeeper warnings.

    Source: github.com/mikusnuz/nudge


    Now I use it on all my Macs. If you find bugs, open an issue.

    Website: nudge.run
    I set up a Mac without the App Store and couldn't install my window manager | Authon Blog