Magic Flip

April 13, 2026 · View on GitHub

Magic Flip icon

A lightweight macOS menu bar app that flips the touch surface orientation of an Apple Magic Trackpad used upside down.

If you prefer using your Magic Trackpad flipped over (for ergonomics, comfort, or just because), this app rotates the trackpad's touch surface 180° so cursor movements match the physical orientation.

Features

  • Menu bar app — runs quietly in the background with a simple toggle
  • Device-specific — only inverts the external Magic Trackpad; your built-in trackpad and mouse work normally
  • Hot-plug support — detects when you connect or disconnect the Magic Trackpad
  • Launch at Login — optional autostart
  • Native UI — uses the standard macOS 26 (Tahoe) menu bar popover style

Requirements

  • macOS 26 (Tahoe) or later
  • Apple Magic Trackpad (any generation, USB or Bluetooth)
  • App sandbox must be disabled (the app uses a private framework and IOKit)

How It Works

The app uses IOHIDManager to detect your external Magic Trackpad by vendor ID and product name. When a trackpad is found, it dynamically loads Apple's private MultitouchSupport.framework and calls MTDeviceSetSurfaceOrientation to rotate the touch surface 180°. This makes the trackpad interpret touches as if it were right-side up, so cursor movement, scrolling, and gestures all work naturally. The orientation is restored to normal when you disable inversion or quit the app.

Other input devices (built-in trackpad, mice) are unaffected.

Installation

  1. Download MagicFlip.dmg from the latest release
  2. Open the DMG and drag MagicFlip.app to the /Applications folder
  3. Eject the disk image

The app and DMG are not signed or notarized, so macOS Gatekeeper will block them. To allow the app to run:

  1. Open the app by right-clicking (or Control-clicking) MagicFlip.app in /Applications and choosing Open
  2. If you see a warning that the app "can't be opened", go to System Settings > Privacy & Security, scroll down, and click Open Anyway next to the MagicFlip message
  3. You may be prompted for your password or Touch ID — confirm to allow the app

Alternatively, remove the quarantine attribute before launching:

xattr -d com.apple.quarantine /Applications/MagicFlip.app

You only need to do this once. After the first successful launch, macOS will remember your choice.

  1. The app will appear in your menu bar — toggle Invert Trackpad to enable
  2. Toggle Launch at Login if you want inversion to stay on across reboots

Building from Source

The app sandbox is disabled (required for dlopen of the private MultitouchSupport.framework and IOHIDManager access), so this app cannot be distributed via the Mac App Store.

Command Line

Build a Release binary into ./build and copy it to Applications:

xcodebuild -project MagicFlip.xcodeproj -scheme MagicFlip -configuration Release SYMROOT=./build build
cp -r ./build/Release/MagicFlip.app /Applications/

Xcode GUI

  1. Open MagicFlip.xcodeproj in Xcode 26+
  2. Product > Scheme > Edit Scheme…, select Run on the left, change Build Configuration to Release, close
  3. Press Cmd+B to build
  4. In the Project Navigator, expand MagicFlip > Products, right-click MagicFlip and choose Show in Finder, then drag it to /Applications

Creating a DMG

After building the Release .app (via either method above), create a distributable disk image:

./create-dmg.sh

This produces MagicFlip.dmg with a drag-to-Applications layout. Share this file for easy installation.

Private Framework Notice

This app dynamically loads Apple's private MultitouchSupport.framework at runtime. Because it is a private API, it could break with future macOS updates. No Accessibility or Input Monitoring permissions are required.

Note on Device Filtering

The app identifies the external Magic Trackpad using a combination of:

  • Apple vendor ID (0x05ac USB / 0x004c Bluetooth)
  • Product name containing "Trackpad"
  • Excluding devices with the kIOHIDBuiltInKey flag

If inversion isn't working, make sure your trackpad is detected (shown in the popover).

License

MIT — see LICENSE for details.