Written in Rust · GPL-3.0 · works on the vault you already have

Your Obsidian vault, at home in the terminal.

Same folder. Same notes. Same [[links]]. Read, write and wander through them without ever reaching for the mouse, and keep Obsidian open on the other screen while you do.

Other ways to install

Rather use brew, npm or cargo? All four are two lines down.

A recording of the app

Half a minute in a real terminal. Nothing sped up, nothing cut.

obsidian-tui ~/demo-vault
The file tree, a note in live preview, Ctrl+K for backlinks, the graph settling under Ctrl+G, and two of the eighteen themes.

A look at the app

The same layout, drawn live. Try a theme:

obsidian-tui ~/Notes

Eighteen themes ship with it, including Obsidian's own light and dark, and a terminal theme that simply inherits whatever palette you've already spent years tuning. Drop a TOML file next to your config to add one more.

Nothing to migrate

Point it at a folder of Markdown files and it just works. No import step, no sidecar database, no proprietary format waiting to trap you.

Nothing to fight over

Obsidian can stay open on the same vault at the same time. Edit here, edit there; they're the same files on the same disk.

Nothing phoning home

No telemetry, no analytics, not even an update check. Unless you turn the assistant on, it never opens a socket.

What's inside

Everything you reach for, where your hands already are.

Markdown that still looks like Markdown

Live preview in Obsidian's dialect: [[wikilinks]] that dim when they don't resolve yet, #tags, - [ ] tasks, > [!note] callouts, tables, and fenced code with syntax highlighting. Frontmatter is optional: a stray .md file you dragged in from somewhere else shows up like everything else.

Links that point both ways

A backlinks pane showing the exact line each link sits on, an outline, and a tag browser. Follow a link to a note that doesn't exist and it gets written for you. Rename a note and every wikilink pointing at it is rewritten too.

A graph that earns its screen

Force-directed with Barnes-Hut repulsion, so it stays smooth on a big vault and stops burning CPU the moment it settles. Notes that are only linked to show up hollow, usually the most useful thing on screen, because those are the notes you meant to write.

Eighteen themes, then yours

Obsidian's light and dark, Catppuccin, Tokyo Night, Gruvbox, Nord, Solarized, Dracula, Rosé Pine, Everforest, plus a terminal theme that just uses your palette. Your own theme is a TOML file; anything you leave unset is inherited from whatever it extends.

An assistant that shows its work

A chat panel that acts on the vault through the very same commands you use. It can search, read, create, edit, rename, link and delete notes, and put one on your screen. Every tool call appears in the transcript, so you're reading what it actually did rather than trusting a summary of it. Type / for slash commands that never reach the model: /model switches backend, /save and /resume keep a conversation for tomorrow, /compact buys back context. Bring an Anthropic key, point it at Ollama on localhost, or leave it switched off entirely; nothing else in the app depends on it.

Ctrl+G

The notes you meant to write, made visible.

Every vault accumulates them: a link you typed in a hurry to a note you never got around to. In the graph they're the hollow circles, pulled into place by everything that points at them, waiting for you.

Ctrl+Shift+G narrows it down to just the neighbourhood of the note you have open, which is usually the question you were actually asking.

written linked, not written yet

Straight off the terminal

Real pixels, not mockups.

Every frame here was captured from the recording above, in a stock terminal against a small demo vault. None of it was redrawn by hand — open any one of them for the full-size capture.

Welcome.md
The three-pane layout in the obsidian-dark theme: an icon ribbon and file explorer on the left, a note called Welcome in the middle showing tags, a task list, a callout with a coloured bar and a bordered table, and an outline panel on the right.
The three panes. Markdown rendered in place — tags, tasks, callouts and tables, not raw syntax.
Projects/Roadmap.md
The Roadmap note open, with the right-hand panel switched to Backlinks, listing six notes that link to it along with the line of context each link sits in.
Backlinks. Ctrl+K cycles the right panel through outline, backlinks and tags, each with its line of context.
graph
The force-directed graph view filling the centre pane, with labelled note clusters, a lone unconnected note called Orphan off to one side, and a status line reading sixteen nodes and twenty-eight links.
The graph. Ctrl+G for the whole vault, f to fit it. Orphans sit on their own, where you can see them.
Projects/Roadmap.md
The same Roadmap note and layout rendered in the light Catppuccin Latte theme, with a cream background and violet accents.
Light, too. catppuccin-latte here — one of eighteen, Obsidian's own light and dark among them.

Privacy, in plain words

Your notes are the most personal thing on your machine.
We treat them that way.

obsidian-tui makes no network connections at all unless you use the assistant. Only one crate in the whole workspace has an HTTP dependency: the vault, the editor and the graph physically cannot reach the network.

If you do send a message, this is what leaves

  • the message you typed
  • the note you have open, if include_active_note is on
  • whatever notes the assistant reads with its tools while answering

