Skip to content

nullslate/prism

Repository files navigation

Prism

A keyboard-driven markdown vault reader

Built with Tauri 2 + React + Rust

Build Release License: MIT Platform


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.

Install

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=1 if you see rendering issues.

Build from Source

Requires Rust (stable) and Node.js (v18+).

git clone https://github.com/nullslate/prism.git
cd prism
npm install
npm run tauri build

Development mode with hot reload:

npm run tauri dev

Features

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

Configuration

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 = true

Open your config from within Prism: Ctrl+K > "Open Config".

Shortcuts

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.

Themes

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.

Keybindings

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

Plugins

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.

Project Structure

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

License

MIT

About

A keyboard-driven markdown vault reader

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages