macOS Pre-release · in daily use, release hardening

Kinetip

A pen tablet that finally feels native on macOS.

A native macOS driver that turns pen input into precise pointing, dragging, and inertial scrolling — aware of whether the pen landed on scrollable content or on controls.

  • Swift
  • macOS
  • IOKit / HID
  • SwiftUI
  • Realtime
Kinetip settings window showing the readiness overview ~82MB · <2% of 1 core

Benchmarked on a Mac Studio, across a full workday of daily-driver use — not a synthetic demo.

~82MB Memory footprint
<2% Of a single CPU core, full workday
~400ns Median report-to-gesture latency
120Hz Frame-paced to ProMotion displays
Why it exists

A device you touch thousands of times a day deserves better

I run my Mac with a pen tablet instead of a mouse. All day, for everything — code, documents, windows, browsing. Not drawing: work. A pen is kinder to the hand, and once absolute positioning rewires your brain, a mouse feels clumsy.

macOS never really wanted anyone to work this way. Vendor drivers bury everything in per-model jargon, treat scrolling as an afterthought, fight you when the pen lands near a button, and can quietly stop working after the machine sleeps. For a device you touch thousands of times a day, small interruptions compound into a real cost — for me, and for every illustrator, editor, and accessibility-minded user who depends on a pen the same way.

So I wrote the driver I wanted to exist: a clean-room, native macOS driver that turns pen input into precise pointing, dragging, and scrolling — built around how macOS actually behaves, not ported through a compatibility layer.

What it does

The pen becomes a real pointer — and a better scroll wheel

Kinetip's signature move is context-aware pan scrolling: touch the pen down and drag, and the page glides with momentum, like a trackpad fling. The driver knows whether the pen landed on scrollable content or on a control — so a drag over a document scrolls, while a drag on a slider just works as a drag. No modes to toggle, no chords to memorize.

Kinetip gesture settings
Gestures
Kinetip momentum physics settings with live preview
Momentum, live preview
  • Feather-light

    ~82MB of memory and under 2% of a single CPU core across a full workday of active use — real daily-driver measurements, not a synthetic benchmark. It won’t compete with your work for your Mac’s resources.

  • Absolute positioning

    The tablet maps directly to the screen — or to one display, or to a custom active area with a visual editor. Point at a thing and the pointer is on it.

  • Native inertia

    Fling a page and it decays like macOS expects, with re-fling boosts and momentum physics you can preview and tune in the settings window.

  • Per-app policies

    Disable panning in your paint app, force a behavior in a stubborn one, adjust gain per application — exceptions live where the exceptions are.

  • Truthful diagnostics

    The first screen answers whether the tablet, permissions, mapping, and event posting are actually healthy. A failure names its fix; a fallback is never painted as success.

How it fits you

Every setting is a preset, not a wall of numbers

Kinetip has an absurd number of things you could tune — where the active area sits on your tablet, what each pen button and motion maps to, how scrolling decays, how loud a click feels, which apps get their own rules. Expose all of that as raw values and you don't get power, you get a spreadsheet nobody wants to touch.

So every dial here is a named choice instead of a naked number: pick Wood or Silicon for how a click sounds, not a decay coefficient; drag the active area on a visual map, not four raw coordinates; set a per-app override for the one paint tool that fights you, and leave everything else on sane defaults that already feel right out of the box. Maximum control, without ever making you do the math to get there.

Kinetip sound settings with named material presets — Aluminum, Wood, and Silicon
Named presets, not raw parameters
Why it stays out of your way

Built to disappear — from your workflow, and from Activity Monitor

Kinetip does one job, on one lightweight thread, and nothing else. Running it all day as my only pointing device, it holds around 82MB of memory and under 2% of a single CPU core — measured across a full workday of real use, not a synthetic benchmark. No background service phoning home, no cloud sync, no idle timers waking the CPU while you work.

That efficiency isn't an accident. One realtime thread owns the whole input spine — decode, screen mapping, gesture recognition, inertia, event synthesis — and it never allocates, never takes a lock, never calls into anything slow. Benchmarked on a Mac Studio, turning a raw hardware report into a gesture command takes a median of about 400 nanoseconds — sub-microsecond, for the whole decode-map-reduce chain. And every update is paced to whatever display you're on, so motion holds up at 60Hz and stays smooth all the way to ProMotion's 120Hz — the pen never feels like it's arriving a frame late.

Reliability is treated as a feature with a spec: 800+ tests, seeded fuzzers, and soak storms that hammer device churn and permission flaps, so the driver recovers cleanly from sleep, wake, and hardware disconnects instead of degrading quietly.

Kinetip diagnostics view
Diagnostics
Kinetip insights view
Insights, kept local
Where it is now

The best compliment an input driver can get is silence

Kinetip is my daily driver — used, tested, and refined with the same pen it drives. It is now more reliable than the vendor software that came with the hardware, and the release-hardening milestones are complete, with final acceptance gates in progress ahead of a public 1.0.

The tool I built to fight my tablet driver is now the reason I forget the driver exists. For an input device, disappearing is the finish line.
Fact sheet

Kinetip at a glance

Platform
macOS 14+
Status
Pre-release — daily-driven, release gates in progress
Model
Native menu-bar app + settings window
Stack
Swift 6 · IOKit HID · CoreGraphics · SwiftUI
Footprint
~82MB memory · under 2% of a single CPU core across a full workday
Input path
Realtime thread — no locks, no allocations
Latency
Median ~400ns per report, hardware to gesture — benchmarked on a Mac Studio
Display sync
Frame-paced to your panel — 60Hz or ProMotion 120Hz
Customization
Active area, gestures, momentum, sound, and per-app overrides — all named presets, no raw numbers
Testing
800+ tests · seeded fuzzers · runtime soak storms
Privacy
Fully local — no network, no telemetry
Distribution
Open to publishing partners