# Claude Context: Detaching Tauri from Yaak ## Goal Make Yaak runnable as a standalone CLI without Tauri as a dependency. The core Rust crates in `crates/` should be usable independently, while Tauri-specific code lives in `crates-tauri/`. ## Project Structure ``` crates/ # Core crates - should NOT depend on Tauri crates-tauri/ # Tauri-specific crates (yaak-app, yaak-tauri-utils, etc.) crates-cli/ # CLI crate (yaak-cli) ``` ## Completed Work ### 1. Folder Restructure - Moved Tauri-dependent app code to `crates-tauri/yaak-app/` - Created `crates-tauri/yaak-tauri-utils/` for shared Tauri utilities (window traits, api_client, error handling) - Created `crates-cli/yaak-cli/` for the standalone CLI ### 2. Decoupled Crates (no longer depend on Tauri) - **yaak-models**: Uses `init_standalone()` pattern for CLI database access - **yaak-http**: Removed Tauri plugin, HttpConnectionManager initialized in yaak-app setup - **yaak-common**: Only contains Tauri-free utilities (serde, platform) - **yaak-crypto**: Removed Tauri plugin, EncryptionManager initialized in yaak-app setup, commands moved to yaak-app - **yaak-grpc**: Replaced AppHandle with GrpcConfig struct, uses tokio::process::Command instead of Tauri sidecar ### 3. CLI Implementation - Basic CLI at `crates-cli/yaak-cli/src/main.rs` - Commands: workspaces, requests, send (by ID), get (ad-hoc URL), create - Uses same database as Tauri app via `yaak_models::init_standalone()` ## Remaining Work ### Crates Still Depending on Tauri (in `crates/`) 1. **yaak-git** (3 files) - Moderate complexity 2. **yaak-plugins** (13 files) - **Hardest** - deeply integrated with Tauri for plugin-to-window communication 3. **yaak-sync** (4 files) - Moderate complexity 4. **yaak-ws** (5 files) - Moderate complexity ### Pattern for Decoupling 1. Remove Tauri plugin `init()` function from the crate 2. Move commands to `yaak-app/src/commands.rs` or keep inline in `lib.rs` 3. Move extension traits (e.g., `SomethingManagerExt`) to yaak-app or yaak-tauri-utils 4. Initialize managers in yaak-app's `.setup()` block 5. Remove `tauri` from Cargo.toml dependencies 6. Update `crates-tauri/yaak-app/capabilities/default.json` to remove the plugin permission 7. Replace `tauri::async_runtime::block_on` with `tokio::runtime::Handle::current().block_on()` ## Key Files - `crates-tauri/yaak-app/src/lib.rs` - Main Tauri app, setup block initializes managers - `crates-tauri/yaak-app/src/commands.rs` - Migrated Tauri commands - `crates-tauri/yaak-app/src/models_ext.rs` - Database plugin and extension traits - `crates-tauri/yaak-tauri-utils/src/window.rs` - WorkspaceWindowTrait for window state - `crates/yaak-models/src/lib.rs` - Contains `init_standalone()` for CLI usage ## Git Branch Working on `detach-tauri` branch. ## Recent Commits ``` c40cff40 Remove Tauri dependencies from yaak-crypto and yaak-grpc df495f1d Move Tauri utilities from yaak-common to yaak-tauri-utils 481e0273 Remove Tauri dependencies from yaak-http and yaak-common 10568ac3 Add HTTP request sending to yaak-cli bcb7d600 Add yaak-cli stub with basic database access e718a5f1 Refactor models_ext to use init_standalone from yaak-models ``` ## Testing - Run `cargo check -p ` to verify a crate builds without Tauri - Run `npm run app-dev` to test the Tauri app still works - Run `cargo run -p yaak-cli -- --help` to test the CLI