← All work

2026 · Designed and built, with an AI coding harness Personal

Sidl: trackpad edge gestures for macOS

An open-source macOS menu bar app that adds edge swipes, edge slides and corner clicks to the trackpad, built on private multitouch, display and media APIs.

Published

3
gesture types: swipe, slide, corner click
84
tests, run on CI for each push
$0
instead of $9 for a paid tool

Context

I saw a post on Threads about a tool that adds gestures to the trackpad you already have. It cost $9, and that was the sale price. I built my own overnight, with a DeepSeek-powered coding harness, and made it free and open source.

Sidl is a menu bar app. It adds three types of input to the trackpad:

  • Edge swipes. Swipe in from the left edge to open an app (Terminal by default). Swipe down from the top edge to play or pause.
  • Edge slides. Slide on the left edge to change brightness. Slide on the right edge to change volume.
  • Corner clicks. Click in the top-left corner for the previous track. Click in the top-right corner for the next track.

The menu bar panel shows the live touches, the last gesture and whether scroll blocking is on.

The Sidl panel under its menu bar icon: one device, one finger, last gesture Play/Pause, scroll blocking on, and a finger shown at 0.82, 0.24 on the trackpad.

Constraints

  • No public API for raw touches. macOS gives gestures, not finger positions.
  • No public API for brightness or media control. The built-in display, external monitors and “now playing” each need a different private path.
  • Normal input must still work. A two-finger slide on an edge is also a scroll, and a corner click is also a click.
  • No paid signing. Without an Apple Developer Program membership, each build gets a new ad-hoc identity.

Design

How Sidl turns touches into actions Each trackpad sends raw touch frames to a C shim over MultitouchSupport. On the touch thread, TouchHub keeps gesture state for each trackpad and runs the edge swipe and edge slide recognizers and the corner click detector. Swipes become discrete actions: media commands, opening an app, or key events. Slides become continuous changes to volume or brightness, shown in a HUD. An event tap drops scroll events that a gesture owns, and it turns a click in a top corner into that corner's action. Trackpads raw touch frames Touch thread C shim · MultitouchSupport TouchHub · state per trackpad edge swipe · edge slide corner click detector · 12% zone Discrete actions MediaRemote · open app · keys Volume · brightness → HUD CoreAudio · DisplayServices · DDC Event tap drops owned scrolls · corner clicks
Touches are read and sorted on the touch thread. Actions and the event tap use the result.

A C shim links the private MultitouchSupport framework and sends raw touch frames to Swift. Each frame goes to TouchHub, which keeps separate gesture state for each trackpad, so frames from two trackpads never mix. Recognizers sort each frame into an edge swipe, an edge slide, or no gesture. A swipe runs a discrete action. A slide sends a continuous change to volume or brightness, and a HUD shows the new level.

Clicks go a different way. An event tap sees each click. If one finger was in a top corner, the tap drops the click and runs that corner’s action.

Key decisions

Zones, not new gestures. Sidl uses 10% strips on the edges and a 12% zone in each top corner. The center of the trackpad keeps all the gestures that macOS gives.

Gestures run on the touch thread. The recognizers run where the frames arrive, not on the main thread. When a slide starts, the event tap can drop its scroll events at once. Momentum scroll events follow the scroll that they belong to.

A slide owns the fingers. When a slide starts on an edge, a swipe on that edge does not also fire. A gesture set to None does not act and does not block scrolling.

Two brightness paths. DisplayServices controls the built-in display. DDC/CI over I2C controls an external monitor on Apple silicon. During a fast slide, Sidl spaces out the writes to the monitor.

Sensitivity as five levels. For a swipe, each level sets the distance a finger must travel, from 20% of the trackpad down to 8%. Five named levels are easier to tune than raw thresholds.

Failure handling

  • Tap-to-click sends the click late. macOS sends the click after the finger lifts. The corner detector keeps the last corner for 0.3 s, so the late click still finds its corner.
  • Trackpads connect and disconnect. Sidl watches for multitouch devices and reads the device list again 1 s after the last change, and after the Mac wakes.
  • The event tap can stop. macOS turns off a slow tap. Sidl turns it on again at once. Until the user gives the Accessibility permission, Sidl tries again every 2 s.
  • The permission reset on each build. An ad-hoc signature changes with each build, so macOS sees a new app. A self-signed certificate, with a designated requirement on its leaf hash, keeps the permission across builds.
  • Not tested on all hardware. I tested Sidl only on a built-in trackpad and display. A Magic Trackpad, DDC/CI on a real monitor, and Apple external displays are not tested yet.

Result

Sidl runs from the menu bar with a settings window, a HUD, launch at login and a debug view. The source is on GitHub under the MIT license, and the site is sidl.shresthaoshan.com. There is no signed release yet, because a signed release needs the $99-a-year membership. If you can build it yourself, you save the $9.