A fast, glassy Linux GUI for Claude Code. Wraps the
claudeCLI in a Tauri 2 app with multi-session PTY streaming, usage tracking, a skills manager, a runtime theme editor, and native KDE Plasma 6 window blur.
Stack: Tauri 2 · Rust · React 19 · TypeScript · Zustand · portable-pty · x11rb
- Multiple live sessions — every session is a real
claudeprocess in its own PTY, streamed to the UI viasession://{id}/stdoutevents. - Usage tracking — per-session token estimates, cost estimates by model, concurrent/daily/weekly limit bars, and a color-graded context-window ring.
- Skills manager — scans
~/.claude/skills/, installs new skills withgit clonefrom a URL. - Runtime theme editor — 7 presets (Dark Glass, Midnight Blue, Cyberpunk Neon, Forest, Nord, Dracula, Catppuccin Mocha), plus sliders for blur, glow, saturation, transparency, typography, and corner radius. Persisted via
tauri-plugin-store. - KDE blur — sets
_KDE_NET_WM_BLUR_BEHIND_REGIONthrough x11rb so KWin blurs whatever sits behind the window. Toggleable from the theme editor. X11 today; Wayland blur manager is on the roadmap. - No Electron — ~10 MB binary, native WebKitGTK webview.
- Linux with WebKitGTK (KDE Plasma 6 tested; GNOME works without the window blur)
- Claude Code CLI installed and on
PATH(claude --versionshould succeed) - For building from source: Rust stable + Node 20 + pnpm 10
# Debian / Ubuntu
sudo apt install libwebkit2gtk-4.1-dev libgtk-3-dev libayatana-appindicator3-dev \
librsvg2-dev libssl-dev pkg-config curl wget build-essential \
libxdo-dev libx11-dev libxcb1-dev
# Fedora
sudo dnf install webkit2gtk4.1-devel gtk3-devel libappindicator-gtk3-devel \
librsvg2-devel openssl-devel xdotool libX11-devel libxcb-devel
# Arch
sudo pacman -S webkit2gtk-4.1 gtk3 libappindicator-gtk3 librsvg openssl \
xdotool libx11 libxcbcurl -sSL https://raw.githubusercontent.com/3L0935/glassforge/main/scripts/install.sh | bashThis grabs the latest AppImage from GitHub Releases, drops it into ~/.local/bin/glassforge, and creates a .desktop entry in ~/.local/share/applications.
git clone https://github.com/3L0935/glassforge
cd glassforge
./scripts/build-flatpak.sh
flatpak install --user glassforge.flatpakgit clone https://github.com/3L0935/glassforge
cd glassforge
pnpm install
pnpm tauri dev # run against Vite HMR
pnpm tauri build --bundles appimage # produce a release AppImageGlassForge ships with two distinct kinds of blur:
- In-app glass — CSS
backdrop-filteron cards, sidebar, settings panel. This works on every compositor (GNOME, KDE, Sway, etc). - Window-level blur — KWin blurs the wallpaper/other windows that sit behind GlassForge. Controlled by the
_KDE_NET_WM_BLUR_BEHIND_REGIONX11 atom.
To enable window-level blur:
- Make sure you're running KDE Plasma 6 on X11 (Wayland support is pending).
- Open GlassForge → Settings (gear icon) → Window → toggle Enable KDE blur behind window.
- If nothing happens, check KWin compositing is on: System Settings → Display → Compositor → Enable on startup.
Open Settings (top-right gear). Every knob is live:
- Preset — pick one of the bundled palettes.
- Accent & glow — primary/secondary accent, ambient glow intensity & radius.
- Glass & blur — in-app backdrop blur strength, saturation, background opacity.
- Window — background color, window opacity, KDE blur toggle.
- Typography — sans/mono font families, base size, corner radius.
Settings persist to ~/.local/share/com.glassforge.app/settings.json (or whatever your platform's store path is).
| Path | Purpose |
|---|---|
~/.local/share/com.glassforge.app/settings.json |
Theme + limit config (managed by tauri-plugin-store) |
~/.claude/skills/ |
User skills discovered by GlassForge |
~/.local/share/com.glassforge.app/logs/ |
Runtime logs via tauri-plugin-log |
GlassForge never writes anywhere else. It spawns only the user's local claude binary — no network calls of its own.
Frontend (React) ←─ invoke / event ─→ Tauri Command Layer (Rust)
│
├── claude::session (PTY + streaming)
├── skills (scan + git install)
├── kde::blur (X11 atom)
└── config (tauri-plugin-store)
- Every side effect goes through a Tauri command — the frontend never spawns processes directly.
- Sessions live in a
SessionRegistry(Arc<RwLock<HashMap<Uuid, SessionHandle>>>). - Each session owns a dedicated OS thread that blocks on
portable-ptyreads and re-publishes chunks assession://{id}/stdoutTauri events. - Status transitions emit
session://{id}/status; exit codes emitsession://{id}/exit.
PRs welcome. Before committing:
cargo fmt --manifest-path src-tauri/Cargo.toml
cargo clippy --manifest-path src-tauri/Cargo.toml -- -D warnings
cargo test --manifest-path src-tauri/Cargo.toml
pnpm typecheckCI re-runs all of the above on every push.
- GlassForge is not a reimplementation of Claude Code — it spawns the user's existing
claudebinary. - Not an Electron app — no bundled Chromium.
- Not a network service — all state is local; the only network activity belongs to
claudeitself. - Not a theme engine for KDE — the window-blur integration is nice-to-have, not the core feature.
MIT. See LICENSE.