clin
A TUI reimagination of Obsidian — feature-packed note management in your terminal.
clinwas originally an app I made when I got into C. It was really rough and basic, so I decided to remake it in Rust with more features and an improved user experience to better fit your workflow!
About
clin is a FOSS, minimal(around 2-5~ megabytes of binary) and TUI alternative for the note management app Obsidian. It mainly provides the biggest features of Obsidian(markdown editing and rendering, .canvas files, graph view etc.) in a extremely compact package and really minimal resource usage, written in Rust at a TUI environment. It's goal to provide you a feature-packed note management app right at your terminal while keeping the UI/UX easy and accessible. It's 90% compatible with Obsidian you can literally copy-paste your Obsidian vault to the clin vault and it just works without a problem, unsupported stuff are image rendering, databases, Obsidian plugins and some small features here and there.
Screenshots
Highlights
- Notes view — folder tree, tags, markdown preview pane (via
glow), search, filter, sort, pin, multi-select, trash management, file management (copy, paste, delete, rename, move). - Editor view — built-in text editor with mouse support, line numbers, undo/redo, and external editor integration (VISUAL/EDITOR env or config). Markdown preview pane alongside editor.
- 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
.canvasfile format. Place text/file/link/group nodes on an infinite 2D canvas, connect them with edges. Right-click context menu, drag, resize, zoom. See CANVAS.md. - Draw view — freehand drawing canvas with shapes (rect, ellipse, diamond, line, arrow), text, and eraser tool.
.drawfile format. See DRAW.md. - Content tree view — view to see the content of a
.mdfile as a tree with headers being the parents and content being the children. - Git backup — backup system using
gitas 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 — 11 built-in themes (TokyoNight, CatppuccinMocha, OneDark, Gruvbox, Dracula, Nord, RosePine, Everforest, Kanagawa, Solarized), transparent/solid backgrounds, per-color overrides. See THEME_SYSTEM.md.
- Encryption — on-demand ChaCha20-Poly1305 AEAD per-note encryption.
.clinfiles with plaintext frontmatter for fast summary loading. See ENCRYPTION.md. - Obsidian .canvas import — existing Obsidian canvas files are read and rendered, except for images.
- Templates — TOML-based note templates with variable substitution (
{date},{time},{weekday}, etc.). See TEMPLATES.md.
Dependencies
These are highly recommended for the best experience:
- A nerd font — required for rendering glyphs which are highly used around the UI.
- A modern terminal — such as
kitty,ghosttyetc.
Optional Tools
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 |
glow |
Markdown preview rendering | glow |
Installation
From Source
With Cargo
Debian/Ubuntu (.deb)
Download the latest .deb from the Releases page.
Fedora/RHEL (.rpm)
Download the latest .rpm from the Releases page.
Arch Linux (PKGBUILD)
A PKGBUILD is included in the root of the repository.
Arch Linux (AUR)
AppImage
Download the latest .AppImage from the Releases page.
Other
Download the latest .tar.gz from the Releases page.
Rust not installed? Run
curl https://sh.rustup.rs -sSf | shto install Rust.
Quick Start
# Launch the interactive TUI
# Create a quick note
# Create a note from a template
# Open a specific note
Once inside the TUI: navigate with j/k, open notes with Enter, open the command palette with Ctrl+P, and view the graph with Ctrl+G. Press ? for the full keybind reference.
Features
| View | Purpose | Key Actions |
|---|---|---|
| List / Notes | Browse, search, filter, manage notes | Folders, tags, sort, pin, glow preview, search, trash, copy/move/delete |
| 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, minimap, legend, search, grid, configurable colors |
| 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 |
| 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, zero-knowledge |
| Templates | TOML-based with {date}, {time}, {weekday} variables |
| Themes | 11 built-in themes, transparent/solid backgrounds, per-color overrides |
| Keybinds | Fully customizable via keybinds.toml |
| OCR | Clipboard image to text via tesseract (optional dependency) |
Configuration
~/.config/clin/config.toml -> main configuration file (includes theme, graf settings, etc.)
~/.config/clin/keybinds.toml -> keybind configuration file
See the full configuration reference for all available options.
config.toml example
# Custom vault storage path (default: ~/.local/share/clin)
= "/path/to/your/vault"
# External editor command (e.g. "nvim", "code", "nano")
= "nvim"
= false
# Show the preview pane by default
= true
# Show markdown preview in editor by default
= false
# Show line numbers
= true
# Confirm before deleting
= true
# Default sort
# default_sort_field = "title" # "title" or "modified"
# default_sort_order = "ascending" # "ascending" or "descending"
[]
= "tokyo_night"
= "transparent"
# accent = "#ff6600"
# background_color = "#1a1a2e"
See THEME_SYSTEM.md for theme options and CONFIG_REFERENCE.md for all graf sections.
keybinds.toml example
See the full keybinds reference for all available actions and defaults.
[]
= ["Up", "k"]
= ["Down", "j"]
= ["Enter"]
= ["d", "Delete"]
= ["q"]
= ["?", "F1"]
= ["Ctrl+p", "Shift+Enter"]
# ... see CONFIG_REFERENCE.md for full list
[]
= ["Esc"]
= ["Tab"]
= ["Ctrl+c", "Ctrl+Insert"]
# ... see CONFIG_REFERENCE.md
[]
= ["Esc"]
= ["Up", "k"]
# ... see CONFIG_REFERENCE.md
CLI Commands
NOTE OPERATIONS:
clin Launch interactive app
-n [TITLE] Create a new note and open it
-n -t, --template <NAME> [TITLE]
Create a new note from a template
-q <CONTENT> [TITLE] Create a quick note and exit
-e <TITLE> Open a specific note by title
-l List note titles
-h, --help Show this help message
CONFIGURATION:
--storage-path Show current storage path
--set-storage-path <PATH> Set custom storage path
--reset-storage-path Reset to default storage path
--migrate-storage Migrate data from previous storage location
KEYBINDS:
--keybinds Show current keybindings
--export-keybinds Export keybinds as TOML
--reset-keybinds Reset keybinds to defaults
TEMPLATES:
--list-templates List available templates
--create-example-templates Create example templates
Documentation
Full technical documentation lives in docs/:
- Architecture — system overview, event loop, threading model
- Configuration Reference — all config.toml and keybinds.toml options
- Graph View — force-directed graph visualization
- Canvas — Obsidian-compatible canvas view
- Draw — freehand drawing canvas
- Content Tree — nested outline navigation
- Encryption — ChaCha20-Poly1305 per-note encryption
- Theme System — built-in themes and customization
- Command Palette — extensible action system
- Templates — TOML-based note templates
Roadmap
See ROADMAP.md for planned features and progress.
Contributing
Contributions are welcome! See CONTRIBUTING.md for guidelines.
License
Licensed under the GNU General Public License v3.0.
Credits
Built with Ratatui, Crossterm, and fdg-sim. Markdown preview powered by glow.