https://github.com/ponack/linux-claude-desktop
A lightweight, native Claude AI desktop client for Linux built with Tauri v2 and Svelte 5
https://github.com/ponack/linux-claude-desktop
ai anthropic chatbot claude claude-ai desktop-app linux llm native-app rust svelte tauri
Last synced: about 1 month ago
JSON representation
A lightweight, native Claude AI desktop client for Linux built with Tauri v2 and Svelte 5
- Host: GitHub
- URL: https://github.com/ponack/linux-claude-desktop
- Owner: ponack
- License: mit
- Created: 2026-03-22T00:29:10.000Z (3 months ago)
- Default Branch: main
- Last Pushed: 2026-03-27T02:43:01.000Z (3 months ago)
- Last Synced: 2026-03-27T05:29:50.691Z (3 months ago)
- Topics: ai, anthropic, chatbot, claude, claude-ai, desktop-app, linux, llm, native-app, rust, svelte, tauri
- Language: Svelte
- Homepage:
- Size: 7.53 MB
- Stars: 2
- Watchers: 0
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
- Security: SECURITY.md
Awesome Lists containing this project
README
Linux Claude Desktop
A lightweight, native Claude AI desktop client for Ubuntu/Linux built with Tauri v2 and Svelte 5.
---
Streaming chat with syntax highlighting, markdown rendering, and artifacts
---
## Screenshots
Streaming chat with markdown rendering, syntax highlighting, and conversation sidebar
Settings — provider, model, system prompt, MCP servers, and more
Appearance — themes, custom CSS, and display options
Accessibility — font size, high contrast, reduce motion, TTS and STT
Side-by-side model comparison with response grading
Computer Use — Claude controls your desktop with live screenshot feedback
Desktop Extensions — one-click install for popular MCP servers
Command palette (Ctrl+P) — jump to any conversation, view, or action
---
## In Action
Theme switching — Appearance settings with live preview
Command palette (Ctrl+P) — fuzzy search across all commands and conversations
Side-by-side model comparison
---
## Why?
Anthropic's official Claude Desktop app is available for macOS and Windows, but not Linux. Linux Claude Desktop fills that gap with a native, lightweight alternative that uses the Anthropic API directly.
- **~10MB** binary (vs ~150-500MB for Electron-based alternatives)
- **Native WebKitGTK** rendering (no bundled Chromium)
- **Low memory footprint** (~30-40MB idle vs ~200-300MB for Electron apps)
- **Multi-provider** — Anthropic, OpenAI, Ollama (local models), custom endpoints
- **Your API key, your data** — everything stays local on your machine
## How Does It Compare?
| | LCD | Claude Desktop (Official) | claude-desktop-debian | Chatbox AI | Jan |
|---|---|---|---|---|---|
| **Technology** | Tauri v2 + Rust | Electron | Electron (repackaged) | Electron | Electron |
| **Binary size** | ~10 MB | ~200 MB | ~200 MB | ~100 MB | ~500 MB |
| **RAM (idle)** | ~30-40 MB | ~200+ MB | ~200+ MB | ~150+ MB | ~300+ MB |
| **Linux native** | Yes | No | Unofficial port | Yes | Yes |
| **Multi-provider** | Anthropic, OpenAI, Ollama, Custom | Claude only | Claude only | Multi | Multi |
| **MCP support** | Yes | Yes | Yes | No | Yes |
| **Artifacts** | Yes (6 renderers) | Yes | Yes | No | No |
| **Computer use** | Yes (xdotool + scrot) | macOS only | No | No | No |
| **Desktop Extensions** | Yes (12 MCP servers) | Yes | No | No | No |
| **Embedded terminal** | Yes (PTY shell) | No | No | No | No |
| **Code execution** | Yes (Python/JS/Bash/Ruby) | No | No | No | No |
| **Git panel** | Yes (status/diff/commit) | No | No | No | No |
| **Open source** | MIT | No | Scripts only | GPLv3 | Apache 2.0 |
| **Offline mode** | Yes (queue + retry) | No | No | No | Yes (local models) |
| **Custom themes** | Yes (CSS + presets) | No | No | No | No |
| **Voice TTS/STT** | Yes (spd-say + whisper) | macOS only | No | No | No |
| **Accessibility** | Full (WCAG, high contrast) | Partial | Partial | No | No |
| **Desktop integration** | Global hotkey, tray, DBus, URI handler | Tray | Tray | Tray | Tray |
**LCD is purpose-built for Linux** — not an Electron wrapper or a repackaged Windows app. It uses your system's WebKitGTK for rendering, keeping the binary small and memory usage low.
## Features
- Streaming chat responses in real-time
- Conversation management (create, rename, delete, fork)
- Persistent conversation history (SQLite)
- Multi-provider: Anthropic (Claude), OpenAI-compatible APIs, Ollama (local models), custom endpoints
- Model selection per provider; side-by-side model comparison with response grading
- Cost estimation per conversation with per-model pricing
- Markdown rendering with syntax-highlighted code blocks (copy button, artifact preview)
- AI-generated conversation titles
- Search/filter conversations
- Custom system prompts; prompt library with variable placeholders
- Custom slash commands (run shell scripts from chat)
- Image upload with Claude Vision API; drag-and-drop and clipboard paste
- Screenshot-to-Claude (capture screen region and attach to message)
- Edit messages and regenerate responses
- Light and dark theme; custom CSS with presets (Nord, Solarized, Monokai, Dracula)
- System tray integration (minimize to tray)
- LaTeX/math rendering (KaTeX)
- Keyboard shortcuts (Ctrl+N, Ctrl+K, Ctrl+,, Ctrl+L, Ctrl+P, and more)
- Global hotkey (Super+Shift+C) and quick-ask overlay (Super+Shift+Q)
- Stop generation mid-stream
- Local API key storage
- Artifacts panel (6 renderers: HTML, SVG, React, Mermaid, Markdown, Code) with live editing, versioning, and export
- MCP (Model Context Protocol) tool use
- Project folders with persistent context and per-project settings
- Knowledge base (manual, URL import, file watcher)
- Conversation memory (persistent facts injected into system prompt)
- Export conversations (Markdown/JSON)
- Offline mode (queue messages, auto-retry on reconnect)
- Agent mode (multi-step autonomous task execution)
- Scheduled/recurring prompts
- Auto-update notifications with in-app download and install
- Accessibility: keyboard navigation, high contrast theme, adjustable font size, reduce motion
- Text-to-speech output (`spd-say`/`espeak-ng`) and speech-to-text input (`arecord` + `whisper.cpp`)
- Embedded terminal (`Ctrl+Shift+T`) — real PTY shell (bash/zsh) with "Send to Claude" selection
- Inline code execution — run Python/JS/Bash/Ruby snippets from chat code blocks with output panel
- Git panel (`Ctrl+Shift+G`) — staged/unstaged files, diff viewer, commit/push/pull, "Ask Claude" to send diff to chat
- Plugin system — JS/TS plugins add slash commands, persistent storage, toast notifications, event hooks (`message:before-send`, `response:complete`, etc.), and custom artifact renderers; see [docs/PLUGINS.md](docs/PLUGINS.md)
## Quick Start
1. [Install](#install-pre-built) the app for your distro
2. Launch **Linux Claude Desktop** from your application menu
3. Open **Settings** and choose your provider (Anthropic, OpenAI, or Ollama)
4. Enter your API key (or set Ollama URL for local models)
5. Start chatting
## Install (Pre-built)
Download the latest packages from [Releases](https://github.com/ponack/linux-claude-desktop/releases).
### Ubuntu / Debian
```bash
sudo dpkg -i Linux.Claude.Desktop_*.deb
```
### Fedora / RHEL / openSUSE
```bash
sudo rpm -i Linux.Claude.Desktop-*.rpm
```
### Arch Linux (from source)
```bash
# Install dependencies
sudo pacman -S webkit2gtk-4.1 gtk3 libayatana-appindicator openssl
# Clone and build
git clone https://github.com/ponack/linux-claude-desktop.git
cd linux-claude-desktop
npm install
npm run tauri build
# Install the generated .deb or run the binary directly
./src-tauri/target/release/linux-claude-desktop
```
> **Want an AUR package or Flatpak?** Contributions welcome! See [CONTRIBUTING.md](CONTRIBUTING.md).
### Verify Installation
After installing, launch from your application menu or run:
```bash
linux-claude-desktop
```
## Building from Source
### Prerequisites
- **Node.js** >= 22 (Vite 8 requires `^20.19.0 || >=22.12.0`; recommend 22 LTS)
- **Rust** (install via [rustup](https://rustup.rs/))
- **System libraries** (see distro-specific commands above, or for Ubuntu/Debian):
```bash
sudo apt install -y libwebkit2gtk-4.1-dev libgtk-3-dev libayatana-appindicator3-dev libssl-dev
```
### Build
```bash
npm install
npm run tauri build
```
This generates `.deb` and `.rpm` packages in `src-tauri/target/release/bundle/`.
## Project Structure
```
linux-claude-desktop/
├── src/ # Svelte 5 frontend
│ ├── App.svelte # Layout: sidebar + main area
│ ├── lib/
│ │ ├── Sidebar.svelte # Conversation list
│ │ ├── Chat.svelte # Message list + input + streaming
│ │ ├── MessageBubble.svelte # Markdown rendering per message
│ │ ├── ArtifactPreview.svelte # Sandboxed HTML/SVG preview
│ │ └── Settings.svelte # Provider, model, themes, plugins config
│ └── styles/global.css # Light/dark theme CSS variables
├── src-tauri/ # Rust backend (Tauri v2)
│ └── src/
│ ├── lib.rs # App state + command registration
│ ├── api.rs # Multi-provider API streaming (SSE)
│ ├── providers.rs # Provider types + Ollama model discovery
│ ├── mcp.rs # Model Context Protocol client
│ └── db.rs # SQLite: conversations, messages, settings
└── assets/ # Logo and branding
```
## Roadmap
### Phase 1 — Polish ✅
- [x] Copy button on code blocks
- [x] Syntax highlighting for code
- [x] AI-generated conversation titles
- [x] Search conversations
- [x] Custom system prompts
- [x] Keyboard shortcuts
### Phase 2 — Feature Parity ✅
- [x] File and image upload (vision API)
- [x] Edit and regenerate messages
- [x] Light/dark theme toggle
- [x] System tray integration
- [x] LaTeX/math rendering
### Phase 3 — Power Features ✅
- [x] Artifacts (sandboxed HTML/SVG preview)
- [x] MCP (Model Context Protocol) support
- [x] Project folders with persistent context
- [x] Export conversations (Markdown/JSON)
- [x] Auto-update mechanism
### Phase 4 — Beyond Official ✅
- [x] Local model support (Ollama)
- [x] Multi-provider support (OpenAI, any OpenAI-compatible API)
- [x] Custom commands / plugin system (slash commands run shell scripts)
- [x] Custom CSS themes with presets (Nord, Solarized, Monokai, Dracula)
- [x] Prompt library/templates
### Phase 4.5 — Polish Pass ✅
- [x] Accessibility (aria-labels, aria-live regions, focus management)
- [x] Active model indicator in chat header
- [x] Settings validation (API keys, URLs)
- [x] Error handling improvements (retry failed sends, surface command errors)
- [x] Preserve partial content on streaming errors
- [x] Professional auto-update system (configurable intervals, download progress, pkexec install, restart)
- [x] About section (version, OS distro, architecture, repo link)
### Phase 5 — Desktop Integration ✅
- [x] Global hotkey to summon app (Super+Shift+C)
- [x] Screenshot-to-Claude (capture region, send via vision API)
- [x] Drag-and-drop file attachments
- [x] Clipboard-aware paste (images)
- [x] Desktop notifications for completed responses
- [x] URI protocol handler (claude://ask?q=...)
- [x] Quick-ask floating overlay window (Super+Shift+Q)
- [x] DBus interface for scripting/automation
### Phase 6 — Workflows & Productivity ✅
- [x] Conversation branching (fork at any message)
- [x] Prompt library/templates with variable placeholders
- [x] Command palette (Ctrl+P)
- [x] Agent mode (multi-step autonomous task execution)
- [x] Scheduled/recurring prompts
- [x] Workspace profiles (per-project API keys, models, prompts)
- [x] Conversation analytics and token usage tracking
- [x] Multi-window support
### Phase 7 — Scale & Reliability ✅
- [x] Conversation pagination / virtual scroll
- [x] Database backup and restore
- [x] Performance profiling and optimization
- [x] Offline mode (queue messages when disconnected)
### Phase 8 — Co-Work (Artifacts) ✅
- [x] Persistent artifacts panel (side panel alongside chat)
- [x] Artifact types (Code, Markdown, Mermaid diagrams, HTML/SVG, React components)
- [x] Live editing with syntax highlighting (CodeMirror 6)
- [x] Iterate with Claude (send artifact state back for modification)
- [x] Multiple artifacts per conversation (tab-based management)
- [x] Artifact versioning (diff between versions, revert)
- [x] Artifact persistence (save to DB, restore on reopen)
- [x] Export artifacts (save to file, clipboard, open in external editor)
- [x] Code splitting (CodeMirror, KaTeX, highlight.js, Mermaid in separate lazy chunks)
### Phase 8.5 — Housekeeping ✅
- [x] Reduce highlight.js bundle (import only common languages — 65% main bundle reduction)
- [x] Lazy-load Mermaid renderer only when mermaid artifacts are opened (already done in Phase 8)
- [x] Add artifact search/filter in the panel
- [x] Keyboard shortcuts for artifact panel (Ctrl+E edit, Ctrl+S save, Ctrl+F search, Alt+1/2/3 tabs)
- [x] Artifact templates (HTML, React, Python, Mermaid, Markdown, SVG)
### Phase 9 — Knowledge & Context ✅
- [x] Context window visualization (progress bar with model-aware token limits)
- [x] Conversation memory (persistent key-value facts injected into system prompt)
- [x] Web page import (fetch URL, strip HTML, store as knowledge)
- [x] Local knowledge base (manual, URL, or file import; project-scoped; enable/disable)
- [x] File watcher (auto-update knowledge entries when watched files change)
### Phase 10 — Multi-Model & Comparison ✅
- [x] Side-by-side model comparison (same prompt to multiple models)
- [x] Model routing rules (auto-select model based on task type)
- [x] Response grading/ranking (rate responses to track model quality)
- [x] Custom model endpoints (add arbitrary OpenAI-compatible providers)
- [x] Cost estimation per conversation (based on model pricing)
### Phase 11 — Voice & Accessibility ✅
- [x] Screen reader support (ARIA landmarks, live regions, `aria-modal`, skip-link)
- [x] Keyboard-only navigation (`:focus-visible` ring, full focus audit)
- [x] High contrast theme (`[data-theme="high-contrast"]`) + auto `prefers-contrast`
- [x] Adjustable font size (11–20px slider, persisted)
- [x] Reduce motion toggle + auto `prefers-reduced-motion`
- [x] Text-to-speech output (`spd-say` / `espeak-ng`, rate control, per-message button)
- [x] Speech-to-text input (`arecord` + `whisper.cpp`, mic button in toolbar)
### Phase 12 — Computer Use & Desktop Extensions ✅
- [x] Computer Use — Claude controls the Linux desktop (click, type, scroll, drag) via xdotool + scrot
- [x] Agentic loop with live screenshot feedback and streaming action log (up to 30 iterations)
- [x] Computer Use model selector (Opus/Sonnet/Haiku) with availability check
- [x] Desktop Extensions catalog — 12 curated MCP servers with one-click install (no JSON editing)
- [x] Extensions install dialog — guided API key / path collection per server
- [x] Installed/Remove badges, Node.js availability check, toast feedback
- [x] `Ctrl+Shift+U` (Computer Use) and `Ctrl+Shift+E` (Extensions) shortcuts
### Phase 13 — Terminal & Developer Tools ✅
- [x] Embedded terminal panel (`Ctrl+Shift+T`) — full PTY shell (bash/zsh) powered by portable-pty and xterm.js, with "Send to Claude" selection
- [x] Code execution sandbox — run Python/JS/Bash/Ruby snippets inline from chat code blocks, with stdout/stderr/timeout output panel
- [x] Git integration (`Ctrl+Shift+G`) — staged/unstaged file list, per-file diff viewer, stage/unstage, commit, push/pull, recent repo picker, "Ask Claude" to send diff to chat
### Phase 14 — Plugin System ✅
- [x] JavaScript ES module plugins loaded from `~/.local/share/linux-claude-desktop/plugins//` — see [docs/PLUGINS.md](docs/PLUGINS.md)
- [x] Settings → Plugins UI: enable/disable, per-plugin console + error display, "Open Plugins Folder" + "Reload" buttons
- [x] Permission-gated `lcd` API: `registerCommand`, `storage` (per-plugin namespaced KV), `notify` (toast), `invoke` (read-only Tauri whitelist), `log`, event bus
- [x] Core event hooks: `message:before-send` (mutable — can rewrite or cancel), `response:chunk`, `response:complete`, `conversation:create`/`delete`, `artifact:create`/`update`
- [x] Custom artifact renderers via `lcd.registerArtifactType` (match by typeName, language, or title extension)
- [ ] Plugin marketplace / registry (future)
## Tech Stack
| Layer | Technology |
|-------|-----------|
| Framework | [Tauri v2](https://v2.tauri.app/) |
| Frontend | [Svelte 5](https://svelte.dev/) |
| Backend | Rust |
| Database | SQLite (via rusqlite) |
| API | [Anthropic](https://docs.anthropic.com/en/api/messages), [OpenAI](https://platform.openai.com/docs/api-reference), [Ollama](https://ollama.com/) |
| Build | Vite |
## Contributing
Contributions are welcome! Feel free to open issues or submit pull requests.
## License
MIT
## Disclaimer
This is an unofficial, community-built client. It is not affiliated with or endorsed by Anthropic. "Claude" is a trademark of Anthropic.