A fast, beautiful, local-first library for your AI prompts.
Capture, organize, search and reuse prompts for ChatGPT, Claude, Gemini and any other assistant — in seconds, fully offline.
Русская версия · Publishing guide · Contributing · Changelog
Prompts are the new snippets. They live in chat histories, text files and sticky notes — and they get lost. Muse Library is a purpose-built notebook for prompts, designed around one goal: open the app, save a prompt, find any old prompt by meaning and copy it — in under 10 seconds.
- Local-first. No account, no cloud, no network required. Your prompts never leave your device.
- Native feel. A minimal, monochrome interface with a liquid-glass finish, light and dark themes, a configurable accent color, subtle motion and full Reduced Motion support.
- Built for speed. Instant startup, instant search, autosave, keyboard-first navigation.
- Workspaces to separate contexts (work, personal, clients)
- Nested folders with a tree view and drag and drop
- Unlimited tags with one-click automatic suggestions based on prompt content
- Favorites and Smart Collections on a dedicated icon rail: All prompts, Recent, Favorites, Untagged, plus custom saved-search collections
- Instant note creation with
Cmd/Ctrl+N - Autosave — there is no Save button
- Markdown editing with a rendered preview (headings, lists, tables, code blocks, GFM)
- Character, word and variable counts, creation and modification dates
- Variables in
{{variable}}syntax are detected automatically - Variable values are shared across the whole library: set
{{tone}}once and every prompt uses it - A dedicated Variables tab lists every variable in the workspace; the editor drawer shows a live preview with substituted values highlighted in your accent color
- Copy Filled Prompt puts the finished prompt on your clipboard in one click or with
Cmd/Ctrl+Shift+C
- Full-text search powered by SQLite FTS5 with prefix matching
- Semantic search by meaning, using local embeddings — no cloud, no API keys
- Quick Switcher (
Cmd/Ctrl+P) to jump to any prompt - Command Palette (
Cmd/Ctrl+K) for every action in the app
- Automatic daily backups of the local database with configurable retention
- Optional AES-256 encryption for backups with a local passphrase
- One-click restore from any backup
- Undo after deletion; deleted prompts are purged after 30 days
- Export a single prompt or a whole workspace to Markdown, JSON or YAML
- Import from the same formats
- Fully localized UI in English and Russian out of the box
- Automatic system-language detection with manual override
- Add your own language by dropping a JSON file into the app data folder — no code changes required
| Action | macOS | Windows |
|---|---|---|
| New prompt | ⌘N |
Ctrl+N |
| Command palette | ⌘K |
Ctrl+K |
| Quick switcher | ⌘P |
Ctrl+P |
| Focus search | ⌘F |
Ctrl+F |
| Toggle Markdown preview | ⌘E |
Ctrl+E |
| Toggle favorite | ⌘D |
Ctrl+D |
| Copy filled prompt | ⌘⇧C |
Ctrl+Shift+C |
| Toggle sidebar | ⌘B |
Ctrl+B |
| Settings | ⌘, |
Ctrl+, |
| Layer | Technology |
|---|---|
| Shell | Tauri v2 (Rust) |
| UI | React 19, TypeScript, Vite |
| Styling | Tailwind CSS v4, shadcn/ui-style components, liquid-glass surface system, Motion, Lucide icons, Onest typeface |
| Markdown | react-markdown + remark-gfm |
| Data | SQLite (FTS5) via tauri-plugin-sql, Drizzle ORM |
| State | Zustand |
| Security | AES-256-GCM + Argon2 (Rust) for encrypted backups |
muse-library/
├── src/ # React application
│ ├── app/ # Shell, init, theming, global hotkeys
│ ├── components/
│ │ ├── ui/ # Design-system primitives (button, dialog, menus...)
│ │ └── dialogs/ # Shared confirm / input dialogs
│ ├── features/
│ │ ├── sidebar/ # Workspaces, collections, folders, tags
│ │ ├── notes/ # Note list and search
│ │ ├── editor/ # Editor, tags, variables, Markdown preview
│ │ ├── command/ # Command palette and quick switcher
│ │ ├── settings/ # Settings dialog
│ │ └── data/ # Import / export
│ ├── lib/
│ │ ├── db/ # Drizzle schema and SQLite client
│ │ ├── repositories/ # Data access layer
│ │ ├── analysis/ # Embeddings and tag suggestions
│ │ ├── prompt/ # Variable parsing
│ │ └── i18n/ # Localization runtime
│ ├── locales/ # en.json, ru.json
│ ├── stores/ # Zustand stores
│ └── styles/ # Global styles and liquid-glass tokens
├── src-tauri/ # Rust backend
│ ├── src/
│ │ ├── commands/ # Backups, crypto, files, locales
│ │ └── migrations.rs # SQLite schema and FTS5 triggers
│ ├── capabilities/ # Permission manifests
│ └── icons/
├── scripts/ # Icon generation
└── docs/ # Publishing and maintenance guides
- Node.js 20+
- Rust (stable toolchain)
- Platform build tools: Xcode Command Line Tools on macOS, Microsoft C++ Build Tools and WebView2 on Windows
See the Tauri prerequisites guide for details.
npm install
npm run tauri devThe first run compiles the Rust backend and takes a few minutes; subsequent runs are incremental.
npm run typecheck # TypeScript check
npm run lint # ESLint
npm run format:check # Prettier (verify)
npm run format # Prettier (write)npm run tauri buildInstallers are produced in src-tauri/target/release/bundle (.dmg/.app on macOS, .msi/.exe on Windows).
npm run icons # Regenerate application iconsMuse Library is a desktop application — deployment means shipping installers:
- Bump the version in
package.json,src-tauri/tauri.conf.jsonandsrc-tauri/Cargo.toml(keep them in sync). - Add a section to
CHANGELOG.md. - Run
npm run tauri buildon each target platform (macOS builds on macOS, Windows builds on Windows). - Attach the artifacts from
src-tauri/target/release/bundleto a GitHub Release.
For a step-by-step guide to publishing the repository and creating releases, see docs/PUBLISHING.md.
Code signing (Apple notarization, Windows Authenticode) is recommended for public distribution — see the Tauri distribution docs.
- Repositories over raw queries. All data access goes through typed repository modules built on Drizzle ORM; FTS5 and vector queries use a thin raw-SQL escape hatch in the same layer.
- Soft deletion. Deleting a prompt sets
deleted_at, enabling instant Undo; a purge job removes prompts older than 30 days on startup. - Search index maintenance is transparent. FTS5 stays in sync through SQLite triggers; embeddings are recomputed on save and backfilled on startup.
- Pluggable embeddings. Semantic search is defined by a small
EmbeddingProviderinterface. The default provider is a deterministic hashed n-gram model that runs instantly and fully offline; a heavier neural model can be swapped in without touching the rest of the app. - Sync-ready. All entities use UUID keys and millisecond timestamps, so a future sync layer can be added without schema changes.
- Deferred Markdown. The Markdown renderer is code-split and lazy-loaded, keeping cold start instant.
Create locales/<code>.json inside the app data directory (~/Library/Application Support/com.muselibrary.app on macOS, %APPDATA%\com.muselibrary.app on Windows), copying the structure of src/locales/en.json. Add a meta.name key with the display name of your language and restart the app. The language appears in Settings automatically.
Ideas that fit the architecture without breaking local-first guarantees:
- Prompt version history — the soft-delete pattern and UUID keys make snapshots straightforward.
- Neural embeddings — implement
EmbeddingProviderwith an ONNX/ggml model as an optional download. - End-to-end encrypted sync — entities are already UUID-keyed and timestamped.
- Template gallery — the export format is a stable, versioned JSON document.
- Global quick-capture hotkey — Tauri's global-shortcut plugin plus a small always-on-top window.
- Linux builds — Tauri supports them; add a CI matrix entry and test the WebKitGTK rendering.
Contributions are welcome. Please read CONTRIBUTING.md first.
Developed by Liwidale