Draw a shape.
A shortcut fires.

Mouse gestures for keyboard shortcuts. Press ⌘⇧M, draw a ✓, release — Slack marks all read. Draw a circle — Terminal opens. Any shape you can repeat, bound to any shortcut or app.

Get Wandful How it works

macOS · free and MIT · one small binary, no account, no cloud, no telemetry

Hold a mouse button and draw a circle, a check or a caret
this is the app’s own recognizer, running in your browser

Three beats

Summon. Draw. Release.

01 SUMMON
The wand comes out

Press ⌘⇧M (or Ctrl⇧M, or click the menu-bar icon). The screen dims a little and the wand follows your pointer, trailing sparks. Nothing is intercepted until this moment.

02 DRAW
Any button, any shape

Hold a mouse button and draw. Size, angle and position don’t matter — a rune is whatever shape you can repeat. A strictness dial decides how close it has to be.

03 RELEASE
The spell is cast

Let go. The wand sheathes itself, focus returns to the app you were in, and the shortcut is typed there — or the app you chose opens.

Changed your mind? Click without drawing, press Esc, or hit the ✕ in the corner. Right-click, scroll and drag in other apps are never touched while the wand is away.

Runes

Not gestures someone chose for you.
Yours.

There is no built-in alphabet to learn. You draw a rune once in the spellbook — or right on the screen the first time it fails to match — and from then on it is a spell.

Under the hood it is the $1 Unistroke recognizer — about 170 lines of Rust that resample, rotate, scale and compare the path. Small enough to read in one sitting, fast enough that you never wait for it. The demo at the top of this page runs the same algorithm.

Make it a spell

New spells are born where you cast them.

Draw something no spell knows and the wand doesn’t sulk — it asks. Name it, press the keys, and the rune you just drew is a spell. No settings window in between.

Missed a spell you do have? The wand says which one it nearly was and by how much (“closest was Check of Saving at 61%”) so you know whether to draw it again or turn strictness down a notch.

The spellbook

One window, and it stays out of the way.

Every spell you have, the rune it answers to, and a canvas to draw new ones. Shortcuts are recorded by pressing them, not by typing their names. Apps are picked from a list.

Spells live in a plain spellbook.json in your config folder. Back it up, share it, edit it by hand. There is no account to lose it with.

1small binary, no runtime to install
~170lines of recognizer, readable in one sitting
0accounts, sign-ins, licence keys
0bytes sent anywhere. Ever.

Get it

Free, open, early.

Version 0.0.1, macOS (Apple silicon and Intel). Every build comes from GitHub Actions and carries a provenance attestation you can check.

# Homebrew
brew install --cask ostapondo/tap/wandful

Builds are not notarized yet, so the first launch is right-click → Open. Or build it yourself in about a minute once Rust, Node 20+ and the Tauri prerequisites are there:

# clone, install, run
git clone https://github.com/ostapondo/wandful && cd wandful
npm install
npm run tauri dev

# or a real app bundle
npm run tauri build
macOS asks once for Accessibility

Typing a shortcut into another app and recording one without other apps’ hotkeys firing both need it. System Settings → Privacy & Security → Accessibility → Wandful. Without it the wand still draws; it just can’t cast.

Windows is on the roadmap

The code builds and runs there in theory — overlay, hook, casting are all written for it — but nobody has tried it on a real Windows machine yet, so it is not shipped. A report from one brings it back.

What the permission is used for, in checkable claims · what changed · what’s next · how to help — the most useful thing to send is a report from hardware nobody here has.

© ostapondo · MIT GitHub Discussions Issues Shortcuts are spells. The set is your spellbook. Drawing one is a swish.