Free & open source

CalmMouse

Magic Mouse UX fixes for macOS.

The main one: your mouse stops scrolling the page every time you click.

Download for macOS View on GitHub

Free. MIT-licensed. Requires macOS 13 or later.

Every click is also
a tiny swipe.

The Magic Mouse's entire top shell is a touch surface — and it stays live while you click. You press down, your finger rolls half a millimetre, and the page jumps. Drag a window and the document scrolls out from under it. Click a link and the link moves first.

macOS has no setting for this. CalmMouse is that setting — a small menu-bar app that swallows Magic Mouse scrolling while any of its buttons is held, and keeps swallowing for a moment after, to catch the trailing swipe your finger makes as it lifts.

Without CalmMouse The click lands, the page jumps.
With CalmMouse The click just clicks.

And the rest of the
rough edges.

Everything applies only to the Magic Mouse. CalmMouse identifies the physical device behind every event, so your trackpad and any other mouse pass through untouched.

Tap to click

A light single-finger tap left-clicks — no need to press the mouse down. Adjustable Firm↔Light sensitivity, and taps are auto-rejected while you're scrolling, clicking, resting a finger, or just grazing the shell. Double- and triple-taps become real double- and triple-clicks.

Tap and drag

Tap, touch again, and go: the button presses down when you actually start moving and releases when your finger lifts. A finger that just comes back to rest never presses anything — and a quick second tap is still a double-click, so selecting a word and extending it works.

Two-finger drag

Rest two fingers on the surface together and hold — after a moment the button presses down. Move to drag, lift either finger to drop. Fingers that land one after the other are grip, not gesture, and never trigger it.

Per-app rules

Any setting, overridden per application. Disable Magic Mouse scrolling entirely in Figma, block horizontal scroll in Excel, drop momentum in your code editor. Rules follow whichever app is in front.

Scroll in straight lines

Once a scroll commits to vertical or horizontal, the other axis is zeroed for the rest of the gesture. No more diagonal drift.

Ignore tiny nudges

A gesture has to travel a minimum distance before it counts — so a finger merely resting on the shell can't jitter the page.

Keep gliding — or don't

Turn off the coasting tail after a flick, for the Magic Mouse alone. macOS's own momentum setting is all-or-nothing, system-wide.

Hold a key, scroll differently

Map ⌘, ⌥, ⌃, or ⇧ + scroll to horizontal scrolling, inverted scrolling, zoom — or nothing at all.

Battery warning

A notification when the mouse drops below a threshold you choose, so it doesn't die mid-afternoon.

Tap zone

Restrict taps to the front of the surface, away from the side edges — so the fingers gripping the mouse can't click. Adjustable depth.

Settings in plain English.
Previews you can watch.

No jargon, no manual. Every switch says what it does — and hovering any setting plays a little animated preview of the behavior it changes. The switches you flip often live right in the menu bar.

Your mouse. Only your mouse.

CalmMouse reads mouse events through a system event tap, which macOS gates behind an Accessibility permission — you stay in control.

  • No keystrokes. It never sees what you type.
  • No network. Nothing is sent anywhere, ever.
  • No data. It stores nothing but its own settings.
  • No secrets. The whole thing is open source, MIT-licensed.

Free. As in actually free.

No trial, no license key, no email. Download it, drag it in, done.

Requires macOS 13 or later and a Magic Mouse.

  1. 1
    Unzip & drag to Applications.

    You get CalmMouse.app — drop it in /Applications.

  2. 2
    Right-click → Open, the first time.

    Releases aren't notarized yet, so macOS asks once. Right-click the app, choose Open, then Open again.

  3. 3
    Grant Accessibility.

    System Settings → Privacy & Security → Accessibility → enable CalmMouse. It starts working within two seconds — no relaunch needed.

Prefer to build from source? git clone the repo and run ./install.sh.