Basalt is a lightweight Tauri-based document viewer designed for agent-generated output.
- Opens one or many files from the terminal.
- Accepts directories and opens all files inside (recursive).
- Renders Markdown files as rich content.
- Renders non-Markdown files as code blocks.
- Accepts piped Markdown from standard input (for example,
cat notes.md | basalt). - Renders local images referenced from Markdown.
- Opens Markdown references in a new window when clicked.
- Includes an
Open in VS Codebutton. - Supports nine built-in themes: Obsidian Night, Graph Paper, Moss Grove, Arc Reactor, Foundry Steel, HUD Crimson, Helios Gold, Kanagawa Lotus, and Gruvbox Light (switch via
Ctrl/Cmd+Shift+P). - Includes a
watchmode that opens new files as they appear.
After building, run:
basalt path/to/file.md path/to/config.json path/to/directoryPipe Markdown directly into Basalt:
cat path/to/file.md | basaltbasalt launches the app and then immediately returns control to the terminal.
Watch a directory and open every new file:
basalt watch path/to/directoryList currently open Basalt document windows:
basalt windows list
basalt windows list --jsonClose windows from the terminal:
basalt windows close path/to/file.md
basalt windows close --label doc-3You can also run the local launcher directly:
./bin/basalt path/to/file.md
./bin/basalt watch path/to/directoryInstall globally by compiling and copying the binary:
./bin/install-cliBy default this installs basalt into ~/.local/bin.
Optional custom install path:
./bin/install-cli /your/path/on/PATHThe installer runs npm run tauri build, copies Basalt.app to /Applications/, and links the Basalt launcher.
After installing, you can make Basalt the default app for .md files.
Via Finder:
- Right-click any
.mdfile → "Get Info" - Under "Open with", select Basalt
- Click "Change All..."
Via terminal (requires brew install duti):
duti -s com.kostard.basalt .md allBasalt declares support for Markdown file types in its Info.plist (CFBundleDocumentTypes), which is required for macOS to allow it as a handler.
npm install
npm run tauri devPass startup paths while running in dev mode:
npm run tauri dev -- ./notes.md ./reportsRun watch mode in dev:
npm run tauri dev -- watch ./reportsTheme definitions are centralized in src/themes.ts.
- Add a new object to the
THEMESarray with a uniqueid,label, and searchkeywords. - Fill in all
tokenskeys:surface,surface-alt,panel,text,muted,accent,accent-strong,line,code-bg,quote,button-bg,button-hover,status-bg. - Run
npm run buildto validate TypeScript and bundling. - Launch Basalt and switch via
Ctrl/Cmd+Shift+Pto confirm the new theme appears and renders correctly.
npm run tauri buildOn macOS, the bundled app executable is inside Basalt.app and accepts CLI arguments.
- Markdown files (
.md,.markdown,.mdown,.mkd,.mdx) render as Markdown; other files render as code blocks. - Piped stdin content is saved to a temporary Markdown file before opening so it works with single-instance forwarding.
- The VS Code button requires the
codecommand to be available in your shellPATH.