A macOS utility for moving and resizing windows by dragging anywhere in them — not just the title bar — with optional snapping to a custom grid or to the edges of other windows.
[Screenshot — window drag + grid snap in action]
- Drag from anywhere — hold the trigger modifier key (default: FN / Globe) and left-click anywhere inside a window to move or resize it, no matter where your cursor is – you can release the trigger modifier key during interaction.
- Move or resize in one gesture — the drag zone is determined by cursor position: clicking near the right or bottom edge resizes, clicking anywhere else moves.
- Snap to grid — hold the grid snap modifier (default: Control) while dragging to snap the window to the nearest cell of your custom grid.
- Snap to windows — hold the window snap modifier (default: Shift) while dragging to align the window's edges with the edges of other on-screen windows.
- Snap modifiers work mid-drag — you can change or release a snap modifier at any point during a drag and the window responds immediately.
- Per-screen grids — configure a different column and row count for each connected display.
- Fully configurable modifier keys — all three modifier keys (trigger, snap-to-windows, snap-to-grid) are set in preferences and persist across launches.
- No title bar required — works on windows that have non-standard or hidden title bars.
- Raise on drag — optionally bring the target window and its app to the front when you start dragging (enabled by default).
Hold the trigger key (default: FN / Globe) and left-click in the middle of any window. Drag to move it. Release the mouse button to finish.
Hold the trigger key and left-click within the outer 25 % of any edge (left, right, top, or bottom). Drag to resize. Corners activate both adjacent edges simultaneously.
While dragging, hold an additional modifier:
| Modifier (default) | Effect |
|---|---|
| Control | Snap to grid — window jumps to a grid cell (see below) |
| Shift | Snap to windows — window edges align with edges of other on-screen windows |
| (neither) | Free movement, no snapping |
Snap modifiers can be held or released at any point during a drag.
When snapping to the grid, the window height is determined by where the cursor sits within the row:
- Top half of a row — window height = one cell.
- Bottom half of a row — window height = two cells (current row + the one below), provided a row below exists.
- Very near the bottom edge of the screen (grids with more than 2 rows only) — window height = full screen height, anchored to the top of the screen.
[Screenshot — free drag vs. grid-snapped drag comparison]
Open preferences with ⌘ ; or via the menu bar.
Configure the number of columns and rows for each connected screen. A live preview shows the current grid layout scaled to the screen's aspect ratio.
[Screenshot — Preferences → Grid tab]
Toggle whether the target window is raised to the front when you start dragging it.
Set the three modifier keys independently using dropdown menus. Available choices for each: FN / Globe (fn), Shift (⇧), Control (⌃), Option (⌥), Command (⌘).
[Screenshot — Preferences → Keys tab]
Toggle automatic update checks. This reflects the choice made at first launch and can be changed at any time.
- macOS 13 Ventura or later
- Accessibility permission — Gridwell uses the Accessibility API to move and resize windows. On first launch it shows a prompt to open System Settings → Privacy & Security → Accessibility. The app must be trusted before monitoring starts.
[Screenshot — Accessibility permission prompt on first launch]
Gridwell has no external dependencies. Clone the repo and open the Xcode project:
git clone https://github.com/yourname/Gridwell.git
cd Gridwell
open Gridwell.xcodeprojSelect the Gridwell scheme, choose your Mac as the run destination, and press ⌘ R. App Sandbox is disabled in the project (required for global event monitoring and window manipulation via the Accessibility API).