Rustelo/docs/architecture/template-architecture.md

155 lines
5.5 KiB
Markdown
Raw Normal View History

2026-02-08 20:12:31 +00:00
# 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.