What Is graf?
graf is one of the best CLI Graph Visualizers tools for Markdown note-takers and wikilink-heavy repos. Built by reekta92, it scans local .md and .mdx files, resolves [[wikilinks]], and renders a force-directed network in the terminal for developers managing personal knowledge bases. It is part of clin-rs, and the repo says the major features are already implemented, with testing and bugfixing left.
The important detail is that graf stays filesystem-native. It does not ask you to import a vault into a separate database, and it does not require an app-specific sync layer to show your graph.
Quick Overview
| Attribute | Details |
|---|---|
| Type | CLI Graph Visualizers |
| Best For | Markdown note-takers, PKM users, and developers with wikilink-heavy repos |
| Language/Stack | Rust 1.85+, terminal UI, TOML, Markdown/MDX, YAML frontmatter |
| License | N/A |
| GitHub Stars | N/A as of Feb 2026 |
| Pricing | Open-Source |
| Last Release | N/A |
graf is terminal-first, but it is not bare-bones. The repository documents theming, overlays, search, and editor handoff, which makes it closer to a daily-use shell utility than a one-off graph demo.
Who Should Use graf?
- Markdown-heavy developers who keep docs, research notes, or design specs in plain files and want a visual index of how those files connect.
- PKM users who already rely on wikilinks and YAML frontmatter and need a local graph without migrating to a hosted note platform.
- Neovim and Vim users who prefer
EDITOR=nvim grafover a GUI app and want file opening to stay inside their existing terminal workflow. - Docs maintainers managing medium-sized repos who need a quick way to inspect link density, orphaned notes, and tag clusters.
Not ideal for:
- People who want a full note application with sync, mobile clients, and cloud collaboration.
- Teams that need graph analytics, backlinks dashboards, or a web-based shared knowledge base.
- Extremely large vaults if you do not want to tune
max_nodes, physics parameters, or exclusion rules.
Key Features of graf
- Wikilink parsing — graf extracts both
[[Title]]and[[Title|Display Text]]patterns from file content. That means it works with standard markdown knowledge-base syntax instead of a custom format. - Frontmatter and title resolution — graf reads YAML frontmatter keys like
title:andtags: [], then falls back from frontmatter title to first# headingto filename stem. Link matching is case-insensitive, which lowers friction in repos with inconsistent capitalization. - Interactive terminal graph — graf builds a force-directed network that you can pan, zoom, and drag with keyboard or mouse. The repo advertises a minimap, a grid overlay, a help layer, and node repositioning, which gives it more control than a static ASCII map.
- Search across the vault — pressing
fopens a fuzzy search popup that matches node titles, relative paths, and tags. This is the fastest path from a broad graph to a specific note when the repo is too dense to scan visually. - Layered configuration — graf uses defaults, then
~/.config/graf/config.toml, then CLI args, thenGRAF_*environment variables. That order is practical because it lets you ship repo-local preferences while still overriding them from CI or a shell alias. - Theme and color control — graf ships with 11 built-in themes, including Tokyo Night, Catppuccin Mocha, One Dark, Gruvbox, Dracula, Nord, Rose Pine, Everforest, Kanagawa, and Solarized. You can also override individual colors like
node_color,edge_color, andlabel_colorwith hex values. - External editor handoff — double-clicking a node or pressing
Enteropens the file in the editor fromEDITOR, withvimas the fallback. That makes graf a navigation layer, not a replacement for your actual editing environment.
graf vs Alternatives
| Tool | Best For | Key Differentiator | Pricing |
|---|---|---|---|
| graf | Terminal-first markdown graph navigation | Local filesystem scanning with interactive force-directed layout in the shell | Open-Source |
| Obsidian Graph View | Users already inside Obsidian | Polished GUI graph tied to a larger note app ecosystem | Freemium |
| Logseq | Outliner-first PKM workflows | Block references, daily notes, and graph view in one app | Open-Source |
| Foam | VS Code users building a markdown wiki | Editor-native workspace inside VS Code instead of a standalone terminal app | Open-Source |
Pick Obsidian Graph View if you want a richer GUI and you are already committed to Obsidian. graf wins when you want the graph to live next to your shell, not inside a proprietary app container.
Pick Logseq if your workflow is block-oriented and you want daily notes plus backlinks in one UI. graf is narrower, but that narrow scope is why it is easier to drop into an existing repo without restructuring your notes.
Pick Mnemosyne if your goal is note retention or review rather than live graph traversal. The overlap is knowledge management, but graf is specifically optimized for scanning the current working directory and jumping straight into files.
For more terminal-native tools, see browse all CLI tools. If your workflow is mostly markdown and local files, it also helps to browse all markdown tools.
How graf Works
graf starts with a recursive scan of the current working directory and builds a graph from plain files, not from a separate database. It collects nodes from .md and .mdx files, parses [[wikilinks]], reads YAML frontmatter, and resolves titles using a fallback chain that prefers title:, then the first heading, then the filename stem.
That parsing step creates the data model the UI depends on: nodes represent files, edges represent links, and tags or folders can be used for coloring and filtering. The physics layer then uses parameters like ideal_distance, damping, gravity, timestep, and prevent_overlapping from the TOML config to keep the graph readable instead of collapsing into one tight ball.
The interaction model is intentionally direct. You can pan the canvas, drag nodes, zoom with the keyboard or mouse, search with f, refresh with r, and open a file with Enter or double-click. That design makes graf fit the same mental model as less, fzf, and other shell-first tools: inspect, filter, jump, and return to editing.
cd ~/docs/my-wiki
EDITOR=nvim graf
That command launches graf from a directory full of markdown files, then opens selected notes in Neovim instead of the default vim. After startup, graf renders the graph, applies your theme and overlay settings, and uses hot-reloaded config so visual tweaks do not require a full rebuild of the workflow.
Pros and Cons of graf
Pros:
- Filesystem-native workflow — graf reads local markdown directly, so there is no import step and no sync dependency.
- Strong editor integration —
EDITORsupport means graf works with Vim, Neovim, VS Code CLI, or any editor that can open a file path. - Useful terminal ergonomics — pan, zoom, drag, search, minimap, status bar, and help overlay make the graph usable at scale.
- Flexible configuration — the four-layer override model gives you repo-local control without blocking per-shell overrides.
- Theme depth — 11 presets plus hex overrides are enough to match most terminal color schemes without patching source.
- Rust delivery model — the tool ships as a compiled binary, which is a good fit for developers who prefer a single fast executable over a Node or Python runtime.
Cons:
- Not a full note app — graf is a graph view, not a replacement for Obsidian, Logseq, or a sync-backed PKM platform.
- Large vaults need tuning — the sample config exposes
max_nodes, physics controls, and exclusion rules because dense repos can get noisy fast. - Unknown packaging story — the page points to Cargo, source build, and GitHub releases, but it does not document a distro-agnostic installer.
- Graph quality depends on note hygiene — if your titles, tags, and wikilinks are inconsistent, the visualization gets harder to trust.
Getting Started with graf
cargo install graf-rs
cd ~/docs/my-wiki
EDITOR=nvim graf
If you prefer source builds, the repo also documents git clone <repo-url>, cd graf, and cargo install --path .. graf expects Rust 1.85+ and Edition 2024, so make sure your toolchain is current before building from source.
On first run, graf scans the current directory for markdown files, resolves titles and links, then draws the graph in your terminal. If you want a different look, create ~/.config/graf/config.toml, set a theme or color overrides, and let hot reloading handle the rest.
Verdict
graf is the strongest option for terminal-first markdown graph navigation when you already keep notes as local files and want zero database migration. Its biggest strength is direct, interactive access to wikilink structure; its main caveat is that it is a visual navigator, not a full knowledge-base platform. If your workflow lives in the shell, graf is worth adopting now.



