linux-claude-desktop Svelte Themes

Linux Claude Desktop

A lightweight, native Claude AI desktop client for Linux built with Tauri v2 and Svelte 5

Linux Claude Desktop

Linux Claude Desktop

A lightweight, native Claude AI desktop client for Ubuntu/Linux built with Tauri v2 and Svelte 5.

Latest Release Downloads Build Status Platform Tauri Svelte License


Linux Claude Desktop — chat

Streaming chat with syntax highlighting, markdown rendering, and artifacts


Screenshots

Chat view

Streaming chat with markdown rendering, syntax highlighting, and conversation sidebar

Settings — General

Settings — provider, model, system prompt, MCP servers, and more

Settings — Appearance

Appearance — themes, custom CSS, and display options

Settings — Accessibility

Accessibility — font size, high contrast, reduce motion, TTS and STT

Model comparison

Side-by-side model comparison with response grading

Computer Use

Computer Use — Claude controls your desktop with live screenshot feedback

Desktop Extensions

Desktop Extensions — one-click install for popular MCP servers

Command palette

Command palette (Ctrl+P) — jump to any conversation, view, or action


In Action

Theme switching

Theme switching — Appearance settings with live preview

Command palette

Command palette (Ctrl+P) — fuzzy search across all commands and conversations

Model comparison

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

Quick Start

  1. Install 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.

Ubuntu / Debian

sudo dpkg -i Linux.Claude.Desktop_*.deb

Fedora / RHEL / openSUSE

sudo rpm -i Linux.Claude.Desktop-*.rpm

Arch Linux (from source)

# 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.

Verify Installation

After installing, launch from your application menu or run:

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)
  • System libraries (see distro-specific commands above, or for Ubuntu/Debian):
sudo apt install -y libwebkit2gtk-4.1-dev libgtk-3-dev libayatana-appindicator3-dev libssl-dev

Build

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 ✅

  • Copy button on code blocks
  • Syntax highlighting for code
  • AI-generated conversation titles
  • Search conversations
  • Custom system prompts
  • Keyboard shortcuts

Phase 2 — Feature Parity ✅

  • File and image upload (vision API)
  • Edit and regenerate messages
  • Light/dark theme toggle
  • System tray integration
  • LaTeX/math rendering

Phase 3 — Power Features ✅

  • Artifacts (sandboxed HTML/SVG preview)
  • MCP (Model Context Protocol) support
  • Project folders with persistent context
  • Export conversations (Markdown/JSON)
  • Auto-update mechanism

Phase 4 — Beyond Official ✅

  • Local model support (Ollama)
  • Multi-provider support (OpenAI, any OpenAI-compatible API)
  • Custom commands / plugin system (slash commands run shell scripts)
  • Custom CSS themes with presets (Nord, Solarized, Monokai, Dracula)
  • Prompt library/templates

Phase 4.5 — Polish Pass ✅

  • Accessibility (aria-labels, aria-live regions, focus management)
  • Active model indicator in chat header
  • Settings validation (API keys, URLs)
  • Error handling improvements (retry failed sends, surface command errors)
  • Preserve partial content on streaming errors
  • Professional auto-update system (configurable intervals, download progress, pkexec install, restart)
  • About section (version, OS distro, architecture, repo link)

