The sticky notes app that Apple Stickies should have been.
Jotdown does for Stickies what iTerm2 did for Terminal: same familiar shape, an entirely different ceiling. Your notes are still small floating windows on your desktop, drag them, resize them, color them, but inside each one is a real markdown editor with live rendering, interactive checkboxes, syntax-highlighted code blocks, and proper undo. Jot something down; it looks good and stays useful.
No vaults. No projects. No file management. Just notes.
Apple Stickies is wonderfully frictionless, and Jotdown keeps everything that makes it great: instant notes, floating windows, colors, zero setup. Then it fixes the ceiling:
| Apple Stickies | Jotdown | |
|---|---|---|
| Instant floating notes | ✓ | ✓ |
| Colors, collapse, desktop notes | ✓ | ✓ |
| Todo lists | rows of dashes | real checkboxes, click to tick, auto-continue on Enter |
| Structure | plain text | headings, lists, quotes, dividers, live-rendered |
| Links | plain text | clickable, [title](url) or bare URLs |
| Code snippets | plain text | fenced blocks, syntax-highlighted in 30+ languages, auto-indent |
| Formatting | fonts menu | markdown + a hover toolbar |
| Your data | proprietary archive | plain .md files on disk, always readable |
| Export | RTF/plain text | Markdown, per note or all at once |
| Undo | basic | full history across every edit |
And unlike heavier markdown apps (Obsidian, Notion, Bear), there is nothing to set up and nowhere to file things, a note is one keystroke away and lives on your desktop.
- Live markdown, Obsidian-style: headings, bold, italic, inline code, blockquotes, bullet lists, checkboxes, dividers, code blocks, and links all render in place. Click a line and it reveals its raw markdown for editing; click away and it re-renders. Only the line you're on shows its syntax, the editor is built on CodeMirror 6, the same engine Obsidian uses.
- Interactive checkboxes: tick a
- [ ]item and it checks off with a strikethrough. Lists auto-continue when you press Enter. - A real editor underneath: full undo/redo history, cross-line text selection, proper IME input, and the standard macOS editing keys.
- Proper code blocks: fenced blocks are syntax-highlighted in 30+ languages (js/ts, python, swift, go, rust, sql, yaml, c/c++, java, kotlin, ruby, shell, …), show a small language badge, and auto-indent as you type: Enter after
{ordef f():indents the new line, and closers like}snap back out. Forgot to tag the fence? The language is auto-detected from the code and written onto the fence for you (tag a block```textto opt out). Double-click the empty space below to get out of a trailing code block and onto a fresh line. - Formatting toolbar: hover over a note to reveal a compact toolbar (heading, bold, italic, code, checkbox, bullet, quote, divider, link) so you never have to type the syntax yourself. Buttons are selection-aware and toggle cleanly.
- True sticky windows: borderless desktop notes that follow you across Spaces and layer politely with your other windows (no always-on-top nagging). Drag by the title bar, resize from the edges, collapse to just the bar.
- Pin a note: click the 📌 in the title bar and that one note stays above your other windows: perfect for a checklist you're working through. Click again to unpin. Pinned state survives relaunch.
- Six colors, easy on the eyes: the "Linen" palette: soft paper pastels (cream, mist, sage, blush, lavender, stone) instead of the loud classic sticky colors. Gentle enough to live on your desktop all day.
- Menu bar + Dock: a menu bar item for quick access, a regular Dock icon and main menu (File → New Note ⌘N, Show All Notes). Clicking the Dock icon brings every note forward.
- Automatic persistence: every note saves as you type (debounced) and restores its content, color, position, and size on relaunch.
- Safe closing + Markdown export: closing a note asks whether to save it as a
.mdfile first, delete it, or cancel (just like Stickies, but exporting real markdown). File → Export Note as Markdown… (⌘E) exports the focused note any time, and Export All Notes… (⇧⌘E) writes every note into a folder of your choice. - Your data is plain text: alongside its internal store, every note is mirrored as a plain
.mdfile in~/Library/Application Support/Jotdown/markdown/, so your notes are always readable by anything, forever.
Requirements: macOS 13+, Swift 5.9+ (the Xcode Command Line Tools are enough, no Xcode needed).
git clone <this-repo>
cd Jotdown
make install # builds, packages Jotdown.app, installs to /Applications, launchesOther targets: make bundle (build the .app without installing), make run, make clean.
The editor's JavaScript bundle (Sources/Resources/editor.js, built from editor/) is committed, so swift build alone is enough. Rebuilding it requires Node:
cd editor && npm install && npm run buildTo launch it at login, add Jotdown to System Settings → General → Login Items.
| Action | How |
|---|---|
| New note | Menu bar icon → New Note |
| Edit a line | Click it (reveals raw markdown) |
| Finish editing | Click below the text or press Escape |
| Undo / redo | ⌘Z / ⇧⌘Z |
| Format without typing syntax | Hover the note → toolbar |
| Change color | Hover the title bar → color dots |
| Collapse to title bar | Yellow dot |
| Pin a note above other windows | 📌 in the title bar (toggles) |
| Close note (prompts to save / delete / cancel) | Red dot |
| Export note as .md | File → Export Note as Markdown… (⌘E) |
| Export every note | File → Export All Notes… (⇧⌘E) |
| Move note | Drag the title bar |
| Resize | Drag window edges |
# H1 / ## H2 / ### H3
**bold** *italic* `code`
- bullet
- [ ] task / - [x] done
> quote
--- (divider)
[title](url) and bare URLs
```js … ``` (fenced code blocks, 30+ languages highlighted, auto-indenting)
A deliberately small codebase:
- Swift / AppKit (
Sources/*.swift): menu bar app, borderless floatingNSWindowper note, JSON persistence with a markdown mirror. - The editor (
Sources/Resources/note.html+editor.js): a CodeMirror 6 markdown editor with a custom live-preview plugin, rendered in aWKWebView. The JS bundle is vendored (built offline fromeditor/, committed to the repo), so the app has no network dependency andswift buildneeds no Node. - Swift and JS talk over a
WKScriptMessageHandlerbridge: the web view reports text/color/drag events; Swift owns the windows and the disk.
See ARCHITECTURE.md for the full internals. Contributions are welcome, start with CONTRIBUTING.md and CODING_STANDARDS.md.
~/Library/Application Support/Jotdown/
├── notes/ # one JSON file per note (text + geometry + color)
└── markdown/ # plain .md mirror of each note's content
Delete a note in the app and both files are removed.
MIT, see LICENSE.