TapDeck is a native macOS utility that turns multi-finger trackpad gestures into mouse clicks, system actions, and app shortcuts. It is written in Swift and SwiftUI, runs quietly in the background, and processes all touch data locally.

Every gesture has its own enable switch and action menu. The built-in defaults are deliberately conservative so common macOS assistive gestures are not replaced unexpectedly.
| Gesture | Default | Default action |
|---|---|---|
| One-finger Force Click | On | Quick Look |
| Two-finger Click | Off | No Action |
| Two-finger Tap | Off | No Action |
| Three-finger Click | On | Middle Click |
| Three-finger Tap | On | Middle Click |
| Four-finger Click | Off | No Action |
| Four-finger Tap | On | Mission Control |
Available actions:
When an application shortcut is selected, TapDeck launches the app if necessary or brings all of its windows forward when it is already running.
The Test page visualizes current finger contact and reports every supported gesture in real time. Test mode suppresses configured actions, so recognition can be checked safely before a binding is enabled.

Closing the settings window exits Test mode automatically.
The optional in-app log records gesture recognition, requested actions, monitoring changes, reconnections, test-mode transitions, and sleep or wake events.

Logging is off by default. When enabled, the app keeps up to 1,000 recent events in memory for the current session. Disabling logging stops new entries without deleting the existing list. Copy All exports the visible session log, while Clear Log removes it. An action request confirms only that TapDeck issued the command; it does not confirm that another application completed it.
The settings window groups related controls into four pages:
Changes take effect immediately. Open Settings with Command-Comma, or reopen TapDeck from Finder or Spotlight. The window remembers the last settings page; closing it always exits Test mode. Choose TapDeck > Quit TapDeck (Command-Q) to stop the background app.
The menu bar icon is shown by default and offers gesture recognition, Settings, and Quit. Choose Hide Menu Bar Icon to remove it while keeping TapDeck running. To bring it back, open TapDeck from Finder or Spotlight and turn on General → Show in Menu Bar.
The screenshots above show the previous 0.5.0 layout and will be refreshed for the reorganized settings interface.
TapDeck.xcodeproj in Xcode.The same debug build can be created from Terminal:
xcodebuild \
-project TapDeck.xcodeproj \
-scheme 'TapDeck (Direct)' \
-sdk macosx \
build
After the settings window is closed, gesture recognition continues in the background. Reopen the app from Finder or Spotlight to change its settings. To stop it completely, choose TapDeck > Quit TapDeck (Command-Q).
Debug builds are isolated from the installed release app. They use the name TapDeck Dev and the bundle identifier app.peterlee.tapdeck.debug; Launch at Login is intentionally unavailable in debug builds. Release builds use TapDeck and app.peterlee.tapdeck.
The String Catalog at Resources/Localizable.xcstrings contains complete English and Traditional Chinese interface text. English is the development language and is also used as the safe fallback for any missing localization. The app follows the language order configured in macOS.
When adding interface text, use a semantic localization key through L10n and supply an English fallback. Keep both en and zh-Hant entries complete before shipping.
Touch processing is event-driven. While recognition is enabled, a lightweight health check runs every 15 seconds. Silent touch streams are conservatively reopened after 60 seconds, and transient device failures are retried after wake. Mouse and pressure monitors are installed only for enabled gestures. Non-trackpad multitouch devices, including the Touch Bar, are ignored; steady raw frames are limited to 60 Hz while finger landing and lift boundaries remain immediate.
GitHub Actions builds the release executable and runs the tests on macOS for every push and pull request. The Build workflow can also be run manually from the Actions tab.
The Xcode project contains the native app target and a TapDeckTests unit-test target. Package.swift is included for command-line development.
swift test
Public macOS APIs do not expose global raw multi-finger trackpad data. TapDeck dynamically loads Apple’s private MultitouchSupport.framework at runtime and uses public Core Graphics APIs to emit mouse and keyboard events. Consequently:
All touch recognition, preferences, and optional activity logs remain on the Mac. TapDeck has no networking code, analytics, telemetry, or cloud dependency.