For macOS · written in Odin

Never touch your mouse again.

nib is a keyboard-driven pointer for macOS. Press one chord, and h j k l moves, clicks, drags and scrolls — without your hands ever leaving the home row.

Activate from anywhere with ⌘⌥Space, exit with Esc.

idle
active, capturing keys
q
w
e
a
s
d
z
x
c

Grid mode: press a label to zoom in, any action key to click.

One modal keyboard layer, every pointer action.

Activate, drive the cursor, act — then give control back. nib borrows the keyboard just long enough to do what the mouse would have done.

Free-move

h j k l or the arrow keys move the pointer, accelerating the longer you hold. Hold shift for coarse steps, f for pixel-precise ones.

Full click set

Left, right, middle and double-click each get their own key. Press g to grab, move, and drop — no held-down dragging required.

Grid mode

Press Tab to split the screen into a labeled 3×3 grid. Re-subdivide up to 3 levels deep, then act on any cell without narrowing all the way.

Fully remappable

Every chord, key and movement constant lives in one plain-text config file. Edit it and reload live — no restart needed.

q
w
e
a
s
d
z
x
c

Precise targeting, anywhere on screen.

Grid mode gets a cursor across a 4K display in a handful of keystrokes — no hunting, no acceleration curves to fight.

  1. 1

    Activate, then press Tab

    A translucent grid covers the screen, split 3×3 and labeled Q W E / A S D / Z X C.

  2. 2

    Narrow in, or don't

    Press a label to re-subdivide inside that cell. Repeat up to 3 levels for pixel-level targeting.

  3. 3

    Act on the current cell

    At any point, press an action key — Space, r, d — to act at the cell's center.

  4. 4

    Esc cancels

    Back out any time without acting on the screen.

Quick first test: launch → grant permission → ⌘⌥SpaceTabssSpace. The cursor lands near screen-center and clicks.

Free-move mode, at a glance.

The default mode the moment nib activates. Every binding below is a default — all of them are remappable.

hjkl← ↓ ↑ →move left / down / up / right (accelerates while held)
Shift+ movecoarse step (5×)
f+ movefine step (1px)
SpaceEnterleft click
rright click
mmiddle click
ddouble click
gdrag — grab, move, g again (or click) to drop
Ctrl+ h j k lscroll

One config file. Nothing hidden.

nib reads a plain line-based file from$HOME/.config/nib/config. Missing fields fall back to sane defaults — malformed ones are logged and skipped, never crash the app.

Change the activation chord, remap every action, tune movement acceleration, grid depth and overlay colors — then hit Reload Config from the menu bar to apply it live.

[activation]
toggle = cmd+alt+space

[keybindings]
move_left   = h, left
left_click  = space, enter, keypad_enter
grid_mode   = tab
scroll_down = ctrl+j

[grid]
rows   = 3
cols   = 3
depth  = 3
labels = q,w,e,a,s,d,z,x,c

[movement]
base_step = 20
fine_step = 1

Get nib

nib is pre-release: ad-hoc signed only, not yet notarized. Grab the latest macOS build below.

Download for macOS

Apple silicon · .app bundle (zip)

  • macOS (developed on 26.x), Apple silicon
  • Accessibility permission, granted from the menu bar on first run

Launch the .app bundle, not the bare binary — that's what gives nib its own Accessibility identity instead of borrowing your terminal's.

First run

  1. 1

    Unzip and install

    Move Nib.app into your Applications folder.

  2. 2

    Right-click → Open

    The build is unsigned, so bypass Gatekeeper the first time with right-click → Open.

  3. 3

    Grant Accessibility

    Approve the permission prompt from the menu bar — nib needs it to move the cursor.

  4. 4

    Activate

    Press the chord and you're driving the pointer from the keyboard.

Activate anywhere with ⌘⌥Space, back out with Esc.