Distill thoughts into aged knowledge.
Malting Malt House Still Queue Cask
────── ─────────── ────── ────────── ──────
[ Idea ] ──→ [ Store ] ──→ [ Select ] ──→ [ Distill ] ──→ [ Know ]
↑ │
└──── Draw Back ────┘
Distillery is a desktop app that refines raw thoughts into structured knowledge, borrowing the process of a whiskey distillery as its metaphor.
Capture scattered decisions, problems, insights, and questions as malts. Place them on the still to curate. The server's pipeline automatically distills them on a configurable interval, aging them in the cask — your knowledge graph.
Turn a thought into a malt. Choose one of four types:
| Type | Description |
|---|---|
| Decision | A finalized decision |
| Problem | An issue that needs resolution |
| Insight | A discovered insight |
| Question | A question that needs discussion |
Your warehouse of malts. Search, edit, or delete them.
Curate which malts to distill. When ready, send them to the distillation queue.
Pull malts out of the queue. Once they enter the cask, there is no turning back.
Explore the knowledge graph. Search for nodes, expand connections, and see how your thoughts relate to each other.
Configure the app — language, date/time format, theme, AI models, and pipeline settings.
A small floating window for capturing thoughts instantly without switching to the main app. The app stays in the system tray — close the main window and it keeps running in the background.
| Platform | Shortcut | Setup |
|---|---|---|
| macOS | Cmd+Shift+M |
Works out of the box |
| Windows | Ctrl+Shift+M |
Works out of the box |
| Linux (X11) | Ctrl+Shift+M |
Works out of the box |
| Linux (Wayland) | Any key you choose | Bind a DBus command in your compositor (see below) |
Wayland does not support app-level global shortcuts. The app exposes a DBus service instead — bind the following command in your compositor/DE settings:
dbus-send --session --type=method_call --dest=com.distillery.App /com/distillery/App com.distillery.App.ToggleFloatingMemo
Add to your config.kdl inside the binds block:
Ctrl+Shift+M { spawn "dbus-send" "--session" "--type=method_call" "--dest=com.distillery.App" "/com/distillery/App" "com.distillery.App.ToggleFloatingMemo"; }
Then reload: niri msg action reload-config
Add to hyprland.conf:
bind = CTRL SHIFT, M, exec, dbus-send --session --type=method_call --dest=com.distillery.App /com/distillery/App com.distillery.App.ToggleFloatingMemo
gsettings set org.gnome.settings-daemon.plugins.media-keys custom-keybindings "['/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/distillery/']"
gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/distillery/ name 'Distillery Floating Memo'
gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/distillery/ command "dbus-send --session --type=method_call --dest=com.distillery.App /com/distillery/App com.distillery.App.ToggleFloatingMemo"
gsettings set org.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/distillery/ binding '<Ctrl><Shift>m'
System Settings > Shortcuts > Custom Shortcuts > Add new shortcut with:
Ctrl+Shift+Mdbus-send --session --type=method_call --dest=com.distillery.App /com/distillery/App com.distillery.App.ToggleFloatingMemoFrontend Svelte 5 · SvelteKit · TypeScript · Tailwind CSS · DaisyUI
Backend Rust · SQLite (FTS5) · reqwest
Desktop Tauri 2
Graph Cytoscape.js · cytoscape-cola
bun install
cp src-tauri/.env.example src-tauri/.env
# Edit src-tauri/.env and set API_BASE_URL, UPDATER_URL
bun run tauri dev
bun run tauri build
bun tauri signer generate -w ~/.tauri/distillery.key
| Secret | Value |
|---|---|
API_BASE_URL |
Your API server URL |
UPDATER_URL |
Update manifest URL (e.g. GitHub releases latest.json) |
TAURI_SIGNING_PRIVATE_KEY |
Contents of the generated .key file |
TAURI_SIGNING_PRIVATE_KEY_PASSWORD |
Password used during key generation |
Note: For forks, update the
pubkeyinsrc-tauri/tauri.conf.jsonwith your own public key generated bybun tauri signer generate.
git tag v0.1.0
git push origin v0.1.0
A draft release will be created on GitHub with builds for Linux, macOS, and Windows.
src/
├── routes/ # Pages (malting, malt house, still, drawback, cask room, settings, help)
├── lib/
│ ├── components/ # Svelte components (malt, graph, sidebar, toast, etc.)
│ ├── graph/ # Cytoscape.js config, styles, events, context menu
│ ├── stores/ # State management (auth, malts, settings, graph, search, ui, toast)
│ ├── i18n/ # Internationalization (ko, en)
│ ├── types/ # Type definitions (graph)
│ ├── utils/ # Utilities (datetime, debounce, chosung, error, edge-id)
│ └── types.ts # Shared type definitions
src-tauri/
├── src/
│ ├── commands.rs # Tauri IPC commands
│ ├── db.rs # SQLite database
│ ├── auth.rs # OTP authentication
│ ├── api.rs # Server API communication
│ ├── models.rs # Data models
│ └── lib.rs # App setup & command registration
pitch black, amber-lit.