Middle-button drag scrolling that feels at home on macOS.
Hold the wheel, move the mouse, and glide through long pages, editors, timelines, and canvases.
Download for macOS · Install with Homebrew · Build from source
Mac Drag Scroll brings the familiar Windows-style middle-click drag gesture to an external mouse on macOS. It is a small native menu bar utility: no account, no cloud service, and no interference with normal trackpad gestures.
Press and hold the middle mouse button, then move away from the origin. Distance controls speed, direction controls the scroll vector, and releasing stops immediately. The compact visualizer can be resized, restyled, animated, or turned off.
| Natural control | Scroll vertically, horizontally, or diagonally with one continuous gesture. |
| Stable targeting | The gesture stays attached to the window where the drag began. |
| External-mouse focus | Trackpad gestures are ignored instead of being intercepted or remapped. |
| Responsive feedback | The one-dot Liquid Glass visualizer reacts to direction, distance, double-clicks, and fast reversals. |
| Menu bar native | Run quietly in the background and open Settings only when needed. |
| Made to recover | Permission repair, persistent preferences, local diagnostics, and verified updates are built in. |
brew install --cask martincalander/tap/mac-drag-scroll- Download
MacDragScroll.dmgfrom the latest release. - Open the disk image and drag Mac Drag Scroll into Applications.
- Right-click the app in Finder, choose Open, then confirm the first launch.
- Grant Accessibility access when macOS asks.
Why does the first launch require right-click → Open?
Current releases carry a stable project code signature but are not Apple Developer ID signed or notarized because that requires a paid Apple Developer membership. macOS may therefore block a normal double-click on a newly downloaded build. In Finder, right-click Mac Drag Scroll, choose Open, and confirm. This is required once for each manually downloaded build.
The pinned project identity keeps the Accessibility grant stable across updates. Sparkle signatures and GitHub build provenance independently protect and document release files. See Security and Releasing.
Install without Homebrew
curl -fsSL https://github.com/martincalander/MacDragScroll/raw/main/install.sh | bashMac Drag Scroll needs Accessibility permission to detect the configured mouse button globally and send scroll events to the target window. It does not use this permission to record typing or inspect content. Input Monitoring is not required.
Open System Settings → Privacy & Security → Accessibility and enable Mac Drag Scroll. The app checks automatically and starts monitoring as soon as access is active; a restart action appears only if macOS does not activate the event tap immediately.
When upgrading from 1.1.0 or earlier to 1.2.0, macOS requires one final Accessibility grant because the earlier builds used changing ad-hoc identities. Later updates retain the pinned identity and should not require permission again.
Open Settings from the menu bar icon.
| Setting | What it controls |
|---|---|
| Speed and acceleration | Base scroll rate and how quickly it increases with drag distance. |
| Dead zone | The neutral area around the gesture origin. |
| Precision mode | Hold an additional configurable modifier during a drag for temporarily slower, finer scrolling. |
| Cursor hold | Optionally keep the pointer at the middle-click origin so pointer-sensitive content continues scrolling. |
| Trigger | Middle click by default, with guarded alternatives for primary and secondary buttons. |
| Visualizer | Size, opacity, tint, glass intensity, and motion effects. |
| Excluded apps | Applications where drag scrolling should stay disabled. |
| Launch behavior | Login startup and whether the helper remains in the menu bar. |
| Updates | Automatic checks, release history, and manual update controls. |
Preferences are stored per macOS user and survive app updates and normal uninstall/reinstall cycles. Details and recovery paths are documented in Support.
- Local by design: no account, analytics, advertising, or cloud backend.
- Narrow input scope: only the configured mouse trigger starts scrolling; trackpad gestures are filtered out.
- Permission aware: scrolling disables itself when required access is missing or revoked.
- Inspectable releases: automated checks, secret scanning, CodeQL, Sparkle signatures, and GitHub attestations run through the public repository.
- Private diagnostics: crash reports stay on the Mac until the user chooses to share them.
Read Privacy, Security, and the implementation Architecture.
Requirements: macOS 14 or later and Xcode 26.2 or later.
git clone https://github.com/martincalander/MacDragScroll.git
cd MacDragScroll
xcodebuild -project macdragscroll.xcodeproj \
-scheme macdragscroll \
-configuration Debug \
buildRun the test suite with:
xcodebuild -project macdragscroll.xcodeproj \
-scheme macdragscroll \
-destination 'platform=macOS' \
testContributions are welcome. Start with Contributing, the Code of Conduct, and the Roadmap.
| Resource | Purpose |
|---|---|
| Support | Permission repair, diagnostics, and common questions. |
| Architecture | Runtime boundaries, safety invariants, and event flow. |
| Privacy | What the app can access and what it never collects. |
| Security | Vulnerability reporting and release verification. |
| Governance | Maintainer roles, review policy, and project decisions. |
| Changelog | Version history and release notes. |
| Scorecard notes | OpenSSF posture, controls, and current limitations. |
| Releasing | Maintainer release and provenance process. |
- macOS 14 or later
- An external mouse with a middle button or clickable scroll wheel
- Accessibility permission
- Japanese translation review: uglykatsuki
Mac Drag Scroll is available under the MIT License.
Made by Martin Calander.



