Feature-packed TUI note management app inspired by Obsidian
Rust
568
1,288 commits
updated Oct 18, 2026
clin is a free, open-source terminal note manager inspired by Obsidian. It packs Obsidian's core features — markdown editing and rendering, .canvas files, and a force-directed graph view — into a single Rust binary, while keeping the UI approachable.
Drop an existing Obsidian vault into clin and it works out of the box. Native image rendering is supported via ratatui-image (sixel/kitty/iTerm/halfblocks auto-detected; controlled by [features] images = true). Databases and Obsidian plugins are not supported.
Notes view — folder tree with recursive folder counts in the header, tags, markdown preview pane (built-in renderer), search, filter, sort, pin, multi-select, inline_info toggle to control metadata rendering, trash management, file management (copy, paste, delete, rename, move), customizable bottom strip with activity heatmap, goals, and widget previews; auto-refresh on external file changes; show-info popup with word/char/header metrics.
Editor view — title/body editing with optional Markdown preview, built-in find popup, soft-wrap toggle, sidebars with wikilink previews, mouse support, line numbers, undo/redo, editor context menu, external editor integration, insert-date action. See EDITOR.md.
Graph view — fully integrated force-directed graph visualization of your note corpus. Edges from [[wikilinks]]. Physics simulation, minimap, legend, search, configurable colors and layout. See GRAPH_VIEW.md.
Canvas view — Obsidian-compatible .canvas file format. Place text/file/link/group/image nodes on an infinite 2D canvas, connect them with edges. Right-click context menu, mouse-drag panning, zoom-to-cursor, drag, resize, zoom. See CANVAS.md.
Draw view — freehand drawing canvas with shapes (rect, ellipse, diamond, line, arrow), text, draw smoothing (binomial filter), mouse-drag panning, zoom-to-cursor, and eraser tool. .draw file format. See DRAW.md.
Outline view — view to see the content of a .md file as a tree with headers being the parents and content being the children.
Help view — tabbed in-app reference with auto-generated keybind index, per-view descriptions, popup accordion, and preset-aware tips. See HELP.md.
Subnotes — virtual notes attached to physical notes (encrypted only under encrypted parents), with a browsable grid tab, virtual tree folder, radial graph, and manager popup. See SUBNOTES.md.
Image rendering — native pixel image rendering via ratatui-image (sixel/kitty/iTerm) in canvas, notes preview, and editor preview. See IMAGE_RENDERING.md.
Git backup — backup system using git as backend, initialize a repository and backup your notes automatically.
Command palette (Ctrl+P) — extensible action system with encrypt/decrypt, theme switcher, OCR paste, canvas/draw creation, graph view. See COMMAND_PALETTE.md.
Theme system — 19 built-in themes (default, TokyoNight, CatppuccinMocha, OneDark, Gruvbox, Dracula, Nord, RosePine, Everforest, Kanagawa, Solarized, Catppuccin Frappé, Catppuccin Macchiato, Rose Pine Moon, Gruvbox Material, GitHub Dark, Ayu Mirage, Synthwave '84, Material), transparent/solid backgrounds, per-color overrides. See THEME_SYSTEM.md.
Custom themes — drop-in TOML themes in the active configuration directory’s themes/ subdirectory, no recompile needed. See THEME_SYSTEM.md.
Status line customization — fully configurable status headers and footers per view layout via the [statusline] configuration section. See CONFIG_REFERENCE.md.
Encryption — on-demand ChaCha20-Poly1305 AEAD per-note encryption. .clin files with plaintext frontmatter for fast summary loading. See ENCRYPTION.md.
Obsidian .canvas import — existing Obsidian canvas files are read and rendered, with image files displayed through terminal graphics or fallback placeholders. See compatibility limits.
Templates — TOML-based note templates with variable substitution ({date}, {time}, {weekday}, etc.). See TEMPLATES.md.
Goals system — daily word-count and note-count goals with in-app progress bars. Configurable via [goals] config section and command palette.
Import & conversion — import File/CSV/JSON/URL/Clipboard content as a new note or append to the current note. PDF, DOCX, HTML converted via external tools.
These are highly recommended for the best experience:
Jetbrains Mono Nerd Font is highly recommended, see nerd fonts.kitty, ghostty, alacritty, foot etc. preferably a terminal with image protocol support. Note that some shortcuts might conflict with a specific terminals shortcuts in that case you can either customize the shortcuts of the clin or your terminal to avoid conflicts.These tools are optional — clin works without them:
| Tool | Purpose | Package |
|---|---|---|
tesseract | OCR paste (clipboard image → text) | tesseract-ocr |
wl-clipboard | Clipboard access (Wayland) | wl-clipboard |
xclip or xsel | Clipboard access (X11) | xclip |
markitdown or pandoc | Convert PDF/DOCX/HTML and other imported files to Markdown | pip install markitdown / pandoc |
curl | URL imports | curl |
| Platform | Method | Command |
|---|---|---|
| Any (from source) | Cargo build | cargo build --release |
| Any | Cargo install | cargo install clin-rs |
| Debian/Ubuntu (amd64) | .deb | sudo dpkg -i clin-rs_*_amd64.deb |
| Debian/Ubuntu (arm64) | .deb | sudo dpkg -i clin-rs_*_arm64.deb |
| Fedora/RHEL (x86_64) | .rpm | sudo rpm -i clin-rs-*.x86_64.rpm |
| Fedora/RHEL (aarch64) | .rpm | sudo rpm -i clin-rs-*.aarch64.rpm |
| Arch (local) | PKGBUILD | makepkg -si |
| Arch | AUR | yay -S clin-rs-bin |
| Nix | Flakes | nix run github:reekta92/clin-rs |
| Linux (portable x86_64) | AppImage | ./clin-*-x86_64.AppImage |
| Linux (tar.gz x86_64) | binary | see details |
| Linux (tar.gz aarch64) | binary | see details |
| Windows | .zip | Expand-Archive … |
| macOS (Apple Silicon) | .dmg/.tar.gz | see details |
git clone https://github.com/reekta92/clin-rs.git
cd clin-rs
cargo build --release
cargo install clin-rs
Download the latest .deb from the Releases page.
sudo dpkg -i clin-rs_*_amd64.deb
Download the latest .deb from the Releases page.
sudo dpkg -i clin-rs_*_arm64.deb
Download the latest .rpm from the Releases page.
sudo rpm -i clin-rs-*.x86_64.rpm
Download the latest .rpm from the Releases page.
sudo rpm -i clin-rs-*.aarch64.rpm
A PKGBUILD is included in the root of the repository.
git clone https://github.com/reekta92/clin-rs.git
cd clin-rs
makepkg -si
yay -S clin-rs-bin
Note: Requires nix-command and flakes experimental features enabled.
Run directly:
nix run github:reekta92/clin-rs --extra-experimental-features "nix-command flakes"
Install to profile:
nix profile install github:reekta92/clin-rs
Add to your flake inputs:
{
inputs.clin.url = "github:reekta92/clin-rs";
}
Then include inputs.clin.packages.${system}.default in your environment.systemPackages or home.packages.
Download the latest .AppImage from the Releases page.
chmod +x clin-*-x86_64.AppImage
./clin-*-x86_64.AppImage
Download the latest .tar.gz from the Releases page.
tar -xzf clin-rs-x86_64-unknown-linux-gnu.tar.gz
chmod +x clin
mkdir -p ~/.local/bin
mv clin ~/.local/bin/
Download the latest .tar.gz from the Releases page.
tar -xzf clin-rs-aarch64-unknown-linux-gnu.tar.gz
chmod +x clin
mkdir -p ~/.local/bin
mv clin ~/.local/bin/
Download the latest .zip from the Releases page.
Expand-Archive -Path clin-rs-x86_64-pc-windows-msvc.zip -DestinationPath clin
cd clin
.\clin.exe
Windows builds are provided but TUI glyph rendering depends on your terminal. Windows Terminal is recommended for the best experience.
Download the latest .dmg (or .tar.gz) from the Releases page.
# Using .dmg
hdiutil attach clin-rs-aarch64-apple-darwin.dmg
cp -r /Volumes/clin/clin.app /Applications/
hdiutil detach /Volumes/clin
# Or using .tar.gz
tar -xzf clin-rs-aarch64-apple-darwin.tar.gz
chmod +x clin
mkdir -p ~/.local/bin
mv clin ~/.local/bin/
Apple Silicon only (no Intel build ships).
Rust not installed? Run
curl https://sh.rustup.rs -sSf | shto install Rust.
# Launch the interactive TUI
clin
# Create a quick note
clin notes quick "Meeting notes from today" "standup-2026-06-13"
# Initialize templates, then create a note using its display name
clin templates init
clin notes new --template "Meeting Notes" "Weekly Standup"
# Open a specific note
clin notes open "my-note"
Once inside the TUI (default preset): navigate with j/k, open notes with Enter, open the command palette with : or Ctrl+P, and view the graph with Ctrl+G. Press ? or F1 for help, F2 for quick keybinds, F3 for messages, and F4 to switch vaults. In Editor, Ctrl+P toggles Markdown preview instead of opening the palette.
CLI templates currently insert the literal body without variable substitution or the template title; use the TUI template picker for rendered variables. See Templates.
| View | Purpose | Key Actions |
|---|---|---|
| List / Notes | Browse, search, filter, manage notes | Grid/Tree layout, format chooser, folders, tags, sort, pin, markdown preview, search, trash, copy/move/delete; Subnotes grid + radial graph |
| Editor | Write and edit notes | Title + body, undo/redo, mouse support, line numbers, markdown preview pane, external editor |
| Graph | Visualize note connections | Force-directed layout, [[wikilinks]] edges, physics, preview pane, minimap, legend, search, grid, configurable colors |
| Backup | Git-based vault versioning | Status (staged/unstaged), commit history, diff preview, auto-push, remote sync |
| Canvas | Obsidian-compatible node/edge canvas | Text/file/link/group nodes, edges, drag/resize, context menu, raw JSON editor |
| Draw | Freehand drawing and shapes | Stroke, rect/ellipse/diamond/line/arrow, text, eraser, pan/zoom |
| Outline | Note outline and navigation | Header-based tree parsing, collapsible sections, jump-to-section |
| Setup Wizard | First-run onboarding / reopenable via palette | Theme/background/hint-bar/icon-mode/keybind-preset cycling with live markdown preview |
| Help | In-app keybind + feature reference | Up to eight tabs (Notes/Editor/Graph/Draw/Canvas/Backup/Templates/About), filtered by enabled features; search, popup accordion, preset-aware tips |
| Feature | Description |
|---|---|
| Command Palette (Ctrl+P) | Extensible action system: encrypt, decrypt, theme switch, OCR paste, create canvas/draw, open graph |
| Encryption | Per-note ChaCha20-Poly1305, .clin files, on-demand encrypt/decrypt; local plaintext key, visible unauthenticated frontmatter |
| Templates | TOML-based with {date}, {time}, {weekday} variables |
| Themes | 19 built-in themes, transparent/solid backgrounds, per-color overrides, Nerd Font/Unicode/None icon modes, 13 hint-bar styles |
| Goals | Daily word-count and note-count goals with in-app progress bars, configurable via [goals] |
| Import | File/CSV/JSON/URL/Clipboard → new note or append to current; PDF/DOCX/HTML via external converters |
| Keybinds | Fully customizable through active-preset keybind files, with Helix/Vim/Emacs presets |
| OCR | Clipboard image to text via tesseract (optional dependency) |
Run clin config show to print the active configuration file path. Active-preset keybinds live at <config-dir>/keybinds/<preset>.toml.
See the full configuration reference for all available options and keybind presets for editor-style presets.
[features]
images = true
calendar = true
backup = false
[core]
storage_path = "/path/to/your/vault"
mouse_enabled = true
confirm_on_delete = true
confirm_on_quit = false
[ui]
theme = "tokyo_night"
background = "transparent"
show_status_bar = true
icon_mode = "nerd"
hint_bar_style = "classic"
# accent = "#ff6600"
[list]
preview_enabled = true
preview_position = "right"
preview_encryption = false
show_file_size = false
date_format = "%Y-%m-%d"
density = "comfortable"
default_view = "grid"
# default_sort_field = "title"
# default_sort_order = "ascending"
pinned_on_top = false
[editor]
external_command = "nvim"
external_enabled = false
preview_enabled = false
show_line_numbers = true
See THEME_SYSTEM.md for theme options and CONFIG_REFERENCE.md for all options and sections.
See the full keybinds reference for all available actions and defaults.
[list]
move_up = ["Up", "k"]
move_down = ["Down", "j"]
open = ["Enter"]
delete = ["d", "Delete"]
quit = ["q"]
help = ["?", "F1"]
open_command_palette = [":", "Ctrl+p"]
# ... see CONFIG_REFERENCE.md for full list
[edit]
back = ["Esc"]
cycle_focus = ["Ctrl+t"]
copy = ["Ctrl+c"]
# ... see CONFIG_REFERENCE.md
[graph]
quit = ["Esc"]
pan_up = ["Up", "k"]
# ... see CONFIG_REFERENCE.md
clin Launch interactive TUI (default)
clin notes list List note titles
clin notes new [OPTIONS] [TITLE] Create a note (supports --body, --no-tui)
clin notes open <TITLE> Open a note by title
clin notes cat <TITLE> Print a note's body to stdout
clin notes quick <CONTENT> [TITLE] Quick note, then exit
clin notes search <QUERY> Search notes by title and content
clin storage show Show storage path
clin storage set <PATH> Set a custom (absolute) storage path
clin storage reset Reset to default storage path
clin storage migrate Migrate data from a previous location
clin keybinds show Show keybindings
clin keybinds export Export keybinds as TOML
clin keybinds reset Reset keybinds to defaults
clin cache reset Delete current vault's note-summary cache
clin templates list List templates
clin templates init Create example templates
clin config show Print the config file path
clin config edit Open config in $VISUAL or $EDITOR
clin config reset Reset config to default values
clin --setup Force first-run setup wizard
clin --version Print version
clin --config <PATH> Override config file (global)
clin --vault <VAULT> Override the storage/vault path (global)
clin --help Show help
Browse the GitHub Wiki for all project documentation, with page navigation and search. The wiki automatically syncs from main; source files live in docs/ and the repository root.
Architecture — system overview, event loop, threading model
List View — notes list view: Grid/Tree layout, format chooser, preview pane
Configuration Reference — all config.toml and preset keybind-file options
Keybind Presets — Helix, Vim, and Emacs presets and sequence syntax
Graph View — force-directed graph visualization
Canvas — Obsidian-compatible canvas view
Backup — Git-based backup dashboard: vault state, history, diff preview, automation
Draw — freehand drawing canvas
Outline — nested outline navigation
Editor — title/body editing, find, soft-wrap, sidebars, wikilink previews
Encryption — ChaCha20-Poly1305 per-note encryption
Help — 3-pane help view: tabs, keybind index, tips, popup accordion
Image Rendering — ratatui-image pixel rendering, protocols, [image] config
Theme System — built-in themes and customization
Setup — first-run setup wizard
Command Palette — extensible action system
Subnotes — attached notes, parent-dependent encryption, grid tab, radial graph, manager popup
Templates — TOML-based note templates
See ROADMAP.md for planned features and progress.
Full detail in docs/ARCHITECTURE.md.
Contributions are welcome! See CONTRIBUTING.md for guidelines.
clin is free and open-source. If it's useful to you, consider supporting its development on Patreon:
Licensed under the GNU General Public License v3.0.
Built with Ratatui, Crossterm, upstream graf (fdg-sim physics), and pinstar. Markdown preview via built-in comrak/syntect renderer.
5,493 followers · starred Jul 2026
1,745 followers · starred Jun 2026
324 followers · starred Jun 2026
277 followers · starred Jun 2026
Feature-packed TUI note management app inspired by Obsidian
Rust
568
1,288 commits
updated Oct 18, 2026
clin is a free, open-source terminal note manager inspired by Obsidian. It packs Obsidian's core features — markdown editing and rendering, .canvas files, and a force-directed graph view — into a single Rust binary, while keeping the UI approachable.
Drop an existing Obsidian vault into clin and it works out of the box. Native image rendering is supported via ratatui-image (sixel/kitty/iTerm/halfblocks auto-detected; controlled by [features] images = true). Databases and Obsidian plugins are not supported.
Notes view — folder tree with recursive folder counts in the header, tags, markdown preview pane (built-in renderer), search, filter, sort, pin, multi-select, inline_info toggle to control metadata rendering, trash management, file management (copy, paste, delete, rename, move), customizable bottom strip with activity heatmap, goals, and widget previews; auto-refresh on external file changes; show-info popup with word/char/header metrics.
Editor view — title/body editing with optional Markdown preview, built-in find popup, soft-wrap toggle, sidebars with wikilink previews, mouse support, line numbers, undo/redo, editor context menu, external editor integration, insert-date action. See EDITOR.md.
Graph view — fully integrated force-directed graph visualization of your note corpus. Edges from [[wikilinks]]. Physics simulation, minimap, legend, search, configurable colors and layout. See GRAPH_VIEW.md.
Canvas view — Obsidian-compatible .canvas file format. Place text/file/link/group/image nodes on an infinite 2D canvas, connect them with edges. Right-click context menu, mouse-drag panning, zoom-to-cursor, drag, resize, zoom. See CANVAS.md.
Draw view — freehand drawing canvas with shapes (rect, ellipse, diamond, line, arrow), text, draw smoothing (binomial filter), mouse-drag panning, zoom-to-cursor, and eraser tool. .draw file format. See DRAW.md.
Outline view — view to see the content of a .md file as a tree with headers being the parents and content being the children.
Help view — tabbed in-app reference with auto-generated keybind index, per-view descriptions, popup accordion, and preset-aware tips. See HELP.md.
Subnotes — virtual notes attached to physical notes (encrypted only under encrypted parents), with a browsable grid tab, virtual tree folder, radial graph, and manager popup. See SUBNOTES.md.
Image rendering — native pixel image rendering via ratatui-image (sixel/kitty/iTerm) in canvas, notes preview, and editor preview. See IMAGE_RENDERING.md.
Git backup — backup system using git as backend, initialize a repository and backup your notes automatically.
Command palette (Ctrl+P) — extensible action system with encrypt/decrypt, theme switcher, OCR paste, canvas/draw creation, graph view. See COMMAND_PALETTE.md.
Theme system — 19 built-in themes (default, TokyoNight, CatppuccinMocha, OneDark, Gruvbox, Dracula, Nord, RosePine, Everforest, Kanagawa, Solarized, Catppuccin Frappé, Catppuccin Macchiato, Rose Pine Moon, Gruvbox Material, GitHub Dark, Ayu Mirage, Synthwave '84, Material), transparent/solid backgrounds, per-color overrides. See THEME_SYSTEM.md.
Custom themes — drop-in TOML themes in the active configuration directory’s themes/ subdirectory, no recompile needed. See THEME_SYSTEM.md.
Status line customization — fully configurable status headers and footers per view layout via the [statusline] configuration section. See CONFIG_REFERENCE.md.
Encryption — on-demand ChaCha20-Poly1305 AEAD per-note encryption. .clin files with plaintext frontmatter for fast summary loading. See ENCRYPTION.md.
Obsidian .canvas import — existing Obsidian canvas files are read and rendered, with image files displayed through terminal graphics or fallback placeholders. See compatibility limits.
Templates — TOML-based note templates with variable substitution ({date}, {time}, {weekday}, etc.). See TEMPLATES.md.
Goals system — daily word-count and note-count goals with in-app progress bars. Configurable via [goals] config section and command palette.
Import & conversion — import File/CSV/JSON/URL/Clipboard content as a new note or append to the current note. PDF, DOCX, HTML converted via external tools.
These are highly recommended for the best experience:
Jetbrains Mono Nerd Font is highly recommended, see nerd fonts.kitty, ghostty, alacritty, foot etc. preferably a terminal with image protocol support. Note that some shortcuts might conflict with a specific terminals shortcuts in that case you can either customize the shortcuts of the clin or your terminal to avoid conflicts.These tools are optional — clin works without them:
| Tool | Purpose | Package |
|---|---|---|
tesseract | OCR paste (clipboard image → text) | tesseract-ocr |
wl-clipboard | Clipboard access (Wayland) | wl-clipboard |
xclip or xsel | Clipboard access (X11) | xclip |
markitdown or pandoc | Convert PDF/DOCX/HTML and other imported files to Markdown | pip install markitdown / pandoc |
curl | URL imports | curl |
| Platform | Method | Command |
|---|---|---|
| Any (from source) | Cargo build | cargo build --release |
| Any | Cargo install | cargo install clin-rs |
| Debian/Ubuntu (amd64) | .deb | sudo dpkg -i clin-rs_*_amd64.deb |
| Debian/Ubuntu (arm64) | .deb | sudo dpkg -i clin-rs_*_arm64.deb |
| Fedora/RHEL (x86_64) | .rpm | sudo rpm -i clin-rs-*.x86_64.rpm |
| Fedora/RHEL (aarch64) | .rpm | sudo rpm -i clin-rs-*.aarch64.rpm |
| Arch (local) | PKGBUILD | makepkg -si |
| Arch | AUR | yay -S clin-rs-bin |
| Nix | Flakes | nix run github:reekta92/clin-rs |
| Linux (portable x86_64) | AppImage | ./clin-*-x86_64.AppImage |
| Linux (tar.gz x86_64) | binary | see details |
| Linux (tar.gz aarch64) | binary | see details |
| Windows | .zip | Expand-Archive … |
| macOS (Apple Silicon) | .dmg/.tar.gz | see details |
git clone https://github.com/reekta92/clin-rs.git
cd clin-rs
cargo build --release
cargo install clin-rs
Download the latest .deb from the Releases page.
sudo dpkg -i clin-rs_*_amd64.deb
Download the latest .deb from the Releases page.
sudo dpkg -i clin-rs_*_arm64.deb
Download the latest .rpm from the Releases page.
sudo rpm -i clin-rs-*.x86_64.rpm
Download the latest .rpm from the Releases page.
sudo rpm -i clin-rs-*.aarch64.rpm
A PKGBUILD is included in the root of the repository.
git clone https://github.com/reekta92/clin-rs.git
cd clin-rs
makepkg -si
yay -S clin-rs-bin
Note: Requires nix-command and flakes experimental features enabled.
Run directly:
nix run github:reekta92/clin-rs --extra-experimental-features "nix-command flakes"
Install to profile:
nix profile install github:reekta92/clin-rs
Add to your flake inputs:
{
inputs.clin.url = "github:reekta92/clin-rs";
}
Then include inputs.clin.packages.${system}.default in your environment.systemPackages or home.packages.
Download the latest .AppImage from the Releases page.
chmod +x clin-*-x86_64.AppImage
./clin-*-x86_64.AppImage
Download the latest .tar.gz from the Releases page.
tar -xzf clin-rs-x86_64-unknown-linux-gnu.tar.gz
chmod +x clin
mkdir -p ~/.local/bin
mv clin ~/.local/bin/
Download the latest .tar.gz from the Releases page.
tar -xzf clin-rs-aarch64-unknown-linux-gnu.tar.gz
chmod +x clin
mkdir -p ~/.local/bin
mv clin ~/.local/bin/
Download the latest .zip from the Releases page.
Expand-Archive -Path clin-rs-x86_64-pc-windows-msvc.zip -DestinationPath clin
cd clin
.\clin.exe
Windows builds are provided but TUI glyph rendering depends on your terminal. Windows Terminal is recommended for the best experience.
Download the latest .dmg (or .tar.gz) from the Releases page.
# Using .dmg
hdiutil attach clin-rs-aarch64-apple-darwin.dmg
cp -r /Volumes/clin/clin.app /Applications/
hdiutil detach /Volumes/clin
# Or using .tar.gz
tar -xzf clin-rs-aarch64-apple-darwin.tar.gz
chmod +x clin
mkdir -p ~/.local/bin
mv clin ~/.local/bin/
Apple Silicon only (no Intel build ships).
Rust not installed? Run
curl https://sh.rustup.rs -sSf | shto install Rust.
# Launch the interactive TUI
clin
# Create a quick note
clin notes quick "Meeting notes from today" "standup-2026-06-13"
# Initialize templates, then create a note using its display name
clin templates init
clin notes new --template "Meeting Notes" "Weekly Standup"
# Open a specific note
clin notes open "my-note"
Once inside the TUI (default preset): navigate with j/k, open notes with Enter, open the command palette with : or Ctrl+P, and view the graph with Ctrl+G. Press ? or F1 for help, F2 for quick keybinds, F3 for messages, and F4 to switch vaults. In Editor, Ctrl+P toggles Markdown preview instead of opening the palette.
CLI templates currently insert the literal body without variable substitution or the template title; use the TUI template picker for rendered variables. See Templates.
| View | Purpose | Key Actions |
|---|---|---|
| List / Notes | Browse, search, filter, manage notes | Grid/Tree layout, format chooser, folders, tags, sort, pin, markdown preview, search, trash, copy/move/delete; Subnotes grid + radial graph |
| Editor | Write and edit notes | Title + body, undo/redo, mouse support, line numbers, markdown preview pane, external editor |
| Graph | Visualize note connections | Force-directed layout, [[wikilinks]] edges, physics, preview pane, minimap, legend, search, grid, configurable colors |
| Backup | Git-based vault versioning | Status (staged/unstaged), commit history, diff preview, auto-push, remote sync |
| Canvas | Obsidian-compatible node/edge canvas | Text/file/link/group nodes, edges, drag/resize, context menu, raw JSON editor |
| Draw | Freehand drawing and shapes | Stroke, rect/ellipse/diamond/line/arrow, text, eraser, pan/zoom |
| Outline | Note outline and navigation | Header-based tree parsing, collapsible sections, jump-to-section |
| Setup Wizard | First-run onboarding / reopenable via palette | Theme/background/hint-bar/icon-mode/keybind-preset cycling with live markdown preview |
| Help | In-app keybind + feature reference | Up to eight tabs (Notes/Editor/Graph/Draw/Canvas/Backup/Templates/About), filtered by enabled features; search, popup accordion, preset-aware tips |
| Feature | Description |
|---|---|
| Command Palette (Ctrl+P) | Extensible action system: encrypt, decrypt, theme switch, OCR paste, create canvas/draw, open graph |
| Encryption | Per-note ChaCha20-Poly1305, .clin files, on-demand encrypt/decrypt; local plaintext key, visible unauthenticated frontmatter |
| Templates | TOML-based with {date}, {time}, {weekday} variables |
| Themes | 19 built-in themes, transparent/solid backgrounds, per-color overrides, Nerd Font/Unicode/None icon modes, 13 hint-bar styles |
| Goals | Daily word-count and note-count goals with in-app progress bars, configurable via [goals] |
| Import | File/CSV/JSON/URL/Clipboard → new note or append to current; PDF/DOCX/HTML via external converters |
| Keybinds | Fully customizable through active-preset keybind files, with Helix/Vim/Emacs presets |
| OCR | Clipboard image to text via tesseract (optional dependency) |
Run clin config show to print the active configuration file path. Active-preset keybinds live at <config-dir>/keybinds/<preset>.toml.
See the full configuration reference for all available options and keybind presets for editor-style presets.
[features]
images = true
calendar = true
backup = false
[core]
storage_path = "/path/to/your/vault"
mouse_enabled = true
confirm_on_delete = true
confirm_on_quit = false
[ui]
theme = "tokyo_night"
background = "transparent"
show_status_bar = true
icon_mode = "nerd"
hint_bar_style = "classic"
# accent = "#ff6600"
[list]
preview_enabled = true
preview_position = "right"
preview_encryption = false
show_file_size = false
date_format = "%Y-%m-%d"
density = "comfortable"
default_view = "grid"
# default_sort_field = "title"
# default_sort_order = "ascending"
pinned_on_top = false
[editor]
external_command = "nvim"
external_enabled = false
preview_enabled = false
show_line_numbers = true
See THEME_SYSTEM.md for theme options and CONFIG_REFERENCE.md for all options and sections.
See the full keybinds reference for all available actions and defaults.
[list]
move_up = ["Up", "k"]
move_down = ["Down", "j"]
open = ["Enter"]
delete = ["d", "Delete"]
quit = ["q"]
help = ["?", "F1"]
open_command_palette = [":", "Ctrl+p"]
# ... see CONFIG_REFERENCE.md for full list
[edit]
back = ["Esc"]
cycle_focus = ["Ctrl+t"]
copy = ["Ctrl+c"]
# ... see CONFIG_REFERENCE.md
[graph]
quit = ["Esc"]
pan_up = ["Up", "k"]
# ... see CONFIG_REFERENCE.md
clin Launch interactive TUI (default)
clin notes list List note titles
clin notes new [OPTIONS] [TITLE] Create a note (supports --body, --no-tui)
clin notes open <TITLE> Open a note by title
clin notes cat <TITLE> Print a note's body to stdout
clin notes quick <CONTENT> [TITLE] Quick note, then exit
clin notes search <QUERY> Search notes by title and content
clin storage show Show storage path
clin storage set <PATH> Set a custom (absolute) storage path
clin storage reset Reset to default storage path
clin storage migrate Migrate data from a previous location
clin keybinds show Show keybindings
clin keybinds export Export keybinds as TOML
clin keybinds reset Reset keybinds to defaults
clin cache reset Delete current vault's note-summary cache
clin templates list List templates
clin templates init Create example templates
clin config show Print the config file path
clin config edit Open config in $VISUAL or $EDITOR
clin config reset Reset config to default values
clin --setup Force first-run setup wizard
clin --version Print version
clin --config <PATH> Override config file (global)
clin --vault <VAULT> Override the storage/vault path (global)
clin --help Show help
Browse the GitHub Wiki for all project documentation, with page navigation and search. The wiki automatically syncs from main; source files live in docs/ and the repository root.
Architecture — system overview, event loop, threading model
List View — notes list view: Grid/Tree layout, format chooser, preview pane
Configuration Reference — all config.toml and preset keybind-file options
Keybind Presets — Helix, Vim, and Emacs presets and sequence syntax
Graph View — force-directed graph visualization
Canvas — Obsidian-compatible canvas view
Backup — Git-based backup dashboard: vault state, history, diff preview, automation
Draw — freehand drawing canvas
Outline — nested outline navigation
Editor — title/body editing, find, soft-wrap, sidebars, wikilink previews
Encryption — ChaCha20-Poly1305 per-note encryption
Help — 3-pane help view: tabs, keybind index, tips, popup accordion
Image Rendering — ratatui-image pixel rendering, protocols, [image] config
Theme System — built-in themes and customization
Setup — first-run setup wizard
Command Palette — extensible action system
Subnotes — attached notes, parent-dependent encryption, grid tab, radial graph, manager popup
Templates — TOML-based note templates
See ROADMAP.md for planned features and progress.
Full detail in docs/ARCHITECTURE.md.
Contributions are welcome! See CONTRIBUTING.md for guidelines.
clin is free and open-source. If it's useful to you, consider supporting its development on Patreon:
Licensed under the GNU General Public License v3.0.
Built with Ratatui, Crossterm, upstream graf (fdg-sim physics), and pinstar. Markdown preview via built-in comrak/syntect renderer.
5,493 followers · starred Jul 2026
1,745 followers · starred Jun 2026
324 followers · starred Jun 2026
277 followers · starred Jun 2026