This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Nuwax CLI is a Rust-based Docker service management and upgrade tool with a modular workspace architecture:
- nuwax-cli: Main CLI binary entry point
- client-core: Shared core business logic library
- cli-ui: Tauri desktop GUI application (React + TypeScript)
# Build CLI (release)
cargo build --release -p nuwax-cli
# Build Tauri GUI (must be in cli-ui directory)
cd cli-ui && npm run tauri build
# Build workspace
cargo build --workspace# Run all workspace tests
cargo test --workspace
# Run tests for specific package
cargo test -p client-core
# Run benchmarks
cargo bench# Format all code
cargo fmt --all
# Lint workspace (warnings as errors)
cargo clippy --workspace -- -D warnings
# Check workspace integrity
cargo check --workspace# Run CLI in development
cargo run -- --help
# Run Tauri GUI (must be in cli-ui directory)
cd cli-ui && npm run tauri dev
# Run CLI with debug logging
RUST_LOG=debug cargo run -- status- UpgradeManager: Handles service upgrades with strategy pattern (full/incremental)
- BackupManager: Manages data backups and restoration with compression
- DockerManager: Docker container lifecycle management via Bollard API
- DatabaseManager: State persistence using DuckDB
- ApiClient: Remote API communication for version checks and downloads
- Workspace Architecture: Shared dependencies in root Cargo.toml, package-specific overrides
- Async/Await: Tokio runtime throughout, concurrent operations where beneficial
- Error Handling: anyhow + thiserror for comprehensive error management
- Configuration: Smart config discovery with fallback search paths
- Cross-platform: Platform-specific logic isolated in constants.rs
- CLI commands → CliApp → Business Logic (client-core) → External Systems (Docker/API)
- Configuration loaded hierarchically: CLI args → config.toml → defaults
- State persisted in DuckDB with backup/restore capabilities
All project constants are centralized in client-core/src/constants.rs including:
- Docker paths and environment variables
- API endpoints and timeouts
- File format definitions
- Version information
- Uses Bollard crate for Docker API communication
- Supports both Docker Compose v2 and direct container management
- Cross-platform Docker socket paths (Unix vs Windows)
- Health checking with configurable timeouts
- DuckDB for embedded analytics and state storage
- MySQL support for SQL diff execution and schema upgrades
- Dashmap for concurrent-safe in-memory data structures (instead of Arc<RwLock>)
- Must run from
cli-ui/directory, not workspace root - Uses Tauri updater and file-system plugins
- Development server:
npm run tauri dev - API documentation available at:
http://127.0.0.1:3000/api-docs/openapi.json
Configuration files are searched in order:
- Command line specified path (
--config) - Current directory
./config.toml - Parent directories (recursive search)
- User home directory
~/.nuwax/config.toml
- Define command in
nuwax-cli/src/cli.rs - Add command handler in
nuwax-cli/src/commands/ - Implement business logic in
client-core/src/ - Add tests for both CLI and core logic
- Use DockerManager abstraction, never direct Bollard calls
- Follow timeout constants from
constants.rs - Implement proper error handling for Docker daemon connectivity
- Update
client-core/src/database/modules - Ensure backward compatibility with existing DuckDB files
- Add migration logic if needed
- Use
dashmapinstead ofArc<RwLock<HashMap>>for concurrent-safe data structures - Leverage Tokio's concurrency for async operations
- Implement proper resource cleanup with Drop traits
- Use connection pooling for database operations