macOS has exactly one scroll-direction switch, and it points at everything you own. Turn Natural Scrolling off so your mouse wheel behaves, and your trackpad starts fighting you. MouseScroll flips the wheel alone and leaves the trackpad exactly as Apple built it.
Most tools that fix this ask which mouse you're using, then watch for it to connect and disconnect. MouseScroll never has to: every scroll event on macOS already says where it came from.
A mouse wheel moves in notches, so macOS sends one discrete step per notch. A trackpad sends a continuous stream of tiny movements instead, because your fingers glide. The two are already labelled differently before any app sees them.
MouseScroll watches scroll events as they pass and reverses the discrete ones — both axes, so a tilt wheel behaves too. Everything continuous goes through exactly as it arrived, byte for byte.
MouseScroll leaves your system setting alone and works from the way macOS ships — Natural Scrolling switched on — so your trackpad, Magic Mouse and momentum keep gliding as they always have. Quit the app and your Mac is exactly as it was.
USB, Bluetooth, gaming mouse, the cheap one from the drawer — there's no device list and nothing to pair. Plug in a mouse you've never used before and it scrolls correctly on the first notch.
The setting Apple ships stays exactly as it is. Two-finger scrolling, momentum, rubber-banding at the end of a page — all untouched, because those events are never modified.
Vertical and horizontal. If your mouse has a tilt wheel or a side scroll, it flips with the rest instead of being left half-corrected.
The menu-bar icon holds a single switch. Flip it and scrolling returns to the system behaviour instantly — no restart, no logout, nothing left running in the background.
Launch at login is a checkbox in the same menu, using Apple's modern API — so it shows up properly in System Settings → Login Items instead of hiding somewhere.
Native Swift with zero third-party dependencies, universal on Apple silicon and Intel. It lives in the menu bar, uses almost no memory, and does nothing when you aren't scrolling.
To change a scroll event, an app has to sit in the stream of input events — and macOS guards that with the Accessibility permission. There is no smaller permission that allows it. Inversion is on the moment you install, so macOS shows you the prompt on the very first launch; decline it and nothing breaks, the app just says so in its menu and waits.
That permission is powerful, which is why what the app does with it is deliberately tiny: it looks at whether a scroll was a wheel notch or a glide, and reverses the numbers if it was a notch. It reads no keystrokes, stores nothing, and contains no networking code at all — there is no server for it to talk to. The whole app is a few hundred lines of Swift with no third-party dependencies, so there's no SDK in there doing something else on the side.
MouseScroll runs on my own Mac all day, but it isn't signed with an Apple Developer certificate yet — and macOS refuses to open an unsigned app without a detour through System Settings. For an app that asks for Accessibility, that is precisely the wrong first impression, so this page waits until there's a notarized build worth installing.
Because that switch is global. Turning it off does fix the mouse wheel, but it also reverses your trackpad, where natural scrolling is the whole point — two fingers up should push the page up, the way it works on every phone. macOS offers no per-device setting, which is the entire reason this app exists.
Yes, and there's no way around it: modifying an input event on macOS requires that permission, full stop. Inversion is switched on out of the box, so the prompt appears the first time you launch the app. If you decline, nothing breaks — MouseScroll keeps running, shows a warning in its menu with a direct link to the right settings page, and starts working the moment you grant it, without needing a restart.
A Magic Mouse keeps its natural scrolling, on purpose. Its surface is a touch surface, not a notched wheel, so it sends the same continuous events a trackpad does — and the same gesture should feel the same on both. If you want a Windows-style wheel, this app is for a mouse that actually has one.
No scroll settings, no. It leaves Natural Scrolling exactly where Apple put it and changes events in flight, one at a time, which is why quitting restores the normal behaviour instantly. The only thing it ever registers with the system is a Login Item, and only if you tick Launch at Login — unticking it takes the entry straight back out.
Turn it back on. MouseScroll starts from the setting macOS ships with — Natural Scrolling on — and flips the wheel from there. If the global switch is already reversed, the two corrections cancel each other out and you'll get the opposite of what you want on both devices. Switch Natural Scrolling back on in System Settings, and let MouseScroll handle the wheel on its own.
No. It runs on a thread of its own so events never queue behind anything else, and the work per event is flipping a few numbers. Scrolling stays as smooth as it was, and the app sits idle whenever you aren't touching a wheel.
Nothing. MouseScroll is free — it fixes one small annoyance and there's no licence, no trial and no account. If you'd like to support the work, ScreenGo is the paid one.
macOS 14 Sonoma or newer, on both Apple silicon and Intel — it's a universal binary. It lives in the menu bar rather than the Dock and takes up about half a megabyte.