noteui is a terminal note-taking application for browsing, searching, previewing, and organizing plain-text notes stored as regular files.
It is built for people who want a keyboard-driven notes workflow without giving up normal files, directories, and external editors.
Already installed noteui? Run:
noteui --demoThis launches the UI against a bundled set of sample notes copied into a throwaway temporary directory. Your real notes root is not touched, sync is disabled for the session, and the temp directory is cleaned up automatically when you quit. See Demo mode for details.
Full documentation is published at:
https://atbuy.github.io/noteui/
Recommended entry points:
- browse notes and categories in a tree view
- preview notes directly in the terminal
- search by title, path, content preview, and tags
- create, rename, move, and delete notes or categories
- keep temporary notes separate from your main notes
- create and manage todo notes, with a global open-tasks view
- promote, archive, and batch-process temporary notes
- pin important notes and categories
- automatic version history for every note, with an in-app rollback modal (
H) - optional SSH-based sync for
sync: syncednotes with tree sync markers - per-workspace
sync_remote_rootkeeps multiple workspaces isolated on the remote - encrypted note bodies, with atomic writes and history-based recovery
- customize theme, preview behavior, icons, and keybindings
- keep your notes as regular files on disk
- switch between named workspaces with isolated local UI state
Quick install examples:
Linux / macOS:
curl -fsSL https://raw.githubusercontent.com/atbuy/noteui/main/install.sh | shWindows PowerShell:
irm https://raw.githubusercontent.com/atbuy/noteui/main/install.ps1 | iexThe easiest manual install path is still the pre-built release archives:
https://github.com/atbuy/noteui/releases
Linux and macOS releases are published as .tar.gz archives. Windows releases are published as .zip archives. Each release archive includes both noteui and noteui-sync.
- Download the right release archive for your platform from the releases page.
- Extract it.
- Run
noteui. - Start writing notes in your notes directory, which defaults to
$HOME/notes.
By default, noteui:
- uses
$HOME/notesas the notes root unless a workspace profile orNOTES_ROOToverride is active - stores temporary notes under
.tmpinside the notes root - opens notes with
NOTEUI_EDITOR, thenEDITOR, thennvim - stores local UI state under
$HOME/.local/state/noteui/state.json
Sync is optional and SSH-based.
- Build or install both binaries:
noteuinoteui-sync
- Put
noteui-syncon the remote machine in a path you can call over SSH. - Pick a remote storage directory on that machine, for example
/srv/noteui. - Add a sync profile to your
config.toml:
[sync]
default_profile = "homebox"
[sync.profiles.homebox]
ssh_host = "notes-prod"
remote_root = "/srv/noteui"
remote_bin = "/usr/local/bin/noteui-sync"- Mark any note you want synced with frontmatter:
---
sync: synced
---Notes without that field, or with sync: local, stay local-only. Sync status in the tree works like this:
- hollow red
○: local-only note - green
●: synced note with a confirmed healthy remote state - orange blinking dot: a sync, import, or remote-delete action is currently in flight for that note
- filled red
●: synced note that is not currently confirmed healthy
When noteui starts, synced notes are treated as unconfirmed until the first remote check completes. That avoids showing stale green markers from old local metadata before the current remote state has been verified.
Press S on a selected local note to toggle sync: local and sync: synced. Press U on a synced local note to delete only its remote copy and keep the local file, switching it back to sync: local.
If you use multiple workspaces, add sync_remote_root to each workspace config to give it a dedicated remote directory. Without this, every workspace syncs to the same remote path and notes cross-contaminate across workspaces.
On another machine, noteui refreshes remote note metadata automatically but does not auto-download missing note bodies. Synced notes that exist on the server but not locally appear in the tree as muted x placeholder rows, show an import message in the preview, and cannot be edited until imported. Press i to import the selected remote-only note, or I to import all missing synced notes. This also works as recovery inside an existing notes root: if you delete a synced note locally, I will restore it from the server as long as the target path is free. noteui skips collisions instead of overwriting existing local files.
make build
./bin/noteuiRun the test suite with:
make test