Back to home
Productivity2026

Noted

A local-first markdown notes app for Mac, built from scratch. Every note stays a plain file you own, and underneath sits a quiet progression layer for the part that's genuinely hard, keeping the writing habit.

I built a local-first notes app where every note stays a plain file you own, with a quiet habit layer underneath.

Design breakdown

How it was built, and why

Noted is a fast, local-first markdown notes app for Mac. Every note is a plain .md file in a folder you own, Obsidian-vault compatible, with nothing sent anywhere.

01

The flow

Open Noted and land in a persistent editor with instant switching between notes: write in a syntax-highlighted mode on dotted paper, or read with clickable tasks. Reach anything with Cmd K, a fuzzy jump-and-actions palette, or search full note content with Cmd Shift F. Type a wikilink with autocomplete to connect two notes; every link becomes a backlink and a node in a force-directed graph view. Add YAML frontmatter to a note and it renders as a properties panel; give it a status field and it appears on a drag-and-drop kanban board automatically, with no separate setup step. Folders mirror the real folder structure on disk, tags gather notes across folders, and daily notes, templates, pinning, trash with restore, HTML export, and a focus mode round out the write loop. Underneath all of it, a quiet progression system, the Bindery, tracks writing streaks and craft milestones without turning note-taking into a game.

02

What it is

Noted is a fast, local-first markdown notes app for Mac. Every note is a plain .md file in a folder you own, Obsidian-vault compatible, with nothing sent anywhere: the server is a zero-dependency Node process bound to localhost, wrapped in a small native Swift shell so it launches and quits like a real Mac app rather than living in a browser tab. It is a standalone rebuild, not a wrapper around a third-party notes engine.

03

How it works

The stack is deliberately minimal end to end: a hand-rolled Node server handles static files, a JSON API over the vault, and server-sent events for live file-watching, paired with a vanilla ES-module front end that has no bundler and no build step, including its own hand-rolled markdown renderer for frontmatter, wikilinks, tasks with source-line mapping, and tables. The native shell is a small Swift WKWebView app that starts the server itself if it is not already running and stops it again on quit, with its own icon generator and a build script that compiles, draws the icns, and signs the app. On top of the writing core sits the Bindery: Craft Points build toward six ranks from Apprentice to Illuminator, a streak tracker called the Practice allows one grace day a week, notes worked across three or more days over two or more weeks earn an asterism, twelve real Marks unlock for genuine milestones, and a Colophon view holds the record, rank, streak, vault stats, and a personally calibrated year heatmap. Celebrations stay deliberately quiet: one glass toast for most moments, and for eleven lifetime milestones only, a brief drift of ink motes.

04

Why it matters

The goal was a notes app with real ownership, plain files on disk instead of a proprietary database, that still carried the thinking tools actually worth having, links, backlinks, a graph, real search, without the weight of a general-purpose workspace tool repurposed into a notes app. The Bindery exists because habit is the genuinely hard part of any writing practice, and most gamified productivity layers cheapen that by being loud about it; this one only speaks up at eleven real moments across a lifetime of use.

Components, live

The pieces, moving

Live markdown editor
The hand-rolled renderer lighting up as I type, with tasks you can actually check off.
Field notes
doing
Vault | edited just now
0 wordssaving