That's the entire list. It goes to the provider you configured, under that provider's terms, and nothing is ever sent in the background.

If you'd rather it never leaves at all

[agent]
provider = "openai"
base_url = "http://localhost:11434/v1"
model = "llama3.1"

Ollama, LM Studio, vLLM: anything OpenAI-shaped. Or set provider = "offline" and the assistant simply isn't there.

Your API key is read from the environment and is never written to the config file, never logged, and never included in an error message. Set allow_writes = false to leave the assistant with search and read only.

Muscle memory

Obsidian's shortcuts where it has them. The terminal's where it doesn't.

Nothing new to learn on day one. A hint bar above the status line shows the keys that apply to wherever you're standing, and ? opens the full list. When it starts feeling like training wheels, turn it off from the command palette.

CtrlOQuick switcher
CtrlPCommand palette
CtrlShiftFSearch every note
CtrlEReading ↔ editing
CtrlN / CtrlSNew note / save
CtrlDToday's daily note
CtrlGGraph (add Shift for the local one)
CtrlLAssistant panel
Tab / ShiftTabMove between panes
hjklMove within one; arrows work too
EnterOpen, or follow a link
AltBack to the previous note
?Every shortcut, grouped
qQuit, and it asks first

q is careful about where it quits from. Anywhere you might be typing (the editor, the chat box, a search field), it stays an ordinary letter, and CtrlQ is the way out instead.

In the graph the keys are its own: hjkl pans, + and - zoom, f fits the whole thing on screen, Tab steps between nodes, c recentres on the one you've picked, and L, u and t toggle labels, unresolved links and tags.

And if you'd rather point at things: the ribbon icons are buttons, notes and folders and tabs are clickable, graph nodes select, and the scroll wheel scrolls whichever pane is under your pointer, not the focused one.

Two minutes, tops

Pick whichever one you already trust.

macOS and Linux. Works out which build fits your machine, downloads it and checks it against its published checksum before anything moves. OTUI_BIN_DIR chooses where it lands; OTUI_VERSION pins a release. Piping a script into a shell is worth a read first; here it is in full.

Then point it at something

obsidian-tui ~/Notes           # a specific vault
obsidian-tui                   # whatever Obsidian had open last
obsidian-tui --list-vaults     # everything Obsidian knows about

It also answers to the obsidian:// URIs the desktop app registers, so a link or a script that opens Obsidian opens this too: obsidian-tui 'obsidian://open?vault=Notes&file=Ideas'. And for the days you don't want a UI at all: obsidian-tui ~/Notes --prompt "which notes mention the Q3 migration?"

Prebuilt for Apple silicon, Linux x86_64 and aarch64, and Windows x86_64.

Reasonable worries

The things you'd want to ask first.

Is this going to do something to my vault?

It reads a plain folder of Markdown files: no import, no database, no lock-in. It writes when you ask it to: saving a note, creating one by following a link that didn't resolve, or renaming one, which also rewrites the wikilinks pointing at it. Nothing happens behind your back.

Can I keep Obsidian open while I use it?

Yes, and that's the point. It's the same folder on the same disk, and both apps are happy to be in it at once. Use whichever one suits the moment.

Obsidian ships its own CLI now. Why this?

They do different jobs. Obsidian's official CLI is a remote control for the desktop app: it gives you commands, not an interface, and every one of them runs against a full Obsidian instance, which it launches if you haven't. obsidian-tui is the interface, reading the vault's files directly, so it starts in a second on a box with no display at all. They get along: when the obsidian binary is on your PATH, /obsidian open (or "Open this note in Obsidian" in the command palette) hands the note you're reading to the desktop app for the one thing only it can do. If the CLI isn't enabled, obsidian-tui says so and carries on.

Do I need an API key?

Only if you want the assistant. Without one the panel still opens and explains how to set it up, and every other part of the app carries on exactly as before. Set ANTHROPIC_API_KEY (or OPENAI_API_KEY) and restart.

Can the AI run entirely on my own machine?

Yes. Set provider = "openai" with a base_url pointing at Ollama, LM Studio, vLLM or anything else that speaks the OpenAI shape, and nothing leaves your laptop.

What about my Obsidian plugins and themes?

Plugins are Obsidian's, and they stay there; this reads the files underneath, so anything a plugin wrote is just text you can see. Themes are separate: eighteen ship with the app, and you can write your own in TOML, borrowing from any of them.

Which platforms?

Binaries are published for Apple silicon, Linux x86_64 and aarch64, and Windows x86_64. Intel Macs build from source with cargo. Config lands in the usual place for your OS on first run, with every default spelled out so you can see what you're changing.

Your notes are already on your machine.

Now you don't have to leave the terminal to think in them.

Star on GitHub

A star is how a project like this gets found, and it costs you nothing. Or just read the source first.