Chestnut
A tiny always-on-top companion for your Obsidian vaults. It keeps you company while you write, hops between vaults, delivers notes, and swallows quick captures. Native Swift, ~1.2MB download, tiny on your disk, not just your screen.
⏎ open ⌘⏎ today's note ⌥⏎ reveal ⌘P pin
drag onto Chestnut
interactive re-creations, not screenshots ⌃⌥V Vault Hopper ⌃⌥Space Quick Capture ⌃⌥C Paste to plugin ⌃⌥O Notice action ⌃⌥M Right-click menu These work on this page too
macOS 14+ · free & open source · first-launch steps · user guide
Features
Three tricks it knows
Vault Hopper
One palette, every vault. ⌃⌥V from anywhere, type to filter, ⏎ to hop. Pin a home vault and it's always first; ⌘⏎ jumps straight to today's note.
Note Courier
Drop a note onto Chestnut to move or copy it into another vault.
Attachments travel with it, name conflicts get Obsidian-style suffixes,
nothing is ever overwritten, and every delivery is journaled for undo.
A single non-markdown file or folder that a plugin matches opens a
picker, with the courier always on it. .md drops, and
drops of several items at once, go straight to the courier.
Quick Capture
⌃⌥Space, jot, ⌘⏎ and your capture is appended to today's note in the vault you choose. Markdown toolbar, drafts that survive dismissing the panel, and a satisfied gulp when the thought lands.
Plugins
Teach it new tricks
Plugins are shell scripts that turn clipboard content, dropped files, and URLs into vault notes. Drop a bookmark, paste a code snippet, feed it a PDF. If there's a plugin for it, Chestnut knows what to do.
How it works
A plugin is a folder in
~/.config/chestnut/plugins/<name>/ containing a
manifest.json and a script. The manifest declares what
the plugin accepts (text, url,
image, file, folder) and how
output is handled (capture, save,
clipboard, notify). Input arrives via
environment variables and stdin; output goes to stdout.
Press ⌃⌥C
and Chestnut classifies the clipboard, then runs the matching plugin.
Drop a single non-markdown file and it asks instead: the picker lists
every matching plugin plus Deliver to a vault,
because a plugin never takes a file away from the courier. Markdown
files always go to the courier. Plugins can also narrow to specific
file extensions (e.g. only .csv or .txt).
Manifests are hot-reloaded: edit one in
~/.config/chestnut/plugins/ and Chestnut picks up the
change live. Enable or disable individual plugins from the
right-click menu.
Minimal example
{
"api": 1,
"name": "Bookmark",
"description": "Save a URL as a markdown note",
"script": "./save-bookmark.sh",
"accepts": ["url"],
"output": "save"
}
#!/bin/bash
echo "# $CHESTNUT_TITLE"
echo ""
echo "[$CHESTNUT_URL]($CHESTNUT_URL)"
echo ""
echo "Saved on $(date +%Y-%m-%d)."
Output modes:
capture pre-fills the capture panel (with optional attachments),
save writes directly to the vault,
clipboard copies the result, and
notify shows it in a speech bubble. Scripts can also
return a JSON envelope with file attachments for full control.
Full plugin reference, environment variables, and more examples in the User Guide.
Customize
Hotkeys, sprite color themes, and capture defaults are configurable in
~/Library/Application Support/Chestnut/config.json,
which the right-click menu opens for you. That file is yours; Chestnut
keeps its own settings separately, so your edits are never
overwritten. Details in the
User Guide.
Privacy
Nothing leaves your Mac
No network, no telemetry
There is no networking code at all. Even “Check for Updates” just opens your browser.
Never touches Obsidian's files
Vault discovery is read-only observation. Chestnut never writes to
.obsidian/ or any Obsidian setting.
Writes only when you act
A capture append, a courier delivery: explicit actions, journaled for undo, never overwriting.
Works with Obsidian closed
The obsidian CLI is an optional enhancement, never a
requirement.
Get started
Install
- Download the DMG and drag Chestnut to Applications.
-
Chestnut is free and unsigned (not notarized), so the first launch needs one extra step:
macOS 15 Sequoia and later: open the app once (macOS will decline), then System Settings → Privacy & Security → Open Anyway.
macOS 14 Sonoma: right-click the app → Open → Open.
Or, from Terminal:
xattr -dr com.apple.quarantine /Applications/Chestnut.app - Chestnut appears in the corner of your screen. Right-click it for everything: vaults, themes, plugins, capture, launch at login. Five global hotkeys let you reach it from any app, including the menu itself (see the hotkey reference).
Or install with Homebrew:
brew trust --cask gapmiss/tap/chestnut # required for third-party taps
brew install --cask gapmiss/tap/chestnut
Rather build it yourself? git clone the
source and run
make run. A Swift toolchain is all it takes, no Xcode project.