〰️ Zettel · for your Messages archive · macOS
Mark a decision with an emoji you already send. Zettel turns years of texts into a searchable ledger of every decision you two ever made — on your own Mac, nothing leaves.
the demo is a synthetic archive of invented people · nothing sends · runs in your browser
or
Signing in creates an account for your annotations — the marks, the ink, the chapters. It does not upload a single message: Zettel reads your archive on your own machine, read-only, and the sync carries sealed notes anchored to timestamps, never the conversation they sit over. Source on GitHub.
Press z and the record drops to a whisper while a second sheet comes up over it, in exact register, carrying your own marks. Lower it and there is nothing but the conversation again. Annotation is usually something you do to a record; here it is a separate plane that never touches it.
What makes it more than a nice gesture: a mark is stored as a moment and a height — never a pixel, never a message id. Drag the track from five years down to ninety days and your handwriting stretches with the years, because it reads the same map the conversation does. An annotation anchored to time rather than to a document is one that can outlive the document.
Send 📌, 🔥, or ❓ in your messages like you already do — Zettel turns each into a glowing marker on your timeline and a row in a living decision ledger. Declare a fresh decision and it writes back into the real thread; you both see it. Then copy the minutes — the whole ledger drops out as clean markdown, ready for the doc.
Everything Apple's search forgets: "exact phrase" · from:them · after:2024-01-01 · has:link · in:all — across one thread or every conversation you've ever had. Even words that were only spoken: voice memos transcribe on your own machine.
Zettel proposes where to look using structure alone — a question mark, then a fortnight of silence — without reading a word of what was said. Then, in your browser and nowhere else, it checks whether two of those silences were the same sentence. When someone asks you something in 2023 and asks it again in 2026, and neither time got an answer, the sheet ties the two together with a line. Nothing searched for it.
Your whole thread as a track — your voice above the line, theirs below. Scrub years in a second, name the chapters, press space and it plays itself. The instrument your most important conversation never had.
By default, nothing leaves your Mac — no account, no server of ours, and the archive is read-only. Your margins stay private on your machine. Turn the wifi off — everything still works.
Three exceptions exist, each a door only you can open.
Your wifi: --share serves your archive
to a device on your own network, over plain HTTP — a wifi you
trust, never one you share with strangers.
Your folder: if you and one other person choose to
co-annotate a thread, only the notes you each explicitly promote
sync — through a folder in a cloud you choose and control; those
bytes pass through that company's servers, not ours, and revoking
the folder ends it.
Your summons: when you call on an outside mind — a
question to Claude, a parcel tracker, a forecast — exactly what you
selected travels to that one service, and the summons shows you the
payload before it goes. Nothing is scanned, watched, or sent
without your two taps.
Every exception is a loan, not an amendment: as capability comes home to your Mac, the crossings retire.
What we hold, and what we can't → — the boundary stated plainly, including the parts that aren't true yet.
Zettel isn't in the App Store — it can't be; Apple sandboxes App Store apps away from your Messages archive, which is the whole point. So it's a small, open, notarization-pending download, and it goes out with early access rather than sitting on a public link. So you know what you're agreeing to, this is the whole of it:
zettel.zip.Zettel.command →
Open → Open. (Right-click, not
double-click — macOS blocks unsigned apps opened the normal way. This
is the one awkward step until we notarize.)