Zot — Fast, minimal note-taking CLI
A CLI-first note-taking tool for macOS, built in Zig. No Electron, no browser tabs, no context switching — just capture ideas and get reminded, all from the terminal.
Uses macOS system SQLite for zero-dependency storage, fires native macOS notifications via osascript for reminders, and exports a C ABI shared library (libzot.dylib) for Swift app integration.
Screenshots



Features
- TUI mode — Full interactive terminal UI with keyboard-driven navigation, forms, search, and project filtering
- CLI mode — Add, list, search, update, delete, and mark notes done from the command line
- Reminders — Set due dates with recurring schedules (every hour, every day)
- macOS notifications — Native notification delivery via
osascriptwith optional launchd background scheduler - Export / Import — Full JSON export and import for backup and migration
- Swift / C ABI — Shared library (
libzot.dylib) for embedding in native macOS apps - SQLite storage — Single-file database at
~/.zot_notes.db, no external dependencies
Quick Start
zot -n "buy groceries" # add a note
zot -n "deploy v2" -p myapp -d tomorrow # with project + due date
zot -n "standup" -d "2026-05-01 09:00" --every hour # recurring reminder
zot list # see all notes
zot done 3 # mark complete
zot notify --install # enable macOS notifications
zot tui # launch interactive TUI
Due Date Formats
| Format | Example | Description |
|---|---|---|
YYYY-MM-DD |
2026-05-01 |
ISO date |
MM/DD/YYYY |
05/01/2026 |
US date |
YYYY-MM-DD HH:MM |
2026-05-01 14:00 |
Date with time (09:00–17:00) |
today |
Today’s date | |
tomorrow |
Tomorrow’s date | |
eow |
End of week (Friday) | |
eom |
End of month (last working day) |
TUI Keybindings
| Key | Action |
|---|---|
j / ↓ |
Move selection down |
k / ↑ |
Move selection up |
Space |
Toggle done / undone |
n |
Open Add New Note form |
e |
Open Edit Note form |
x |
Delete selected note |
s |
Search notes |
p |
Filter by project |
c / Esc |
Clear active filter / search |
q |
Quit |
Architecture
┌─────────────┐ ┌──────────────┐ ┌─────────────┐
│ CLI │────▶│ db.zig │────▶│ SQLite │
│ main.zig │ │ (storage) │ │ ~/.zot_ │
│ notify.zig │ └──────────────┘ │ notes.db │
└─────────────┘ ▲ └─────────────┘
│
┌─────────────┐ │
│ lib.zig │────────────┘
│ (C ABI) │
│ libzot.dylib
└─────────────┘
▲
│
┌─────────────┐
│ Swift App │
└─────────────┘
Design
- Zig over Rust/Go — Zero-overhead C interop without a runtime. The C ABI library is a natural byproduct.
- SQLite over flat files — ACID transactions, indexed queries, single-file database.
- osascript over UserNotifications — No app bundle, entitlements, or code signing required.
- launchd over cron — Native macOS process management surviving reboots.
Try It
git clone https://github.com/NaveenGurram/zot.git
cd zot
zig build -Doptimize=ReleaseSafe
sudo cp zig-out/bin/zot /usr/local/bin/