close
Skip to content

jdeepwell/gridwell

Repository files navigation

Gridwell

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]


Features

  • 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 four modifier keys (trigger, snap-to-windows, snap-to-same-app-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.
  • Per-app window snapping — hold a dedicated modifier (default: Option) to snap only to windows belonging to the same application.
  • Minimum window size filter — small accessory windows below a configurable threshold are excluded from drag and resize interactions.
  • Configurable resize border width — adjust how wide the edge zone is that triggers a resize rather than a move (default 150 pt).
  • Raise on drag — optionally bring the target window and its app to the front when you start dragging (enabled by default).

How it works

Moving a window

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.

Resizing a window

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.

Snapping

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 all on-screen windows
Option Snap to same-app windows — like Shift, but limited to the same application
(neither) Free movement, no snapping

Snap modifiers can be held or released at any point during a drag.

Grid snap — height behaviour

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]


Preferences

Open preferences with ⌘ ; or via the menu bar.

Grid tab

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]

Behaviour tab

Configure raise-on-drag, minimum window size (width and height below which windows are excluded from interactions), and the resize border width (how deep the edge zone is that triggers a resize rather than a move).

Keys tab

Set the four modifier keys independently: drag trigger, snap-to-grid, snap-to-all-windows, and snap-to-same-app-windows. Available choices: FN / Globe (fn), Shift (⇧), Control (⌃), Option (⌥), Command (⌘).

[Screenshot — Preferences → Keys tab]

Updates tab

Toggle automatic update checks. This reflects the choice made at first launch and can be changed at any time.


Requirements

  • 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]

Building

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.xcodeproj

Select 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).

About

A macOS window management utility

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors