explaingit

ganten7/navi

12RustAudience · developerComplexity · 3/5ActiveSetup · moderate

TLDR

Native Rust desktop graph viewer for org-roam notes that reads org-roam.db directly, draws an interactive node graph, and jumps Emacs to the right file via emacsclient on double click.

Mindmap

mindmap
  root((navi))
    Inputs
      org-roam.db SQLite
      Running Emacs process
      Config JSON
    Outputs
      Interactive graph window
      emacsclient jumps
      Age heatmap view
    Use Cases
      Browse a notes graph
      Find orphan notes
      Open a note in Emacs
    Tech Stack
      Rust
      SQLite
      macOS
      emacsclient

Things people build with this

USE CASE 1

Browse an org-roam knowledge base as an interactive graph without opening Emacs

USE CASE 2

Spot orphan notes or weakly connected clusters using the age heatmap and hop limit views

USE CASE 3

Double click a node in Navi to jump straight to the heading inside a running Emacs session

USE CASE 4

Customise the config at ~/.config/navi/config.json to point at a non-standard org-roam.db location

Tech stack

RustSQLitemacOSemacsclient

Getting it running

Difficulty · moderate Time to first run · 30min

macOS Apple Silicon is the primary target; Linux needs extra glue to render and Windows is not supported.

In plain English

Navi is a desktop graph viewer for org-roam, a popular note-taking system that runs inside the Emacs editor. The program shows your notes as an interactive web of connected dots, similar to how Obsidian draws its graph view. It opens in its own native window, so you do not need to install any Emacs package or open Emacs itself to browse the graph. The tool is written in Rust. It reads the org-roam.db file directly, which is the SQLite database where org-roam stores all the links between notes. When you double-click a note in the graph, Navi sends a message to your running Emacs process through a helper program called emacsclient, which then jumps to the right file or heading inside Emacs. macOS on Apple Silicon is the primary supported platform. A pre-built Navi.app ships with each release; you download a zip from the Releases page, unzip it, and double-click. On first start, Navi tries to find your org-roam.db automatically by checking common locations used by vanilla Emacs, Doom, Spacemacs, and XDG layouts. It then writes a small config file at ~/.config/navi/config.json that you can edit later. Linux builds compile but need a bit of extra glue before the renderer works correctly. Windows is not supported. The interface offers many keyboard and mouse controls: drag to pan, scroll to zoom, click to select a node, press T to cycle colour themes, A to switch to an age heatmap, L to limit the view to nodes within one to three hops of the selection, slash to search by title, and so on. The README also documents a hand-built frame pacer for macOS that ties painting to the display vsync signal, reaching about 4.17 ms per frame on a 240 Hz panel and dropping CPU usage close to zero when the window sits idle. The repository ships as a source release with no LICENSE file included; the author notes that one should be added before redistributing binaries.

Copy-paste prompts

Prompt 1
Walk me through downloading Navi.app from Releases on an Apple Silicon Mac and getting it to find my Doom Emacs org-roam.db.
Prompt 2
Explain how Navi reads org-roam.db and what schema fields it pulls to build the graph layout.
Prompt 3
Help me compile Navi from source on Ubuntu and add the extra renderer glue so the graph window paints correctly.
Prompt 4
List the keyboard shortcuts in Navi for cycling themes, switching to the age heatmap, and limiting the view to one hop.
Prompt 5
Show me how the macOS frame pacer in Navi syncs to vsync and how to disable it for debugging.
Open on GitHub → Explain another repo

Generated 2026-05-22 · Model: sonnet-4-6 · Verify against the repo before relying on details.