Carwash
A TUI (Terminal User Interface) for running cargo commands across multiple projects simultaneously, managing dependencies, and monitoring build outputs.
Install / Use
/learn @Epistates/CarwashREADME
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.
<img src="assets/carwash.png" alt="Carwash" style="width: 100%; max-width: 100%; margin: 20px 0;"/>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)
cargo install carwash
See the package on crates.io.
From source
# Clone the repository
git clone https://github.com/epistates/carwash.git
cd carwash
# Build and install
cargo install --path .
# Or run directly
cargo run -- /path/to/your/rust/projects
Quick Start
# Run in current directory
carwash
# Run in specific directory
carwash ~/my-rust-projects
# Show help
carwash --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
