I’ve built a lot of software that runs near my Mac — containers, workers, dashboards, little servers humming in a closet. This summer I finally built something that runs on it. It’s called jot., it’s a scratch-notes app, and it is my first real, native, lives-in-the-menu-bar Mac app. I use it more times a day than anything else I’ve ever made.
It exists because of a paper cut. I love Ghostty — I live in it all day — but copying text out of a terminal is where words go to get hurt. Selections truncate mid-line. Three mystery spaces glue themselves to the front of things. Line breaks land wherever the window width happened to be. I kept drafting thoughts in the place my hands already were, then pasting mangled text everywhere else and cleaning it up by hand. The fix wasn’t a better terminal. It was a real text view that feels like the terminal, one keystroke away, where copy and paste just behave.
The whole app is one keystroke
Press ⌘⇧N anywhere — mid-email, mid-terminal, mid-whatever — and a blank plain-text note pops up. Type the thing, paste the thing, copy it back out, ⌘W. Gone. That’s the entire product.
The design bet is that notes are ephemeral by default. Most of what I jot down is a phone number I’m about to dial, a paragraph I’m rearranging before it goes in an email, the output of a command I need to eyeball once. Making me name and file that is how scratch text ends up as four hundred stale files called “Untitled.” So jot. discards by default, with a quiet safety net: anything closed unsaved gets dumped to a hidden trash folder, last twenty kept, no confirmation dialog ever. In two months the net has saved me maybe three times, which is exactly the right number — often enough to exist, rare enough that I never think about it.
When a note does deserve to live, one key saves it to a plain-text folder in iCloud and another sends it straight into my notes vault as Markdown, where the rest of my system picks it up. First save locks the destination, so I decide once per note and never again. And because everything in my life eventually grows a command line, there’s a jot CLI: pipe any command’s output into a fresh note instead of scrolling terminal history, which turns out to be the perfect middle ground between printing something and copying it blind.
It dresses like my terminal
The part that delights me most is the part nobody asked for. jot. is a visual homage to Ghostty, the terminal I live in — and not by copying a screenshot. At launch it reads my actual Ghostty config: font, size, padding, theme name. Then it resolves the theme file out of Ghostty’s own bundle for the real colors. Change my terminal theme, restart jot., and the notes follow. The keybindings are cloned too — splits, tabs, the same ⌘W that closes the focused pane first, then the tab, then the window. My scratch pad drives exactly like my terminal because my hands already know that layout, and retraining hands is the most expensive UI change there is.
Four hundred and eighty lines, no Xcode
Here’s the thing that surprised me about native Mac development: how little of it there had to be. jot. is one Swift file, open source, about 480 lines, compiled with swiftc from a shell script. No Xcode project, no dependencies, no framework du jour. AppKit has been doing windows, tabs, and text views since before I had opinions about software, and it shows — most of my 480 lines are preferences and keybindings, not plumbing. Even the global hotkey came cheap: the ancient Carbon API registers it without Accessibility permissions, at the cost of shadowing ⌘⇧N everywhere, including Chrome’s new-incognito shortcut. I accepted that trade in about four seconds.
For six weeks the app had no face at all — no icon, no menu bar presence, summonable only by hotkey, which meant explaining to anyone watching that the app was invisible on purpose. In July it grew up: a menu bar icon that summons a note on click, and a small trick I’m fond of — the app flips its activation policy at runtime, so it appears in ⌘-Tab and the Dock only while a note is actually open. An empty scratch-notes app has no business occupying your app switcher. What that took was the unglamorous kind of learning: three separate bundle fields all have to agree before Finder believes an app’s name, and a launchd-managed app restarted the wrong way will cheerfully run twice and fight itself for the hotkey. Now I know.
Joining the family
jot. takes its name from the family of little apps my household runs — lowercase word, then a period. But it’s the odd sibling on purpose: the others wear the family’s paper-white palette, and jot. wears my terminal’s clothes, because it isn’t a destination you visit — it’s a piece of the terminal that escaped and floats over everything else. The family’s rule is that identity gets one channel. jot.’s channel is that it looks like the place I already live.
I spent years thinking “real Mac app” meant an Xcode project, a designer, and a level of ceremony I’d never sit still for. It turned out to mean one file, one keystroke, and something my hands reach for before I’ve finished having the thought.