Files
yaak/.claude-context.md
2026-01-08 20:44:25 -08:00

3.3 KiB

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 <crate> 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