← All projects

Case study

09 / 2026

Retain

An AI notetaker that doesn't hand your voice to some random server

Context

A lecture recorder and notetaker for macOS. The audio is transcribed on the Neural Engine and turned into notes by whatever model you happen to be running in LM Studio no account, no cloud, and no network traffic that leaves localhost.

Why I built it

Granola had the right shape. You sit in a room, something listens, and afterwards there are notes better than the ones you'd have taken while also trying to follow the lecture. The part I couldn't get past is what the recording costs. A lecture hall is full of people who never agreed to anything, and the standard deal is that their voices and mine go to a server I don't own, in exchange for a product that is free.

I wanted the same thing, running on my own laptop.

Transcription is Apple's problem, not mine. The speech model ships with the OS, runs on the Neural Engine, and costs nothing per minute. No API key, no bundled weights, no build of someone else's inference engine to keep alive across two OS releases.

The language model is yours, not mine. retain talks to LM Studio over localhost and takes back notes, so the model is whatever you decided to run swapped in a dropdown, not in an app update. It also means nobody can deprecate this app by changing their pricing page.

There is no account, no sync, no telemetry and no crash reporter. The only network code in the app points at 127.0.0.1, which is a claim you can verify with Little Snitch in about thirty seconds instead of taking my word for it.

Recording a room is something you do to everyone else in it as well. Keeping the audio on the machine that recorded it isn't a feature it's the only version of this I could defend to the person sitting next to me.

Stack

SwiftSwiftUISpeechLM StudioXcodeNeural EnginemacOS

Links

Next