Desktop app that keeps your generated HTML pages in a plain-file vault and resurfaces them for spaced review.
See the codeA desktop reader for the HTML pages AI tools generate. Save a page, find it later, open it with its interactivity intact, and schedule it for review so it comes back when you need it.
Your pages stay plain .html files in a folder you own.

Linux (x86_64 and arm64):
curl -fsSL https://raw.githubusercontent.com/abdoufermat5/herbarium/main/install.sh | sh
Installs the .deb on Debian/Ubuntu (asks for sudo), the AppImage elsewhere. Pipe to sh -s -- --appimage instead to skip sudo, or sh -s -- --uninstall to remove it.
macOS and Windows: download from the releases page. These builds are not code-signed yet, so on first launch allow it in System Settings → Privacy & Security (macOS) or choose "More info → Run anyway" (Windows).
Ctrl/⌘ K); press ? for all shortcuts.A vault is an ordinary folder. Each page is an .html file with a .json file next to it for its title, tags, note and review dates. Folders are real directories. Back it up, sync it or edit it with any tool; Herbarium picks up changes when you come back to the window.
Generated HTML runs code, so every page is treated as untrusted. It runs in a sandbox that cannot reach your files, the app or other pages, and it cannot navigate away; links open in your browser only after you confirm.
Network access is a per-page switch. When on, a page can load scripts and fonts from well-known CDNs and images from any website, which means it can tell its author when you open it. Keep it off for pages you don't trust.
Herbarium is also an MCP server, so agents can save, search, organize and schedule pages. In Claude Code:
claude mcp add herbarium -- herbarium mcp
Then ask, for example, "write a short HTML explainer of Cargo workspaces and save it to Herbarium under rust". It uses the vault last opened in the app (or --vault <path>).
Needs Node.js, pnpm, Rust and the Tauri prerequisites.
pnpm install
pnpm tauri dev # run the app
make ci # everything CI checks
Built with Tauri 2, Rust, SQLite and Svelte 5.
Write the changes under [Unreleased] in CHANGELOG.md, then:
pnpm release patch # or minor | major | x.y.z
git push --follow-tags
The tag builds every platform and publishes the release. In-app updates need the signing key pair on the repository: the HERBARIUM_UPDATER_PUBLIC_KEY variable and the TAURI_SIGNING_PRIVATE_KEY secret (create them with pnpm tauri signer generate).
Rust
41.9%
Svelte
35.6%
TypeScript
19.0%
CSS
1.8%
Desktop app that keeps your generated HTML pages in a plain-file vault and resurfaces them for spaced review.
See the codeA desktop reader for the HTML pages AI tools generate. Save a page, find it later, open it with its interactivity intact, and schedule it for review so it comes back when you need it.
Your pages stay plain .html files in a folder you own.

Linux (x86_64 and arm64):
curl -fsSL https://raw.githubusercontent.com/abdoufermat5/herbarium/main/install.sh | sh
Installs the .deb on Debian/Ubuntu (asks for sudo), the AppImage elsewhere. Pipe to sh -s -- --appimage instead to skip sudo, or sh -s -- --uninstall to remove it.
macOS and Windows: download from the releases page. These builds are not code-signed yet, so on first launch allow it in System Settings → Privacy & Security (macOS) or choose "More info → Run anyway" (Windows).
Ctrl/⌘ K); press ? for all shortcuts.A vault is an ordinary folder. Each page is an .html file with a .json file next to it for its title, tags, note and review dates. Folders are real directories. Back it up, sync it or edit it with any tool; Herbarium picks up changes when you come back to the window.
Generated HTML runs code, so every page is treated as untrusted. It runs in a sandbox that cannot reach your files, the app or other pages, and it cannot navigate away; links open in your browser only after you confirm.
Network access is a per-page switch. When on, a page can load scripts and fonts from well-known CDNs and images from any website, which means it can tell its author when you open it. Keep it off for pages you don't trust.
Herbarium is also an MCP server, so agents can save, search, organize and schedule pages. In Claude Code:
claude mcp add herbarium -- herbarium mcp
Then ask, for example, "write a short HTML explainer of Cargo workspaces and save it to Herbarium under rust". It uses the vault last opened in the app (or --vault <path>).
Needs Node.js, pnpm, Rust and the Tauri prerequisites.
pnpm install
pnpm tauri dev # run the app
make ci # everything CI checks
Built with Tauri 2, Rust, SQLite and Svelte 5.
Write the changes under [Unreleased] in CHANGELOG.md, then:
pnpm release patch # or minor | major | x.y.z
git push --follow-tags
The tag builds every platform and publishes the release. In-app updates need the signing key pair on the repository: the HERBARIUM_UPDATER_PUBLIC_KEY variable and the TAURI_SIGNING_PRIVATE_KEY secret (create them with pnpm tauri signer generate).
Rust
41.9%
Svelte
35.6%
TypeScript
19.0%
CSS
1.8%