Phase 5 — Desktop Integration ✅

  • Global hotkey to summon app (Super+Shift+C)
  • Screenshot-to-Claude (capture region, send via vision API)
  • Drag-and-drop file attachments
  • Clipboard-aware paste (images)
  • Desktop notifications for completed responses
  • URI protocol handler (claude://ask?q=...)
  • Quick-ask floating overlay window (Super+Shift+Q)
  • DBus interface for scripting/automation

Phase 6 — Workflows & Productivity ✅

  • Conversation branching (fork at any message)
  • Prompt library/templates with variable placeholders
  • Command palette (Ctrl+P)
  • Agent mode (multi-step autonomous task execution)
  • Scheduled/recurring prompts
  • Workspace profiles (per-project API keys, models, prompts)
  • Conversation analytics and token usage tracking
  • Multi-window support

Phase 7 — Scale & Reliability ✅

  • Conversation pagination / virtual scroll
  • Database backup and restore
  • Performance profiling and optimization
  • Offline mode (queue messages when disconnected)

Phase 8 — Co-Work (Artifacts) ✅

  • Persistent artifacts panel (side panel alongside chat)
  • Artifact types (Code, Markdown, Mermaid diagrams, HTML/SVG, React components)
  • Live editing with syntax highlighting (CodeMirror 6)
  • Iterate with Claude (send artifact state back for modification)
  • Multiple artifacts per conversation (tab-based management)
  • Artifact versioning (diff between versions, revert)
  • Artifact persistence (save to DB, restore on reopen)
  • Export artifacts (save to file, clipboard, open in external editor)
  • Code splitting (CodeMirror, KaTeX, highlight.js, Mermaid in separate lazy chunks)

Phase 8.5 — Housekeeping ✅

  • Reduce highlight.js bundle (import only common languages — 65% main bundle reduction)
  • Lazy-load Mermaid renderer only when mermaid artifacts are opened (already done in Phase 8)
  • Add artifact search/filter in the panel
  • Keyboard shortcuts for artifact panel (Ctrl+E edit, Ctrl+S save, Ctrl+F search, Alt+1/2/3 tabs)
  • Artifact templates (HTML, React, Python, Mermaid, Markdown, SVG)

Phase 9 — Knowledge & Context ✅

  • Context window visualization (progress bar with model-aware token limits)
  • Conversation memory (persistent key-value facts injected into system prompt)
  • Web page import (fetch URL, strip HTML, store as knowledge)
  • Local knowledge base (manual, URL, or file import; project-scoped; enable/disable)
  • File watcher (auto-update knowledge entries when watched files change)

Phase 10 — Multi-Model & Comparison ✅

  • Side-by-side model comparison (same prompt to multiple models)
  • Model routing rules (auto-select model based on task type)
  • Response grading/ranking (rate responses to track model quality)
  • Custom model endpoints (add arbitrary OpenAI-compatible providers)
  • Cost estimation per conversation (based on model pricing)

Phase 11 — Voice & Accessibility ✅

  • Screen reader support (ARIA landmarks, live regions, aria-modal, skip-link)
  • Keyboard-only navigation (:focus-visible ring, full focus audit)
  • High contrast theme ([data-theme="high-contrast"]) + auto prefers-contrast
  • Adjustable font size (11–20px slider, persisted)
  • Reduce motion toggle + auto prefers-reduced-motion
  • Text-to-speech output (spd-say / espeak-ng, rate control, per-message button)
  • Speech-to-text input (arecord + whisper.cpp, mic button in toolbar)

Phase 12 — Computer Use & Desktop Extensions ✅

  • Computer Use — Claude controls the Linux desktop (click, type, scroll, drag) via xdotool + scrot
  • Agentic loop with live screenshot feedback and streaming action log (up to 30 iterations)
  • Computer Use model selector (Opus/Sonnet/Haiku) with availability check
  • Desktop Extensions catalog — 12 curated MCP servers with one-click install (no JSON editing)
  • Extensions install dialog — guided API key / path collection per server
  • Installed/Remove badges, Node.js availability check, toast feedback
  • Ctrl+Shift+U (Computer Use) and Ctrl+Shift+E (Extensions) shortcuts

Phase 13 — Terminal & Developer Tools ✅

  • Embedded terminal panel (Ctrl+Shift+T) — full PTY shell (bash/zsh) powered by portable-pty and xterm.js, with "Send to Claude" selection
  • Code execution sandbox — run Python/JS/Bash/Ruby snippets inline from chat code blocks, with stdout/stderr/timeout output panel
  • 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 ✅

  • JavaScript ES module plugins loaded from ~/.local/share/linux-claude-desktop/plugins/<id>/ — see docs/PLUGINS.md
  • Settings → Plugins UI: enable/disable, per-plugin console + error display, "Open Plugins Folder" + "Reload" buttons
  • Permission-gated lcd API: registerCommand, storage (per-plugin namespaced KV), notify (toast), invoke (read-only Tauri whitelist), log, event bus
  • Core event hooks: message:before-send (mutable — can rewrite or cancel), response:chunk, response:complete, conversation:create/delete, artifact:create/update
  • Custom artifact renderers via lcd.registerArtifactType (match by typeName, language, or title extension)
  • Plugin marketplace / registry (future)

Phase 15 — Sync ✅

  • Git-based conversation sync — commit/push/pull via local bare repo or remote (SSH/HTTPS)
  • WebDAV sync — push/pull to any WebDAV server (Nextcloud, Caddy, etc.)
  • S3-compatible sync — push/pull to AWS S3, MinIO, Backblaze B2, etc.
  • Sync status indicator + conflict detection — Settings → Sync shows last-synced time, conflict count, and per-conflict Keep Local / Use Remote resolution UI

Phase 16 — Mobile Companion PWA ✅

  • Local API server — axum HTTP server with bearer-token auth; exposes GET/POST /api/conversations and POST /api/conversations/:id/messages over LAN
  • Companion PWA — Svelte 5 mobile web app at ponack.github.io/linux-claude-desktop; lists conversations, sends and receives messages, dark/light theme
  • Offline support — service worker (stale-while-revalidate + network-first), localStorage message queue, Background Sync, offline banner; messages queued while offline flush on reconnect
  • QR code pairing — Settings → API Server → Mobile Pairing generates a QR encoding {url, token}; scanning auto-configures the PWA with no manual entry; token rotates per generation

Phase 17 — Collab Features ✅

  • Share link — Share button in chat toolbar encodes the full conversation as a base64 URL; opens as a read-only formatted view at ponack.github.io/linux-claude-desktop/share/ — no login, no server required
  • Message annotations — hover any message to reveal a note icon; inline input saves notes below the bubble with a yellow left-border strip; persisted in SQLite, deletable per-note
  • Live session — broadcast icon starts a real-time SSE feed via the local API server; open the generated URL on any LAN device to watch the conversation update live in the /live/ PWA page

UI Redesign (v1.0.0)

A phased redesign that shipped between v0.9.8 and v1.0.0, addressing the accumulated UI drift from 17 feature phases.

  • UI audit doc cataloging drift across 23 components (docs/UI_AUDIT.md)
  • Design tokens — semantic tokens for overlay/live/warning + spacing/radius/shadow/z-index scales; ~30 magic hex/rgba values swept across 9 components; all three themes (dark, light, high-contrast) updated in parallel
  • Shared Icon component with a 20-entry path registry
  • Shared Modal component with focus restoration + ESC + click-outside + ARIA; backs 4 dialogs
  • Shared Spinner + EmptyState primitives; Sidebar conversation list now shows loading, error, empty, and no-search-match states
  • Chat toolbar overflow — 6 buttons → 3 top-level + kebab menu
  • Settings sidebar reorganization — 17 flat sections → 5 thematic groups with search-in-settings
  • Sidebar density + visible active state (left-border accent + soft tint); fixed two broken token references in the import button
  • Touch / keyboard accessibility — hover-only message actions, annotation deletes, sidebar deletes, and file actions now respond to focus and touch
  • Code-block action button rewrite (deferred — works correctly today, refactor carries regression risk for markdown rendering)

Tech Stack

Layer Technology
Framework Tauri v2
Frontend Svelte 5
Backend Rust
Database SQLite (via rusqlite)
API Anthropic, OpenAI, Ollama
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.

Top categories

Loading Svelte Themes