GridSnap – an open-source Divvy-style window snapper for macOS
GridSnap: A Free, Open-Source Window Manager for macOS
GridSnap is designed as a community-driven, open-source alternative to Divvy, providing macOS users with a flexible way to organize their workspace. Instead of static layouts, it utilizes a dynamic grid system to snap windows into place.
🚀 Core Functionality
The basic workflow is intuitive: trigger a shortcut, select your desired area on a visual grid, and the window snaps instantly.
Key Features
- Interactive Preview: The window follows your cursor in real-time as you drag across the grid; if you cancel, it jumps back to its original spot.
- Custom Presets: Save specific regions to trigger them with a single keystroke.
- Example: A built-in full-screen preset is mapped to .
- Flexibility:
- Undo/Redo the last snap using .
- Adjustable grid dimensions (rows/columns) and the gap (in points) between windows.
- Choose whether to snap the focused window or the one under the cursor.
- System Integration:
- Supports multiple monitors (the grid appears on the display where your cursor is located).
- Runs as a menu bar application with "Launch at Login" support.
No network access,no analytics, andno account requirements.- No distracting Dock icon.
Compatibility Note: Requires macOS 14 or later. While tested on macOS 26, users on older versions will see a frosted panel instead of the modern glass material for the grid.
🛠 Installation Guide
You can get GridSnap running via several methods:
- Via Homebrew:
brew install --cask konieczkow/tap/gridsnap - Manual Install:
Download the
GridSnap-x.y.z.zipfrom the latest release, extract it, and move the app to your/Applicationsfolder. - Build from Source:
git clone https://github.com/konieczkow/gridsnap.git cd gridsnap ./build.sh install open /Applications/GridSnap.app
⚠️ Essential Permissions
Because GridSnap manipulates other applications, it requires Accessibility permissions.
- Navigate to
System SettingsPrivacy & SecurityAccessibility. - Toggle GridSnap ON. (Tip: You can also click "Grant Accessibility..." in the menu bar icon to jump straight to this menu).
⌨️ Usage & Controls
| Action | Command / Input | Description |
|---|---|---|
| Show Grid | Opens the snapping overlay (configurable). | |
| Snap Window | Click or Drag | Select cells and release to snap. |
| Cancel | Esc | Dismisses the grid without changes. |
| Save Preset | Shift + Release | Saves the current selection as a preset. |
| Apply Preset | Custom Shortcut | Instantly snaps to a saved region. |
| Undo/Redo | Reverts or reapplies the last snap. |
⚙️ Configuration & Development
Access the Settings via the menu bar icon. Here you can modify:
- Global shortcuts.
- Grid layout (columns/rows) and window gaps.
- The target rule for window selection.
- The presets table (names and shortcuts are editable in-place; use the
−button to delete).
Technical Architecture
The project is written in Swift. Key files in Sources/ include:
main.swift: Application startup.AX.swift: Handles the Accessibility API plumbing.Grid.swift: Manages the visual overlay.Presets.swift&Hotkeys.swift: Handle saved layouts and keyboard listeners.SettingsWindow.swift&Menu.swift: UI components.Defaults.swift: Manages persistent settings.
Developer's Note on Code Signing
macOS links Accessibility permissions to the app's signature.
- Ad-hoc signatures change every build, forcing you to re-grant permissions constantly.
- Solution: Create a self-signed "Code Signing" certificate named
GridSnap Devin Keychain Access. The build script will detect this automatically. - Alternatively, use:
CODESIGN_IDENTITY="your_name" ./build.sh.
Note on Limitations: Some applications enforce a minimum window size. If a cell is smaller than the app's limit, the window will overlap adjacent cells.