A native Apple Silicon window manager for macOS. Drop-in replacement for SizeUp, which is x86-only and will stop working when Apple removes Rosetta 2 in macOS 28.
CaptainUtils replicates SizeUp's exact keyboard shortcuts, runs natively on arm64, has no dependencies, and lives in the menu bar.
SizeUp was last updated in 2021 and is Intel-only. Rosetta 2 is being phased out starting after macOS 27 (announced at WWDC25). CaptainUtils was built as a native, minimal, free replacement that preserves SizeUp's keyboard shortcuts so muscle memory carries over.
- All 13 SizeUp window-positioning shortcuts (halves, quarters, fullscreen, center, snapback, multi-monitor)
- Native arm64 binary, no Rosetta needed
- Menu bar app with no Dock icon
- Optional Start at Login (via SMAppService)
- Restore previous window position with SnapBack
- Optional absolute or screen-relative resizing when centering a window
| Shortcut | Action |
|---|---|
| ⌃⌥⌘← | Left half |
| ⌃⌥⌘→ | Right half |
| ⌃⌥⌘↑ | Top half |
| ⌃⌥⌘↓ | Bottom half |
| Shortcut | Action |
|---|---|
| ⌃⌥⇧← | Upper-left |
| ⌃⌥⇧↑ | Upper-right |
| ⌃⌥⇧↓ | Lower-left |
| ⌃⌥⇧→ | Lower-right |
| Shortcut | Action |
|---|---|
| ⌃⌥← | Previous monitor |
| ⌃⌥→ | Next monitor |
| Shortcut | Action |
|---|---|
| ⌃⌥⌘M | Fullscreen (maximize, not native macOS fullscreen) |
| ⌃⌥⌘C | Center window (optionally resize) |
| ⌃⌥⌘/ | SnapBack (restore previous window position) |
Note: Spaces shortcuts (⌃⌘+arrows) from SizeUp are not implemented. Modern macOS has no public API to move windows between Spaces or switch Spaces programmatically. Those key combos remain free for you to bind elsewhere.
- Global hotkeys are registered via Carbon's
RegisterEventHotKey(HIToolbox). This is the same API used by Rectangle, Amethyst, and every major macOS window manager. Reliable across macOS versions, including Tahoe. - Window manipulation uses the Accessibility API (
AXUIElement). The app gets the system-wide focused application, then its focused window, and setskAXPositionAttributeandkAXSizeAttribute. - Multi-monitor uses
NSScreen.screens, sorted byframe.origin.xfor consistent left-to-right ordering. - SnapBack saves the previous window frame in memory keyed by
(pid, window title)before every move/resize. The snapback hotkey restores it. - Coordinate handling: Accessibility uses top-left origin in primary-screen coordinates.
NSScreenuses bottom-left. The app converts between them. - Center sizing can preserve the current window size, use an absolute size in points, or use independent percentages of the current display's usable area. Preferences are stored in
UserDefaults.
Six Swift files.
| File | Responsibility |
|---|---|
main.swift |
NSApplication entry point |
AppDelegate.swift |
Menu bar UI, accessibility check, Start at Login |
HotkeyManager.swift |
Carbon hotkey registration and dispatch |
WindowManager.swift |
Accessibility API window move/resize |
ScreenManager.swift |
Multi-monitor geometry, target frame calculations |
SnapBackStore.swift |
Previous window frame storage |
- macOS 13.0 (Ventura) or later
- Apple Silicon Mac (arm64)
- Accessibility permission (required for window manipulation)
No Xcode required, only Command Line Tools.
cd CaptainUtils
make buildThis produces CaptainUtils.app in the project directory. To install to /Applications:
make installTo launch:
make runOr just open CaptainUtils.app.
- Launch
CaptainUtils.app. A menu bar icon appears (rectangle/grid symbol). - Click the menu bar icon and choose Open Accessibility Settings…
- In System Settings, toggle CaptainUtils ON under Privacy & Security → Accessibility.
- The app detects the grant automatically (no relaunch needed). The menu item updates to Accessibility: Granted ✓.
- Optionally enable Start at Login from the menu.
| Item | What it does |
|---|---|
| About CaptainUtils | Version info |
| Shortcuts | Show all keyboard shortcuts in a dialog |
| Settings… | Configure optional absolute or screen-relative resizing for Center Window. |
| Open Accessibility Settings… | Opens the Accessibility settings pane. Becomes "Granted ✓" once permission is given. |
| Start at Login | Toggle launching CaptainUtils automatically on macOS login |
| Quit | Quit the app |
Center Window preserves the focused window's current size by default. In Settings…, enable Resize when centering, then choose either an absolute width and height in points or percentages of the current display's usable area. The usable area excludes the menu bar and Dock. For example, 95% by 95% on a 1,000 by 800 point usable area produces a 950 by 760 point centered window.
The Makefile produces an unsigned binary. macOS requires that the binary be signed (even ad-hoc) for Accessibility permission to persist across launches. After building:
codesign --force --sign - /Applications/CaptainUtils.appEach rebuild changes the binary hash, which invalidates the existing Accessibility grant. You'll need to remove and re-add the app in Privacy & Security → Accessibility after each rebuild.
- No Spaces shortcuts. macOS has no public API for moving windows between Spaces or switching Spaces. Skipped intentionally.
- No App Store distribution. The Accessibility API requires non-sandboxed apps, which the App Store rejects.
- Some Electron and Java apps have quirky Accessibility implementations and may partially resist window resizing.
MIT