# Tailwind Rust Library Specification ## Addressing Current Ecosystem Gaps ### 🎯 **Executive Summary** The current Tailwind integration with Rust web frameworks (Leptos, Yew, Dioxus) suffers from significant limitations that create poor developer experience and unreliable styling. This document outlines the defects and proposes a comprehensive solution. ### 🚨 **Current Defects & Pain Points** #### 1. **Class Detection & Scanning Issues** - **Problem**: Tailwind's content scanning doesn't reliably detect classes in Rust `.rs` files - **Impact**: Classes used in components aren't included in final CSS bundle - **Example**: `class="bg-green-600 text-white"` renders as invisible text - **Root Cause**: Tailwind's regex-based scanning doesn't understand Rust syntax #### 2. **Build Process Fragmentation** - **Problem**: CSS and WASM builds happen separately with no coordination - **Impact**: Classes used in WASM components missing from CSS - **Example**: Component renders but styles don't apply - **Root Cause**: No integration between Rust build tools and Tailwind #### 3. **Dynamic Styling Limitations** - **Problem**: Can't generate classes dynamically or conditionally - **Impact**: Limited component flexibility and reusability - **Example**: `format!("text-{}", color)` doesn't work - **Root Cause**: Static analysis can't handle runtime class generation #### 4. **Performance Issues** - **Problem**: Large CSS bundles and slow runtime class application - **Impact**: Poor performance and large bundle sizes - **Example**: 200KB+ CSS files for simple components - **Root Cause**: No tree-shaking or optimization for Rust context #### 5. **Developer Experience Problems** - **Problem**: No type safety, autocomplete, or compile-time validation - **Impact**: Runtime errors and poor IDE support - **Example**: Typos in class names only discovered at runtime - **Root Cause**: No Rust-native tooling integration ### 🎯 **Proposed Solution: `tailwind-rs` Library** #### **Core Architecture** ```rust // Type-safe class generation use tailwind_rs::*; #[component] pub fn Button(variant: ButtonVariant) -> impl IntoView { let classes = classes! { base: "px-4 py-2 rounded-md font-medium transition-colors", variant: match variant { ButtonVariant::Primary => "bg-blue-600 text-white hover:bg-blue-700", ButtonVariant::Secondary => "bg-gray-200 text-gray-900 hover:bg-gray-300", ButtonVariant::Danger => "bg-red-600 text-white hover:bg-red-700", }, responsive: "sm:text-sm md:text-base lg:text-lg", state: "focus:outline-none focus:ring-2 focus:ring-blue-500", }; view! { } } ``` #### **Key Features** 1. **🔍 Intelligent Class Detection** - Rust AST parsing for accurate class detection - Support for dynamic class generation - Compile-time validation of class names 2. **⚡ Performance Optimization** - Tree-shaking unused classes - CSS-in-JS approach for minimal bundle size - Runtime class caching and optimization 3. **🛡️ Type Safety** - Compile-time class validation - Autocomplete support in IDEs - Error messages for invalid classes 4. **🎨 Dynamic Styling** - Runtime class generation - Conditional styling support - Theme and variant system 5. **🔧 Build Integration** - Seamless integration with Cargo - Support for multiple Rust web frameworks - Hot reloading during development ### 📋 **Detailed Feature Specifications** #### **1. Class Detection Engine** ```rust // Current (Broken)