Some checks failed
CI/CD Pipeline / Test Suite (push) Has been cancelled
CI/CD Pipeline / Security Audit (push) Has been cancelled
CI/CD Pipeline / Build Docker Image (push) Has been cancelled
CI/CD Pipeline / Deploy to Staging (push) Has been cancelled
CI/CD Pipeline / Deploy to Production (push) Has been cancelled
CI/CD Pipeline / Performance Benchmarks (push) Has been cancelled
CI/CD Pipeline / Cleanup (push) Has been cancelled
155 lines
5.5 KiB
Markdown
155 lines
5.5 KiB
Markdown
# Rustelo Template Architecture
|
|
|
|
## 🏗️ Unified Template System
|
|
|
|
After consolidating the template functionality, Rustelo now uses a **layered template architecture** that serves different phases of development:
|
|
|
|
## Template Hierarchy
|
|
|
|
### 1. **Project Templates** (`/rustelo/templates/`)
|
|
**Purpose**: Complete project scaffolding with full tooling setup
|
|
- **When**: Initial project creation (`cargo rustelo new`)
|
|
- **Features**: Variable substitution, workspace configuration, complete tooling
|
|
- **Coverage**: Configs, scripts, docs, Docker, content, styling, build automation
|
|
|
|
**Available Templates**:
|
|
- `basic` - Standard web application (most common)
|
|
- `cms` - Content management focused
|
|
- `minimal` - Lightweight for prototypes
|
|
- `enterprise` - Advanced features for large deployments
|
|
- `saas` - Software-as-a-Service with subscriptions
|
|
- `ai-powered` - AI/ML integration
|
|
- `ecommerce` - Online store functionality
|
|
|
|
### 2. **Crate Templates** (`/rustelo/crates/templates/`)
|
|
**Purpose**: Deep customization via trait-based architecture
|
|
- **When**: Advanced customization needs (`cargo rustelo clone`)
|
|
- **Features**: Trait implementations, local dependencies, standalone operation
|
|
- **Coverage**: Individual crate functionality with full customization capability
|
|
|
|
**Available Templates**:
|
|
- `client-template` - WASM client with trait-based routing
|
|
- `server-template` - Axum server with comprehensive features
|
|
- `core-lib-template` - Core business logic implementations
|
|
- `rustelo-cli` - CLI tool template for project management
|
|
|
|
### 3. **Feature Templates** (`/rustelo/features/*/templates/`)
|
|
**Purpose**: Modular feature configuration
|
|
- **When**: Adding/removing features (`cargo rustelo add/remove`)
|
|
- **Features**: Feature-specific configs, dependencies, tooling additions
|
|
- **Coverage**: Analytics configs, build optimizations, specialized tooling
|
|
|
|
## 🔄 Template Integration Workflow
|
|
|
|
### Phase 1: Project Creation
|
|
```bash
|
|
cargo rustelo new my-project --template basic --features auth,content
|
|
```
|
|
**Result**: Complete project with:
|
|
- Workspace structure from project template
|
|
- Feature-specific configurations from feature templates
|
|
- All tooling (just, CSS, package.json, scripts) properly configured
|
|
|
|
### Phase 2: Crate Customization (Optional)
|
|
```bash
|
|
cargo rustelo clone client --target local-crates
|
|
```
|
|
**Result**: Local crate with:
|
|
- Trait-based implementations you can modify
|
|
- Direct dependencies for standalone development
|
|
- Full control over routing, rendering, content loading
|
|
|
|
### Phase 3: Feature Management
|
|
```bash
|
|
cargo rustelo add analytics # Adds feature templates + dependencies
|
|
cargo rustelo remove auth # Removes cleanly without breaking
|
|
cargo rustelo update # Updates framework, preserves customizations
|
|
```
|
|
|
|
## 🎯 Template Composition Strategy
|
|
|
|
### Variable Substitution System
|
|
**Project Templates** support dynamic configuration:
|
|
```toml
|
|
name = "{{project_name_snake}}-client"
|
|
authors = [{{authors}}]
|
|
features = {{selected_features}}
|
|
```
|
|
|
|
### Layered Override System
|
|
**Precedence Order**: Local > Feature > Template > Framework
|
|
|
|
1. **Framework Layer**: Core rustelo crates (never modified)
|
|
2. **Template Layer**: Default implementations from templates
|
|
3. **Feature Layer**: Feature-specific additions/configurations
|
|
4. **Local Layer**: Project-specific overrides and customizations
|
|
|
|
### Dependency Resolution
|
|
**Project Templates**: Use workspace dependencies
|
|
```toml
|
|
rustelo-web = { workspace = true }
|
|
```
|
|
|
|
**Crate Templates**: Use direct dependencies for customization
|
|
```toml
|
|
rustelo-routing-traits = { path = "../../traits/routing-traits" }
|
|
```
|
|
|
|
## 🧩 Template System Benefits
|
|
|
|
### For New Projects
|
|
- **Single Command**: Complete setup with `cargo rustelo new`
|
|
- **Full Tooling**: Just, CSS, configs, scripts all working
|
|
- **Feature Selection**: Choose capabilities during creation
|
|
|
|
### For Customization
|
|
- **Trait-Based**: Modify behavior without forking framework
|
|
- **Granular Control**: Customize routing, rendering, content loading
|
|
- **Update Safety**: Framework updates don't break customizations
|
|
|
|
### for Framework Integrity
|
|
- **No Forking**: Framework stays in dependencies
|
|
- **Validation**: CLI ensures customizations don't break contracts
|
|
- **Upgrade Path**: Clear migration between framework versions
|
|
|
|
## 🔧 Template Development Guidelines
|
|
|
|
### Adding Project Templates
|
|
1. Create directory in `/rustelo/templates/`
|
|
2. Add configuration to `templates.json`
|
|
3. Include shared components via `assets.includes`
|
|
4. Support variable substitution for dynamic values
|
|
|
|
### Adding Crate Templates
|
|
1. Create directory in `/rustelo/crates/templates/`
|
|
2. Include trait dependencies and implementations
|
|
3. Support standalone operation with direct dependencies
|
|
4. Provide customization examples in README
|
|
|
|
### Adding Feature Templates
|
|
1. Create in `/rustelo/features/{feature}/templates/`
|
|
2. Include feature-specific configurations
|
|
3. Update CLI to handle feature addition/removal
|
|
4. Document feature interactions and dependencies
|
|
|
|
## 🚀 Migration Path
|
|
|
|
### From Old Foundation Templates
|
|
Foundation templates have been **consolidated into the unified system**:
|
|
- Build functionality moved to crate templates
|
|
- Template variety preserved in project templates
|
|
- CLI integration enhanced for seamless workflows
|
|
|
|
### For Existing Projects
|
|
```bash
|
|
# Check current project structure
|
|
cargo rustelo status
|
|
|
|
# Migrate to new template system
|
|
cargo rustelo migrate
|
|
|
|
# Optionally clone crates for customization
|
|
cargo rustelo clone all --target local-crates
|
|
```
|
|
|
|
This unified architecture provides the flexibility for both rapid prototyping and deep customization while maintaining framework integrity and upgrade safety. |