home / skills / bahayonghang / my-claude-code-settings / rust-cli-tui-developer

This skill guides you in building Rust CLI and TUI apps with clap, inquire, and ratatui, offering patterns, best practices, and real examples.

npx playbooks add skill bahayonghang/my-claude-code-settings --skill rust-cli-tui-developer

Review the files below or copy the command above to add this skill to your agents.

Files (4)
SKILL.md
13.1 KB
---
name: rust-cli-tui-developer
description: Expert guidance for Rust CLI and TUI development with official examples from clap, inquire, and ratatui libraries. Use when building command-line interfaces, terminal user interfaces, or console applications in Rust. Provides structured patterns, best practices, and real code implementations from official sources.
category: rust-development
tags:
  - rust
  - cli
  - tui
  - terminal
  - clap
  - ratatui
  - console
allowed-tools: Read, Write, Edit, Glob, Grep, Bash
---

# Rust CLI/TUI Developer

Expert guidance for building modern command-line interfaces and terminal user interfaces in Rust, using the most popular libraries: **clap** for CLI argument parsing, **inquire** for interactive prompts, and **ratatui** for rich terminal UIs.

This skill provides structured patterns, best practices, and real implementations from the official source code of these libraries.

## 🚀 Quick Start Library Selection

### Choose Your Library Stack

| Need | Primary Library | Complementary | Use Case |
|------|----------------|---------------|----------|
| **CLI Arguments** | `clap` | - | Command-line parsing, help generation |
| **Interactive Prompts** | `inquire` | - | User input, menus, selections |
| **Rich Terminal UI** | `ratatui` | `crossterm` | Complex layouts, real-time updates |
| **Full App** | `clap` + `inquire` + `ratatui` | - | Complete interactive console applications |

### Library Integration Workflow

1. **Add dependencies using cargo add**:
   ```bash
   # For CLI argument parsing
   cargo add clap --features derive

   # For interactive prompts and user input
   cargo add inquire

   # For rich terminal interfaces
   cargo add ratatui

   # For cross-platform terminal handling
   cargo add crossterm
   ```

2. **Explore official examples**:
   - **CLI patterns**: See `@source/clap/examples/` for comprehensive usage examples
   - **Interactive workflows**: Check `@source/inquire/examples/` for prompt patterns
   - **TUI patterns**: Review `@source/ratatui/examples/apps/` for complete applications

3. **Combine libraries** based on your application needs - start simple and add complexity incrementally.

## 📚 Official Resources

### Primary Documentation Sources
This skill includes complete official source code via git submodules in the `source/` directory:

- **`@source/clap/`** - Complete clap CLI parser library with examples
- **`@source/inquire/`** - Interactive prompt library with demo applications
- **`@source/ratatui/`** - Rich TUI framework with example applications

### Quick Navigation to Official Examples
- **CLI Examples**: `@source/clap/examples/`
- **Interactive Prompts**: `@source/inquire/examples/`
- **TUI Applications**: `@source/ratatui/examples/`

## 🛠️ Library-Specific Guides

### 1. Clap - Command Line Argument Parsing

**Core Capabilities**
- **Derive macros** for automatic argument parsing with minimal boilerplate
- **Subcommand support** for complex CLI interfaces like git or cargo
- **Argument validation** with custom parsers and validation functions
- **Help generation** with automatic --help and --version support
- **Configuration overrides** through environment variables and config files

**Key Patterns to Explore**
- Basic argument parsing with derive macros: `@source/clap/examples/derive_ref/`
- Advanced subcommand structures: `@source/clap/examples/tutorial_derive/04_04_subcommands.rs`
- Custom validation and parsing: `@source/clap/examples/tutorial_derive/04_02_validate.rs`
- Complex argument relationships: `@source/clap/examples/tutorial_derive/04_03_relations.rs`

**Common Use Cases**
- Simple flag-based tools (similar to `ls`, `grep`)
- Package managers with subcommands (similar to `cargo`, `npm`)
- Configuration-driven applications
- Data processing pipelines with multiple input sources

### 2. Inquire - Interactive Prompts

**Interactive Input Capabilities**
- **Text input** with validation, placeholders, and help messages
- **Single selection** from predefined options with search functionality
- **Multi-selection** with checkbox-style interface
- **Confirmation prompts** for yes/no decisions
- **Custom types** with validation and formatting
- **Form builders** for complex multi-field input flows

**Key Patterns to Explore**
- Basic input types and validation: `@source/inquire/examples/text_simple.rs`, `@source/inquire/examples/select.rs`
- Multi-select and complex selections: `@source/inquire/examples/multiselect.rs`, `@source/inquire/examples/enum_comprehensive.rs`
- Custom validation and types: `@source/inquire/examples/custom_type.rs`, `@source/inquire/examples/date.rs`
- Complex form workflows: `@source/inquire/examples/form.rs`, `@source/inquire/examples/expense_tracker.rs`
- Password and secure input: `@source/inquire/examples/password_simple.rs`, `@source/inquire/examples/password_full_featured.rs`

