CarWash - Rust Project Manager
A TUI (Terminal User Interface) for managing multiple Rust projects with ease. CarWash provides an intuitive interface for running cargo commands across multiple projects simultaneously, managing dependencies, and monitoring build outputs.
Features
Core Features
- Multi-Project Management: Automatically discover and manage all Rust projects in a directory tree
- Parallel Command Execution: Run cargo commands across multiple projects simultaneously
- Interactive Command Palette: Fuzzy search through cargo commands with vim-style navigation
- Real-time Output Monitoring: Watch command output with colored syntax highlighting
- Dependency Management: Check for outdated dependencies and update them interactively
- Workspace Support: Intelligently handles Cargo workspaces and member projects
Enterprise-Grade UX
- Beautiful UI: Modern, colorful interface with intuitive layouts
- Status Indicators: Real-time status updates with progress indicators
- Smart Color Coding: Errors (red), warnings (yellow), success (green)
- Scrollable Output: Navigate through large command outputs with keyboard shortcuts
- Multiple Tabs: Switch between running commands with arrow keys
- Project Selection: Select single or multiple projects with visual checkboxes
Keyboard-Driven Workflow
- Vim-style Navigation:
j/kfor up/down,h/lfor left/right - Quick Commands: Press
:to open command palette instantly - Space to Select: Toggle project selection with spacebar
- Esc to Cancel: Consistent escape behavior throughout
- Tab to Toggle: Switch command scope between selected and all projects
Installation
Prerequisites
- Rust 1.93.0+ (Rust Edition 2024)
From crates.io (Recommended)
See the package on crates.io.
From source
# Clone the repository
# Build and install
# Or run directly
Quick Start
# Run in current directory
# Run in specific directory
# Show help
Usage Guide
Navigation
| Key | Action |
|---|---|
↑/↓ or j/k |
Navigate projects |
←/→ |
Switch output tabs |
Space |
Toggle project selection |
PgUp/PgDown |
Scroll output |
Commands
| Key | Action |
|---|---|
: |
Open command palette |
u |
Check for dependency updates |
? |
Show help screen |
q |
Quit application |
Ctrl+C |
Force quit |
Command Palette
- Press
:to open the command palette - Type to filter commands (fuzzy search)
- Use
↑/↓orj/kto select a command - Press
Tabto toggle between Selected Projects and All Projects - Press
Enterto execute the command - Press
Escto cancel
Architecture
CarWash is built with:
- Ratatui: Modern TUI framework for Rust
- Tokio: Async runtime for parallel command execution
- crates.io API: For checking dependency versions
- Component-Based UI: Modular, maintainable UI components
- Redux-style State Management: Predictable state updates with reducer pattern
Project Structure
src/
├── main.rs # Entry point and main event loop
├── app.rs # Application state and reducer
├── handlers.rs # State transition logic
├── project.rs # Project discovery and parsing
├── runner.rs # Command execution and updates
├── tree.rs # Hierarchical navigation system
├── cache.rs # Dependency check caching
├── settings.rs # User preferences
├── config/ # Unified configuration system
│ ├── keybinding_config.rs
│ └── theme_config.rs
├── components/ # UI Components
│ ├── dependencies.rs
│ ├── output.rs
│ ├── projects.rs
│ └── ...
└── ui/ # Visual orchestration
├── layout.rs
├── modal.rs
└── theme.rs
Customization
CarWash uses a carefully chosen color scheme optimized for terminal visibility:
- Cyan: Borders, titles, and interactive elements
- Green: Success states and selected items
- Yellow: Warnings and pending states
- Red: Errors and critical information
- Magenta: Special modes like update wizard
- Dark Gray: Secondary information and help text
Contributing
Contributions are welcome! Areas for improvement:
- Custom command templates
- Project favorites/bookmarks
- Command history persistence
- Export/save command outputs
- Plugin system
- Remote project support
📝 License
Acknowledgments
Built with:
- Ratatui - Amazing TUI framework
- Tokio - Powerful async runtime
- crates.io API - Crate metadata
Made with ❤️ for the Rust community