- Rename package from claude-app to claudify (v0.1.0) - Add README.md with install/usage instructions - Add CLAUDE.md with architecture, build, and known issues - Add .desktop file for application menu integration - Build target set to .deb only - Remove failed CSD button workarounds, document upstream bug - Remove gtk dependency (no longer needed) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2.1 KiB
2.1 KiB
Claudify
Native desktop wrapper for claude.ai built with Tauri v2 and WebKitGTK.
Architecture
- Tauri v2 with Rust backend, system WebKitGTK webview on Linux
- Direct webview navigation to
https://claude.ai(not iframe — claude.ai blocks iframes via CSP) - No frontend code —
src/index.htmlis a placeholder required by Tauri's build system; the actual UI is claude.ai loaded viaWebviewUrl::External - All app logic lives in
src-tauri/src/lib.rsinside thesetup()closure
Key Files
| File | Purpose |
|---|---|
src-tauri/src/lib.rs |
All app logic: window, tray, notifications, navigation filter |
src-tauri/src/main.rs |
Entry point, calls claudify::run() |
src-tauri/tauri.conf.json |
Tauri config: app identity, bundle targets, security |
src-tauri/capabilities/ |
Tauri v2 permission grants for local window and remote claude.ai |
src-tauri/Cargo.toml |
Rust dependencies |
Building
Prerequisites
# Debian/Ubuntu system packages
sudo apt install libwebkit2gtk-4.1-dev libxdo-dev librsvg2-dev libayatana-appindicator3-dev
# Tauri CLI
cargo install tauri-cli --version "^2.0" --locked
Build
cargo tauri build # Produces .deb in target/release/bundle/deb/
cargo tauri dev # Development mode with hot reload
Known Issues
- CSD titlebar buttons non-interactive after hide/show — Upstream bug in TAO's client-side decoration handling. Titlebar buttons (minimize/maximize/close) become unresponsive after the window is hidden to tray and restored. The close button still works via the tray menu. No known workaround — GTK decoration layout overrides, header bar replacement, resize nudges, and present() were all attempted without success. Tracked at:
Conventions
- Keep all app logic in
lib.rs— avoid splitting into multiple modules unless complexity demands it - Navigation allowlist in
is_allowed_navigation()— add new OAuth providers here if needed - Test changes with
cargo tauri devbefore building .deb