BLINK(1)BLINK(1)
NAME

blinkspatial notes for your Mac

SYNOPSIS
Nborderless glass note, summoned anywhere
Bblink every panel in / out of view
Cgrid overlay — survey the whole board
DESCRIPTION

A menubar app for macOS. Press Hyper+N in any application and a note lands on your screen — placed in space, and remembered there. Each panel persists its position, size and sheet across launches, so your desk becomes muscle memory.

Notes are frontmatter markdown files in a folder you own. No account, no sync service, no lock-in — and external edits reconcile live, so your agents read and write the same files you do.

exit 0 · free & open sourceos: macOS 14+arch: Apple Silicon
~/Desktop
N

click anywhere — or press N — to drop a note in space

panels: 0/0

fig. 1 — the spatial model, running in your browser. Panels remember (x, y, w, h); the real thing renders as native NSPanel glass.

hotkeys
carbon
global chords, no accessibility grant
runtime
native
Swift + AppKit, zero Electron
format
.md
yaml frontmatter, utf-8
identity
uuidv5
deterministic identity from slug
sync
live
external edits reconcile in place
cloud
none
no account, notes stay local
//01ARCHITECTURE

Native bones, web typography.

No Electron shell around a web app — an AppKit panel hosting exactly one web view, writing exactly one file format. Every layer is replaceable because the filesystem is the contract.

layerimplementation
window
NSPanel + NSVisualEffectView
borderless, non-activating HUD glass; floats above workspaces without stealing focus
hotkeys
Carbon RegisterEventHotKey
three chords reachable from any app; hyper = ⌃⌥⇧⌘, every binding rewritable
editor
CodeMirror 6 — no react
a lean web view inside the native shell; flip read ⇄ edit in place, scroll preserved
render
marked (GFM)
github-flavored markdown, tables and [[wiki-links]] included
storage
frontmatter md · atomic writes
write tmp → rename; a note is never half-written, saved before create() returns
watch
directory watch + reconcile
directory watcher merges outside edits live — they type themselves in, caret included
fig. 2 — data flowswift · appkit
⌃⌥⇧⌘ — global chordsfrom any applicationNSPanel · AppKit shellborderless glass · menubar residentWKWebView → CodeMirror 6edit ⇄ marked (GFM) render~/…/Blink/Notes/*.mdfrontmatter · atomic write → renameblink CLIagents · scriptsspawn panelnative bridgeread / writeatomic write↑ fs events reconcile

One process, one folder. The CLI and any agent tooling hit the same markdown store the panels render — directory changes flow back through the same reconciliation path.

//02SHEETS

Every note is its own surface.

Five render sheets, assignable per note or as your default. Set one key in config.json and Blink hot-applies it to every open panel in under a second.

preview — weekly-review.mdsheet: glass
Weekly review
Ship v2 · port the palette
Notes land where you leave them.
see [[roadmap]]
// hot-applied to all panels <1s
"panel": { "sheet": "glass" }
//03AGENT-FIRST

The filesystem is the API.

Built to be driven by more than a keyboard. A CLI, a hot-reloading config file, and live reconciliation mean your agents read and write the same notes you do — no plugins, no integrations.

blink — the notes CLI
zsh · replay loopstdin: tty · stdout: piped
standup.mdtyped by claude
— waiting for filesystem events…
External edits don't just appear — they type themselves in, with a caret and a soft tick, so you notice without a notification stealing focus.
blink new|append|search
scriptable CRUD over the notes folder
--json on everything
pipe into jq, fzf, or an agent loop
exit codes, no daemon
the CLI talks to files, not a server
//04CONFIGURATION

Configured by a file, not a settings pane.

Theme, hotkeys, motion, sheets — one JSON file. Any process can edit it; Blink watches the directory and hot-applies changes to every panel. The settings window is just a view over it.

~/Library/Application Support/Blink/config.jsonjsonc · annotated
1{
2 "hotkeys": { // global chords, any app
3 "newNote": "hyper+n", // summon a panel anywhere
4 "blink": "hyper+b", // every panel in / out
5 "grid": "hyper+c" // survey the board
6 },
7 "panel": {
8 "sheet": "dotted", // glass·card·dotted·bracket·marginalia
9 "defaultWidth": 420,
10 "defaultHeight": 340
11 },
12 "motion": {
13 "entrance": "shimmer", // panel spawn animation
14 "durationMs": 260,
15 "enabled": true // Reduce Motion is always honored
16 },
17 "editor": {
18 "fontSize": 13,
19 "lineHeight": 1.75
20 }
21}
watching for changes…hot-apply < 1s
01
one source of truth
The GUI settings window reads and writes this file — no hidden state, no plist shadow copy.
02
scriptable by anything
Your dotfiles manager, an agent, a sed one-liner. If it can write a file, it can reconfigure Blink.
03
atomic + watched
Edits are applied to every open panel in under a second, with the same reconcile path as note content.
04
git-friendly
Check it into your dotfiles repo. Diffable, reviewable, revertable — like everything else here.
//05KEYBOARD INTERFACE

Everything is a keystroke away.

Three global chords reach Blink from any app; the rest act on the panel you're in. Hyper is ⌃⌥⇧⌘ — a modifier no app already owns. Every binding is rewritable in config.json.

global — from any application
new note, anywhere
panel spawns on the active space
N
blink — all notes / none
clear the screen, recall on repeat
B
grid overlay
every panel, tiled for a survey
C
in a panel
flip read / edit
in place, scroll position preserved
P
focus — quiet everything else
dims all other panels
.
step down — leave edit, drop focus
one level per press
close panel
file stays; the panel goes
W
hyper = remap: "hotkeys": { "newNote": "cmd+shift+j" }no accessibility permissions required
//06INSTALL

Free, open source, and yours.

A single native app for macOS. No account, no sign-in — download it, press ⌃⌥⇧⌘N, and start.

release — latest
Blink.dmg
Apple Silicon · notarized
native app
arm64
# or from your terminal
open -a Blink # then: ⌃⌥⇧⌘N, anywhere
free & open source
on GitHub
native macOS app
swift + appkit
no account
notes stay local
requirements — blink(1)
osmacOS 14 (Sonoma) or later
archApple Silicon
appsingle native bundle
runtimemenubar resident — no dock icon
permissionsglobal hotkeys only
networknone — no account, no cloud
blink(1)
000%