A keyboard-driven macOS menu bar app for window management and system monitoring.
Snap windows to zones, cycle focus between windows, move windows across displays — all without touching the mouse.
Built with Swift and SwiftUI. No Electron. No frameworks. Just a native menu bar app that stays out of your way.
Grid tab — zone editor with 32x18 ultra-fine grid and drag-to-select
Monitor tab — 5 menu bar styles, metric toggles, font size
I wanted a single lightweight app to manage window layouts and keep an eye on system stats — without ever reaching for the mouse. Most window managers don't show system info. Most system monitors don't snap windows. And almost none of them let you cycle keyboard focus between windows.
Grid does all three from one menu bar icon. Define zones on a grid, assign hotkeys, and snap any window instantly. Cycle focus between windows with a keystroke — no clicking, no mouse, no alt-tab guessing. Move windows across displays without dragging. Meanwhile, CPU, GPU, RAM, disk, temperatures, and network speed sit right in the menu bar — no extra apps needed.
- Keyboard-driven — snap, focus, and move windows without touching the mouse
- Window snapping — snap any window to predefined zones with keyboard shortcuts
- Keyboard focus — cycle focus between windows with hotkeys, no mouse needed
- Ultra-fine grid — 32x18 grid for precise zone positioning
- Zone editor — drag-to-select zone boundaries with live preview
- System monitor — CPU, GPU, RAM, disk, network stats in the menu bar
- Temperature sensors — CPU and GPU temps displayed inline via SMC
- 5 menu bar styles — Sparklines, Numbers, Dot Matrix, Minimal, Two-Row
- Heat colors — values change from white to yellow to orange to red based on load
- Multi-display — move windows between displays with hotkeys
- Default layouts — pre-configured zones for halves, quarters, thirds, and two-thirds
- Configurable margins — adjustable gaps between windows and screen edges
- Launch at login — native macOS login item support
- JSON config — all settings stored in
~/.config/grid/config.json - Presets (planned) — save and recall full window layouts with a single hotkey
| Zone | Shortcut |
|---|---|
| Maximize | ⌥⌘↩ |
| Left / Right | ⌥⌘← / ⌥⌘→ |
| Top / Bottom | ⌥⌘↑ / ⌥⌘↓ |
| Top Left / Top Right | ⌥⌘; / ⌥⌘' |
| Bottom Left / Bottom Right | ⌥⌘, / ⌥⌘/ |
| Left / Center / Right Third | ⌥⌘Q / ⌥⌘W / ⌥⌘E |
| Left / Center / Right Two Thirds | ⌥⌘A / ⌥⌘S / ⌥⌘D |
| Action | Shortcut |
|---|---|
| Focus next window | ⌃⌥→ |
| Focus previous window | ⌃⌥← |
| Move to next display | ⌃⌥⌘→ |
| Move to previous display | ⌃⌥⌘← |
brew install --cask pom11/tap/gridSigned and notarized — no Gatekeeper warnings, no xattr workarounds. Installs directly to /Applications.
git clone https://github.com/pom11/Grid.git && cd Grid && make installRequires Xcode Command Line Tools.
- macOS 14.0+ (Sonoma or later)
- Accessibility permission (for window management)
| Style | Description |
|---|---|
| Sparklines | Mini bar charts + heat-colored values |
| Numbers | Clean numeric values with heat colors |
| Dot Matrix | 4x4 dot grids showing load level |
| Minimal | Sparklines without labels |
| Two-Row | Compact two-line layout with sparklines |
All styles show inline CPU/GPU temperatures when sensor monitoring is enabled.
All settings are stored in ~/.config/grid/config.json. You can edit this file directly — Grid picks up changes on next launch.
{
"grid": { "columns": 32, "margin": 8, "rows": 18 },
"hotkeys": {
"focusNext": { "keyCode": 124, "modifiers": 6144 },
"focusPrevious": { "keyCode": 123, "modifiers": 6144 },
"moveNextDisplay": { "keyCode": 124, "modifiers": 6400 },
"movePrevDisplay": { "keyCode": 123, "modifiers": 6400 }
},
"monitor": {
"fontSize": 10,
"refreshInterval": 2,
"showCPU": true,
"showDisk": true,
"showGPU": true,
"showNetwork": true,
"showRAM": true,
"showSensors": true,
"showStats": true,
"style": "dotMatrix"
}
}Zones are stored separately in ~/.config/grid/zones.json. Presets (planned) will be stored in ~/.config/grid/presets.json.
Sources/
GridApp.swift App entry point, menu bar, status item
Config.swift JSON config model, persistence
HotKeyManager.swift Global hotkey registration (Carbon)
Settings/
SettingsWindow.swift Settings window with sidebar navigation
GeneralTab.swift Launch at login, about
MonitorTab.swift Menu bar style, metrics, font size
GridTab.swift Zone list with thumbnails and editor
HotkeysTab.swift Focus cycling and display move hotkeys
HotKeyRecorderView.swift Keyboard shortcut recorder
Stats/
StatsEngine.swift System stats polling, history
CombinedMenuBar.swift 5 menu bar styles, heat colors, sparklines
StatsFormatter.swift Number formatting helpers
Readers/ CPU, GPU, RAM, disk, network, sensor readers
Window/
WindowSnapper.swift Snap windows to zones
WindowCycler.swift Focus cycling between windows
AccessibilityEngine.swift AXUIElement window control
ScreenHelper.swift Multi-display geometry
WindowModel.swift Window data model
Zones/
Zone.swift Zone model, grid config
ZoneStore.swift Zone persistence
ZoneGridEditor.swift Drag-to-select grid editor
Presets/ (planned)
Preset.swift Preset model, match rules
PresetStore.swift Preset persistence
PresetApplier.swift Apply preset layouts to windows
SMC/
smc.c SMC sensor access (C)
If Grid keeps your desktop tidy and your CPU cool, consider buying me some electricity:
| Currency | Address |
|---|---|
| ETH | 0x77B5C61EBd7933DC20F37fDf6D4A7725C4872703 |
| BTC | bc1qxl2p5u3kmyyftrtysd2lgcs2hfth0epfdsu7ug |
| BNB | 0x77B5C61EBd7933DC20F37fDf6D4A7725C4872703 |
MIT