Skip to content

reekta92/clin-rs

clin logo

clin

A TUI reimagination of Obsidian — feature-packed note management in your terminal.

Patreon

CI Release License: GPL-3.0 MSRV: 1.88.0 GitHub release last commit

Terminal Trove Tool of The Week

About

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 roughly 2-5 MB Rust binary with minimal resource use, while keeping the UI approachable.

Drop an existing Obsidian vault into clin and it works out of the box. Image rendering, databases, and Obsidian plugins are not supported.

Screenshots21

test ui::list_view::tests::test_get_preview_info ... ok test ui::list_view::tests::preview_width_ratio_controls_preview_width ... ok test markdown::builtin::tests::code_block_lang_icon ... ok test markdown::builtin::tests::renders_code_block_highlighted_when_lang ... ok

failures:

---- backup::git_ops::tests::test_push_to_file_remote_roundtrip stdout ---- Error: config value 'user.name' was not found; class=Config (7); code=NotFound (-3)

failures: backup::git_ops::tests::test_push_to_file_remote_roundtrip

test result: FAILED. 189 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.38s

error: test failed, to rerun pass --lib Error: Process completed with exit code 101.

Notes view
Notes — grid layout with preview pane
Graph view
Graph — force-directed node visualization
Canvas view
Canvas — node/edge 2D canvas
Editor view
Editor — text editor with markdown preview
More screenshots
clin screenshot clin screenshot clin screenshot
clin screenshot clin screenshot clin screenshot
clin screenshot clin screenshot clin screenshot
clin screenshot clin screenshot

Highlights

  • Notes view — folder tree, tags, markdown preview pane (built-in renderer), search, filter, sort, pin, multi-select, trash management, file management (copy, paste, delete, rename, move), customizable bottom strip with activity heatmap, goals, and widget previews.

  • 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 .canvas file 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. .draw file format. See DRAW.md.

  • Content tree view — view to see the content of a .md file as a tree with headers being the parents and content being the children.

  • 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 ~/.config/clin/themes/, no recompile needed. See THEME_SYSTEM.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, except for images.

  • 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.


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, ghostty etc.

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

Installation

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
Source & Cargo (cargo build + cargo install)

From Source

git clone https://github.com/reekta92/clin-rs.git
cd clin-rs
cargo build --release

With Cargo

cargo install clin-rs
Debian / Ubuntu (.deb, amd64 + arm64)

Debian/Ubuntu (.deb)

Download the latest .deb from the Releases page.

sudo dpkg -i clin-rs_*_amd64.deb

Debian/Ubuntu (aarch64)

Download the latest .deb from the Releases page.

sudo dpkg -i clin-rs_*_arm64.deb
Fedora / RHEL (.rpm, x86_64 + aarch64)

Fedora/RHEL (.rpm)

Download the latest .rpm from the Releases page.

sudo rpm -i clin-rs-*.x86_64.rpm

Fedora/RHEL (aarch64)

Download the latest .rpm from the Releases page.

sudo rpm -i clin-rs-*.aarch64.rpm
Arch Linux (PKGBUILD + AUR)

Arch Linux (PKGBUILD)

A PKGBUILD is included in the root of the repository.

git clone https://github.com/reekta92/clin-rs.git
cd clin-rs
makepkg -si

Arch Linux (AUR)

yay -S clin-rs-bin
Nix (Flakes)

Nix (Flakes)

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.

AppImage (portable x86_64)

AppImage

Download the latest .AppImage from the Releases page.

chmod +x clin-*-x86_64.AppImage
./clin-*-x86_64.AppImage
Linux (tar.gz, x86_64 + aarch64)

Other

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/

Other (aarch64)

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/
Windows (.zip)

Windows

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.

macOS (Apple Silicon)

macOS (Apple Silicon)

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-unknown-linux-gnu.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 | sh to install Rust.


Quick Start

# Launch the interactive TUI
clin

# Create a quick note
clin notes quick "Meeting notes from today" "standup-2026-06-13"

# Create a note from a template
clin notes new --template diary

# Open a specific note
clin notes open "my-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 Grid/Tree layout, format chooser, folders, tags, sort, pin, markdown 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, 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
Content Tree 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
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 19 built-in themes, transparent/solid backgrounds, per-color overrides, Nerd Font/Unicode/None icon modes, powerline/classic 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 via keybinds.toml, with Helix/Vim/Emacs presets
OCR Clipboard image to text via tesseract (optional dependency)

Configuration

~/.config/clin/config.toml -> main configuration file (includes theme, graph settings, etc.) ~/.config/clin/keybinds.toml -> keybind configuration file

See the full configuration reference for all available options and keybind presets for editor-style presets.

config.toml example

# General settings
storage_path = "/path/to/your/vault"
mouse_enabled = true
confirm_on_delete = true
confirm_on_quit = false

[list]
preview_enabled = true
preview_position = "right"
preview_encryption = false
show_date_in_list = true
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 = true
calendar_enabled = true

[editor]
external_command = "nvim"
external_enabled = false
preview_enabled = false
show_line_numbers = true

[ui]
theme = "tokyo_night"
background = "transparent"
show_status_bar = true
icon_mode = "nerd"
hint_bar_style = "classic"
# accent = "#ff6600"

See THEME_SYSTEM.md for theme options and CONFIG_REFERENCE.md for all options and sections.

keybinds.toml example

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", "Shift+Enter"]
# ... see CONFIG_REFERENCE.md for full list

[edit]
back = ["Esc"]
cycle_focus = ["Tab"]
copy = ["Ctrl+c", "Ctrl+Insert"]
# ... see CONFIG_REFERENCE.md

[graph]
quit = ["Esc"]
pan_up = ["Up", "k"]
# ... see CONFIG_REFERENCE.md

CLI Commands

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 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 --version                    Print version
clin --config <PATH>              Override config file (global)
clin --vault <VAULT>              Override the storage/vault path (global)
clin --help                       Show help

Documentation

Full technical documentation lives in docs/:

  • 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 keybinds.toml 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

  • Content Tree — nested outline navigation

  • Encryption — ChaCha20-Poly1305 per-note encryption

  • Theme System — built-in themes and customization

  • Setup — first-run setup wizard

  • Command Palette — extensible action system

  • Templates — TOML-based note templates

Stats

Contribution activity

Roadmap

See ROADMAP.md for planned features and progress.

Architecture

Full detail in docs/ARCHITECTURE.md.

Contributing

Contributions are welcome! See CONTRIBUTING.md for guidelines.

Support

clin is free and open-source. If it's useful to you, consider supporting its development on Patreon:

Patreon

License

Licensed under the GNU General Public License v3.0.

Credits

Built with Ratatui, Crossterm, and fdg-sim. Markdown preview via built-in comrak/syntect renderer.

About

Feature-packed TUI note management app inspired by Obsidian

Topics

Resources

License

Code of conduct

Contributing

Security policy

Stars

448 stars

Watchers

3 watching

Forks

Sponsor this project

Contributors

Languages