**Common Use Cases**
- Configuration wizards and setup flows
- Database connection configuration
- API client initialization
- User onboarding sequences
- Data filtering and selection interfaces

### 3. Ratatui - Terminal User Interfaces

**Rich Terminal UI Capabilities**
- **Layout system** with flexible constraints and responsive design
- **Widget library** for common UI components (lists, tables, charts, etc.)
- **Event handling** with keyboard and mouse support
- **Real-time updates** with animation and progress indicators
- **Cross-platform** terminal management with crossterm backend
- **Custom widgets** through extensible widget traits

**Key Patterns to Explore**
- Basic layout and widget usage: `@source/ratatui/examples/apps/advanced-widget-impl/`
- Complex application structure: `@source/ratatui/examples/apps/async-github/`
- Data visualization and charts: `@source/ratatui/examples/apps/chart/`
- Custom drawing and graphics: `@source/ratatui/examples/apps/canvas/`
- Color themes and styling: `@source/ratatui/examples/apps/color-explorer/`
- Constraint-based layouts: `@source/ratatui/examples/apps/constraint-explorer/`
- Real-time data display: `@source/ratatui/examples/apps/calendar-explorer/`

**Common Use Cases**
- System monitoring dashboards
- Log viewers and search interfaces
- Database query tools
- File managers and explorers
- Development IDEs and editors
- Data analysis and visualization tools
- Game interfaces and interactive applications

## 🏗️ Complete Application Patterns

### Application Architecture Overview

**CLI App with Configuration**
- **Structure**: Main CLI with subcommands for different operations
- **Configuration**: JSON/TOML config files with CLI overrides
- **Features**: Logging, error handling, validation
- **Examples**: Study `@source/clap/examples/cargo-example.rs` for patterns

**Interactive CLI with Prompts**
- **Flow**: CLI args → interactive prompts → confirmation → execution
- **Features**: Progressive disclosure, validation, defaults, help text
- **State Management**: Collect information step-by-step with back/forward navigation
- **Examples**: Explore `@source/inquire/examples/form.rs` for complex flows

**Full TUI Application**
- **Architecture**: Event loop with state management and UI rendering
- **Components**: Multiple screens/widgets with navigation between them
- **State**: Application state separated from rendering logic
- **Examples**: Study `@source/ratatui/examples/apps/async-github/` for async patterns

### Integration Patterns

**Library Combination Strategies**
1. **CLI-first**: Start with clap, add inquire for interactive configuration
2. **Progressive Enhancement**: CLI → CLI + prompts → full TUI
3. **Hybrid Apps**: CLI for automation, interactive mode for manual use

**Common Integration Points**
- Configuration validation (clap + inquire)
- Progress indication (clap + ratatui)
- Setup wizards (inquire + ratatui)
- Admin interfaces (clap + ratatui)

### Development Workflow

**Start Simple, Add Complexity**
1. **Phase 1**: Basic CLI with clap
2. **Phase 2**: Add interactive prompts where needed
3. **Phase 3**: Add TUI for complex operations
4. **Phase 4**: Advanced features (async, plugins, etc.)

**Example-Based Learning**
- Study `@source/clap/examples/` for CLI patterns
- Review `@source/inquire/examples/` for interaction flows
- Analyze `@source/ratatui/examples/apps/` for complete applications

### Real-World Application Types

**Development Tools**
- Package managers (cargo, npm-style)
- Build systems and generators
- Code analysis and linting tools
- Database migration tools

**System Administration**
- Log analysis and filtering tools
- Configuration management utilities
- System monitoring dashboards
- Deployment automation tools

**Data Processing**
- ETL pipelines with interactive configuration
- Data validation and cleaning tools
- Report generation utilities
- File processing batch tools

**Interactive Applications**
- Text editors and IDEs
- File managers
- Game interfaces
- Educational tools

Focus on understanding the patterns from the official examples rather than copying specific implementations. The source code provides the most up-to-date and comprehensive examples of best practices.

## 🎯 Best Practices

### CLI Design Principles

1. **Follow POSIX conventions**: Use `-` for short options, `--` for long options
2. **Provide helpful defaults**: Make reasonable default choices
3. **Clear help text**: Explain what each option does
4. **Consistent interface**: Follow established patterns from tools like `git`, `cargo`
5. **Error handling**: Provide clear error messages and exit codes

### Interactive Prompt Guidelines

1. **Progressive disclosure**: Start simple, add complexity as needed
2. **Provide defaults**: Make it easy to accept reasonable choices
3. **Validation**: Give immediate feedback on invalid input
4. **Escape hatches**: Always allow users to exit or skip
5. **Context preservation**: Remember previous answers when possible

### TUI Development Tips

1. **Responsive layouts**: Handle terminal resizing gracefully
2. **Keyboard shortcuts**: Provide intuitive key bindings
3. **Visual hierarchy**: Use colors and borders to organize information
4. **Performance**: Update efficiently, don't block the main thread
5. **Accessibility**: Consider users with different needs

## 🔧 Development Workflow

### Setting Up Your Development Environment

