Prism is a fast, minimal desktop app for reading and navigating markdown vaults. It stays out of the way as an always-on-top sidebar with vim-style keybindings, fuzzy search, wiki-style linking, and a Lua plugin system.
It reads your existing Obsidian, Logseq, or plain-markdown vault. It doesn't write to it unless you ask.
Download the latest release from GitHub Releases.
| Platform | Format | Install |
|---|---|---|
| macOS | .dmg |
Open and drag to Applications |
| Windows | .msi |
Run the installer |
| Linux (Debian/Ubuntu) | .deb |
sudo dpkg -i Prism_*.deb |
| Linux (other) | .AppImage |
chmod +x Prism_*.AppImage && ./Prism_*.AppImage |
Linux (Wayland + Nvidia): Set
WEBKIT_DISABLE_DMABUF_RENDERER=1if you see rendering issues.
Requires Rust (stable) and Node.js (v18+).
git clone https://github.com/nullslate/prism.git
cd prism
npm install
npm run tauri buildDevelopment mode with hot reload:
npm run tauri dev| Feature | Description |
|---|---|
| Fuzzy search | File names, paths, and content ranked by score (Ctrl+F) |
| Wiki links | [[note]], [[path/note]], [[note|display text]], [[note#heading]] with autocomplete |
| Tags | Extracted from frontmatter and inline #tags, filterable (Ctrl+T) |
| Quick capture | Append timestamped bullets to your inbox (Ctrl+.) |
| Vault search | Full-text search with line-number context (Ctrl+S) |
| Link graph | Text-based interactive graph explorer (Ctrl+G) |
| Daily notes | Create/open today's note from the command palette |
| Templates | Create notes from templates with {{date}}, {{title}} variable expansion |
| File browser | Full-screen keyboard-driven file tree with j/k nav, expand/collapse folders |
| Vim keybindings | j/k scroll, gg/G top/bottom, / search, n open editor |
| Todos | Toggle, create, and wrap todos with vim-style shortcuts in editor |
| Transclusion | Hover [[wiki links]] to preview the target note inline |
| Editor handoff | Press n to open in your $EDITOR, auto-reload on return |
| Plugins | Lua scripting + React UI extensions |
| Themes | 14 built-in themes (dark + light) with live preview picker + custom TOML themes |
| Global hotkey | Toggle window from any app (Ctrl+Space, configurable) |
| Command palette | Ctrl+K for everything |
Config lives at ~/.config/prism/config.toml (created on first launch):
vault = "~/obsidian"
editor = "nvim"
terminal = "alacritty"
theme = "catppuccin-mocha"
inbox = "inbox.md"
hotkey = "ctrl+space"
[window]
width = 420
height = 700
position = "top-right"
always_on_top = trueOpen your config from within Prism: Ctrl+K > "Open Config".
All keyboard shortcuts are configurable. Override defaults in config:
[shortcuts.global]
find-file = "ctrl+p"
[shortcuts.render]
quit = "ctrl+q"Per-vault overrides via .prism.toml in your vault root. Set a value to "" to disable.
Custom themes: ~/.config/prism/themes/{name}.toml
[colors]
bg = "#1a1b26"
fg = "#c0caf5"
accent = "#7aa2f7"
border = "#3b4261"
sidebar_bg = "#16161e"
heading = "#bb9af7"
code_bg = "#1a1b26"
selection = "#283457"
syntax_keyword = "#9d7cd8"
syntax_string = "#9ece6a"
syntax_comment = "#565f89"
syntax_function = "#7aa2f7"
syntax_number = "#ff9e64"
syntax_operator = "#89ddff"
syntax_type = "#2ac3de"
syntax_variable = "#c0caf5"Then set theme = "{name}" in config.
Global (always active)
| Key | Action |
|---|---|
Ctrl+F |
Fuzzy file finder |
Ctrl+K |
Command palette |
Ctrl+B |
Toggle sidebar |
Ctrl+N |
New file |
Ctrl+T |
Filter by tag |
Ctrl+. |
Quick capture |
Ctrl+G |
Link graph |
Ctrl+S |
Search vault |
Ctrl+Shift+T |
Theme picker |
Ctrl+Space |
Toggle window (global) |
Escape |
Close overlay |
Render mode (reading)
| Key | Action |
|---|---|
j / k |
Scroll down / up |
Ctrl+D / Ctrl+U |
Half-page down / up |
gg |
Scroll to top |
G |
Scroll to bottom |
n |
Open editor |
/ |
Search in file |
dd |
Trash file (press twice) |
1-9 |
Open favorite |
q |
Quit |
File browser (sidebar)
| Key | Action |
|---|---|
j / k |
Move cursor down / up |
o / Enter |
Open file or toggle folder |
h |
Collapse folder or jump to parent |
l |
Expand folder |
Space |
Toggle folder |
g / G |
Jump to top / bottom |
dd |
Trash file (press twice) |
R |
Rename file |
q / Escape |
Close browser |
Editor mode (CodeMirror + Vim)
| Key | Action |
|---|---|
:w |
Save |
:q |
Exit editor |
:wq |
Save and exit |
Space y |
Yank selection |
Space yy |
Yank line |
Space tt |
Toggle todo checkbox |
Space tn |
Insert new todo |
Space ta |
Wrap line as todo |
[[ |
Wiki link autocomplete |
Prism supports Lua scripts and React UI extensions.
[[plugins]]
name = "word-count"
path = "~/.config/prism/plugins/word-count"
[[plugins]]
name = "daily-summary"
git = "https://github.com/someone/prism-daily-summary"
[plugins.opts]
template = "## {{date}}"Plugins can register commands, add status bar items, listen to events (file:pre-render, file:opened, etc.), transform content before rendering, and add sidebar panels.
Each plugin has a plugin.toml manifest and an init.lua entry point. See test-plugins/hello-world/ for a working example.
Plugin authors can use @prism/plugin-sdk for themed React components.
prism/
├── src-tauri/ # Rust backend
│ └── src/
│ ├── lib.rs # App entry, plugin init, global hotkey
│ ├── config.rs # TOML config
│ ├── watcher.rs # File system watcher
│ ├── theme.rs # Theme loading
│ ├── commands/ # Tauri IPC commands
│ └── plugins/ # Plugin manager, Lua runtime, event bus
├── src/ # React frontend
│ ├── routes/ # Main view
│ ├── components/ # UI components
│ ├── hooks/ # State and shortcuts
│ └── lib/ # Tauri bindings, types, plugin loader
├── packages/
│ └── plugin-sdk/ # @prism/plugin-sdk
└── test-plugins/ # Example plugins