A macOS menu bar utility that enhances scroll wheel smoothness for Logitech (and other third-party) mice by intercepting scroll events and applying smooth animation.
- Smooth Scrolling: Transforms choppy scroll wheel events into smooth, animated scrolling
- Configurable Animation Duration: Adjust smoothing duration from 50ms to 500ms (default: 200ms)
- Menu Bar Utility: Runs in the background, accessible from the menu bar
- Global Settings: Applies to all applications system-wide
-
Prerequisites:
- macOS 13.0 (Ventura) or later
- Xcode 14.0 or later
- Swift 5.7 or later
-
Build Steps:
# Clone or navigate to the project directory cd smoothscroolClone # Open in Xcode open SmoothScroll.xcodeproj # Or build from command line: xcodebuild -scheme SmoothScroll -configuration Release
-
Run the App:
- Build and run from Xcode, or
- Run the built app from
Products/SmoothScroll.app
When you first launch SmoothScroll, macOS will prompt you to grant accessibility permissions. This is required for the app to intercept scroll events.
-
Automatic Prompt: When you first run the app, macOS may automatically show a permission dialog
-
Manual Permission: If the dialog doesn't appear:
- Open System Settings (or System Preferences on older macOS)
- Go to Privacy & Security → Accessibility
- Look for SmoothScroll in the list
- Toggle it ON
- If SmoothScroll isn't listed, click the + button and navigate to the app
-
Verify Permission: Check the menu bar icon - it should show:
- Green dot: Active (permission granted)
- Red dot: Permission Required (click Settings to open System Settings)
- Look for the SmoothScroll icon in your menu bar (double arrow icon)
- Click the icon to open the menu
- The menu shows:
- Status indicator: Green (Active) or Red (Permission Required)
- Settings: Opens the settings window
- Quit: Exits the app
Access settings by:
- Clicking Settings from the menu bar dropdown, or
- Using Cmd + , (Command + Comma) when the settings window is in focus
- Range: 50ms to 500ms
- Default: 200ms
- How it works:
- Lower values (50-150ms): Faster scrolling, less smooth
- Medium values (150-300ms): Balanced smoothness and speed (recommended)
- Higher values (300-500ms): Very smooth but slower scrolling
Adjusting:
- Open Settings
- Use the slider to adjust Animation Duration
- The value updates in real-time - try scrolling to test
- Changes are saved automatically
Click Reset to Defaults in the Settings window to restore:
- Animation Duration: 200ms
SmoothScroll uses macOS's CGEventTap API to:
- Intercept scroll wheel events before they reach applications
- Cancel the original choppy scroll event
- Break down the scroll delta into smaller increments
- Emit smooth scroll events over a configurable duration using an ease-out animation curve
- Apply the smooth scrolling globally across all applications
The smooth scrolling algorithm:
- Divides scroll events into approximately 60 steps per second
- Uses an ease-out curve for natural deceleration
- Maintains the total scroll distance while smoothing the motion
Check Permission Status:
- Open the menu bar dropdown
- Check if status shows "Active" (green) or "Permission Required" (red)
- If red, click Settings and follow the permission instructions
Re-grant Permissions:
- Open System Settings → Privacy & Security → Accessibility
- Find SmoothScroll and toggle it OFF then ON
- Restart SmoothScroll
Verify Event Tap:
- Check Console.app for any error messages
- Ensure no other apps are interfering with event taps
- Solution: Decrease Animation Duration in Settings
- Try values between 50-150ms for faster scrolling
- Solution: Increase Animation Duration in Settings
- Try values between 250-400ms for smoother scrolling
- Note: Higher values make scrolling slower overall
- Check: Ensure the app is running (check Activity Monitor)
- Restart: Quit and relaunch the app
- macOS Version: Requires macOS 13.0+ for MenuBarExtra
- Open System Settings → Privacy & Security → Accessibility
- Manually add SmoothScroll if it's not listed
- Ensure the toggle is enabled
- Framework: SwiftUI
- APIs Used:
CGEventTapfor event interceptionCGEventfor creating scroll eventsAXIsProcessTrustedfor permission checking
- Platform: macOS 13.0+
- Architecture: Menu bar utility (LSUIElement)
This project is provided as-is for educational and personal use.
Inspired by SmoothScroll.net and similar macOS smooth scrolling utilities like Mos and BetterMouse.