Trackpad Studio
GitHub

macOS 13+ · Swift · AppKit · MIT

Your trackpad has been a drawing surface this whole time.

Trackpad Studio reads the raw multi-touch stream macOS keeps to itself: where every finger is, how hard it presses, how wide it lands. Draw at the exact spot your finger is touching — then poke around and find out what else the pad has been reporting all along.

macOS 13+
Swift · AppKit
MIT free
0 dependencies
The Trackpad Studio board: a near-black canvas with a sun, two waves, an arrow and a labelled box, all sketched with fingers. A tool column sits on the left; the status strip reads ZEN, pen, 100%.
Every stroke here was drawn with a finger Corner brackets mark the physical pad Stroke width follows Force Touch

The web only gets a mouse

Drag inside the box.

This is the whole of what a browser receives from your trackpad: one point, no pressure, relative motion. Put a second finger down — the counter stays at 1.

macOS knows far more, and it hands that over only to native code: per-finger absolute coordinates from NSTouch, contact ellipses and capacitive size from a private framework, pressure from Force Touch. That gap is the entire reason this app exists.

drag here
Points
0
Force
X
0.00
Y
0.00
Mode
relative

mouse events · 1 contact max

Guided tour · 8 capabilities

What your trackpad can secretly do

The app ships a tutorial panel with one card per capability. Each stays dashed until you actually perform the gesture, then ticks over to ✓. Nothing is unlocked by reading.

Multi-touch tracking

Rest 1–5 fingers anywhere on the pad

Absolute position

Slide one finger to a corner; the dot mirrors it

Per-finger size + ellipse

Press flat with your thumb; watch the ellipse grow

Force Touch pressure

Click and keep pressing; the bar fills past stage 1

Pinch

Two fingers, in and out; the scale multiplies

Rotate

Two fingers, turn; degrees accumulate

Scroll

Two fingers, any direction; dx and dy stream in

Resting touch

Park a thumb and leave it; it is counted, not obeyed

Weight estimate experimental

Capacitive contact size grows with how hard something presses, so the pad can be talked into behaving like a very rough scale. Clear the pad, tare it, set a spoon down, then slide grams-per-unit until a known weight reads true. It is a party trick with a plausible number attached, not a kitchen scale.

Per-finger data needs Input Monitoring permission. Without it the app drops the size-based features and everything else keeps working.

0.0 g net size 0.000

On the board

Fingers on the pad, cursor out of the way

ZEN

Zen mode freezes the pointer

The moment a finger lands, the system cursor is frozen and hidden, so drawing never drags focus across your desktop. It comes back the instant the last finger lifts, the window loses focus, or you press Esc.

Force sets the width

A light touch is only a cursor. Press and the stroke thickens under your finger — Force Touch pressure drives the line weight directly.

Zoom and pan, one gesture

Two fingers scale and move the canvas at the same time. Both are computed from the raw touch positions, which sidesteps macOS gesture exclusivity — you never have to pick one or the other.

Three-finger drag draws

Drop three fingers and the current tool commits a stroke without any pressure at all. The leftmost finger is the pen; the other two are just there to say you mean it.

Resting fingers stay out of it

Thumbs and palms parked on the pad render as ghost rings and are filtered out of every gesture calculation, so leaning on the trackpad does not throw your zoom around.

Keys 1–5 pick pen, line, rectangle, ellipse and arrow. T drops a text label that holds the same on-screen size however far you zoom in.

The tutorial panel: a live redraw of the trackpad surface on the left, readouts for touches, force, pinch, rotate and scroll along the bottom, and a capability checklist reading 0 of 8 discovered on the right.

Live surface

The tour is an instrument, not a slideshow

  • The left panel is your trackpad, redrawn live — every contact, its ellipse, its coordinates.
  • The strip underneath reads touch count, force, pinch scale, rotation and scroll delta as you move.
  • The right column keeps score: 0 of 8 discovered until you start touching things.
  • The weight card sits on top with its own tare button and grams-per-unit slider.

Install

Three lines and about a minute

You need the Xcode command line tools with Swift 5.9 or newer. There are no prebuilt binaries yet, so the first run compiles from source.

$ git clone https://github.com/ZaynJarvis/trackpad-studio
$ cd trackpad-studio
$ swift run TrackpadStudio
Open the repository

Optional: the per-finger size, contact ellipse and weight card read from a private macOS framework, which needs Input Monitoring under System Settings → Privacy & Security. Skip it and the app still runs — those three cards simply report themselves unavailable.

Questions

Reasonable doubts

Why does this have to be native?

A browser sees your trackpad as a mouse: one relative cursor, no matter how many fingers are down. Pinch shows up as a ctrl-wheel event, pressure only appears in Safari during a click, and per-finger position never appears at all. Absolute coordinates come from AppKit's NSTouch and contact size comes from a private macOS framework. There is no web equivalent to port.

Does it work with an external Magic Trackpad?

Yes. Anything macOS reports as a multi-touch device works the same way — built-in or connected over Bluetooth.

Is the weight estimate real?

It measures something real — capacitive contact size, which grows with pressure — but it is not a scale. With a tare and a calibration against a known weight you can get a believable number out of a light object. Enjoy it as a party trick and do not weigh your coffee beans with it.

Can I draw with something other than a finger?

Anything capacitive the pad registers will do — a knuckle, a touchscreen stylus tip. A wooden pencil is invisible to it.

Will it leave my cursor stuck?

No. The pointer is re-enabled when the last finger lifts, when the window stops being key, and when the view goes away. Never leaving a frozen cursor behind is a hard rule in the code.

What does it cost?

Nothing. MIT licensed, source on GitHub, no account, no telemetry. If it made your afternoon better there is a coffee button below.