```bash
# Create new Rust project
cargo new my-cli-app
cd my-cli-app

# Add dependencies to Cargo.toml
cargo add clap --features derive
cargo add inquire
cargo add ratatui crossterm

# For development
cargo add --dev anyhow # Better error handling
cargo add --dev pretty_assertions # Better test output
```

### Testing Your CLI

```rust
#[cfg(test)]
mod tests {
    use super::*;
    use clap::Parser;

    #[test]
    fn test_cli_parsing() {
        let cli = Cli::try_parse_from(&["my-app", "--verbose", "build"]).unwrap();
        assert!(matches!(cli.command, Commands::Build { .. }));
        assert_eq!(cli.verbose, 1);
    }

    #[test]
    fn test_help_generation() {
        // This tests that help doesn't panic
        let _ = Cli::try_parse_from(&["my-app", "--help"]);
    }
}
```

### Building for Distribution

```toml
# Cargo.toml release profile
[profile.release]
opt-level = 3
lto = true
codegen-units = 1
panic = "abort"
strip = true
```

```bash
# Build optimized binary
cargo build --release

# Cross-compile for different targets (requires target toolchains)
cargo build --target x86_64-unknown-linux-musl --release
cargo build --target aarch64-apple-darwin --release
```

## 🚀 Deployment and Distribution

### Installation Options

```bash
# Install from crates.io
cargo install my-cli-app

# Install from git repository
cargo install --git https://github.com/user/my-cli-app.git

# Local development installation
cargo install --path .
```

### Distribution with GitHub Actions

```yaml
# .github/workflows/release.yml
name: Release
on:
  push:
    tags:
      - 'v*'

jobs:
  release:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: actions-rs/toolchain@v1
        with:
          toolchain: stable

      - name: Build binary
        run: cargo build --release --target x86_64-unknown-linux-musl

      - name: Upload release asset
        uses: actions/upload-release-asset@v1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          upload_url: ${{ steps.create_release.outputs.upload_url }}
          asset_path: target/x86_64-unknown-linux-musl/release/my-cli-app
          asset_name: my-cli-app-linux
          asset_content_type: application/octet-stream
```

## 📖 Learning Resources

### Official Documentation Paths
- **Clap Guide**: `@source/clap/docs/guide/`
- **Clap Examples**: `@source/clap/examples/`
- **Inquire Examples**: `@source/inquire/examples/`
- **Ratatui Examples**: `@source/ratatui/examples/`

### Community Resources
- [Rust CLI Working Group](https://github.com/rust-cli)
- [Awesome Rust CLI](https://github.com/rust-cli/awesome-rust-cli)
- [Rust TUI Resources](https://github.com/rhysd/awesome-tui-rs)

---

This skill provides comprehensive guidance for Rust CLI and TUI development. Start with the **🚀 Quick Start Library Selection** section to choose the right libraries for your use case, then explore the detailed examples from the official source code included in the `source/` directory.

Overview

This skill provides expert guidance for building Rust command-line interfaces and terminal user interfaces using clap, inquire, and ratatui. It distills official example patterns into practical architectures, integration approaches, and real-world workflows. Use it to design robust CLIs, interactive prompts, and full TUI apps with clear best practices and code-focused guidance.

How this skill works

The skill analyzes official example structures from the clap, inquire, and ratatui libraries and extracts repeatable patterns, integration strategies, and testing/build recipes. It outlines dependency setup, common code idioms (derive macros, prompt flows, layout constraints), and end-to-end application architectures. It also maps concrete example locations so you can inspect and reuse canonical implementations.

When to use it

  • When building a command-line tool with argument parsing and subcommands
  • When adding interactive prompts or setup wizards to a CLI
  • When developing a full terminal user interface with layouts and widgets
  • When you need integration patterns for CLI + interactive prompts + TUI
  • When designing tests, release builds, or cross-compilation workflows

Best practices

  • Follow POSIX-style option naming and provide clear help text
  • Start simple: CLI first, then add prompts, then a TUI if needed
  • Validate input early and provide escape hatches in interactive flows
  • Keep application state separate from rendering logic for TUIs
  • Optimize release builds and add CI cross-compile steps for distribution

Example use cases

  • A package manager or build tool with clap-driven subcommands and configuration files
  • A setup wizard that uses clap for entry and inquire for stepwise configuration
  • A system monitoring dashboard built with ratatui and crossterm for real-time updates
  • A data-processing CLI that offers interactive filtering and a TUI visualization mode
  • A deploy tool that supports scripted automation and an interactive admin TUI

FAQ

Which library should I pick first?

Start with clap for CLI argument parsing. Add inquire when you need interactive prompts. Use ratatui when you require a persistent, widget-based terminal UI.

How do I combine these libraries without overcomplicating the codebase?

Adopt a phased approach: implement the core CLI, factor configuration and state, then incrementally add prompts or a TUI. Keep integration points small and use clear interfaces between parsing, state, and rendering.

How should I test CLIs and TUIs?

Test CLI parsing with clap::Parser helpers in unit tests. For TUIs, separate rendering logic from state and test state transitions; consider integration tests for end-to-end flows.