# Features Overview

<div align="center">
  <img src="../logos/rustelo_dev-logo-h.svg" alt="RUSTELO" width="300" />
</div>

Rustelo is built around a modular feature system that allows you to enable only the functionality you need. This approach keeps your application lean, reduces compile times, and ensures you're not carrying unnecessary dependencies.

## Philosophy

The feature system is designed with these principles in mind:

- **🎯 Opt-in by Design**: Start minimal and add features as needed
- **🔧 Zero Configuration**: Features work out of the box with sensible defaults
- **📦 Minimal Dependencies**: Each feature only includes what it absolutely needs
- **🔄 Composable**: Features work together seamlessly
- **🛡️ Secure by Default**: Security considerations built into every feature

## Feature Categories

### Core Features (Always Available)

These features are always available regardless of your configuration:

- **Static File Serving**: Serve static assets (CSS, JS, images)
- **Routing**: Client-side and server-side routing
- **CSRF Protection**: Cross-site request forgery protection
- **Security Headers**: Basic security headers
- **Rate Limiting**: Basic rate limiting
- **Health Checks**: System health monitoring endpoints
- **Logging**: Structured logging with tracing

### Optional Features

#### 🔐 Authentication (`auth`)
**Default: Enabled**

Complete user authentication and authorization system.

**What it provides:**
- JWT token-based authentication
- OAuth2 integration (Google, GitHub, etc.)
- Two-factor authentication (2FA/TOTP)
- Password hashing with Argon2
- Session management
- User registration and login
- Password reset functionality
- Role-based access control (RBAC)

**Use cases:**
- User portals and dashboards
- SaaS applications
- Protected content areas
- Multi-tenant applications

**Dependencies:**
- `jsonwebtoken` - JWT handling
- `argon2` - Secure password hashing
- `oauth2` - OAuth2 client implementation
- `totp-rs` - Two-factor authentication
- `qrcode` - QR code generation
- `tower-sessions` - Session management

#### 📄 Content Management (`content-db`)
**Default: Enabled**

Database-driven content management with Markdown support.

**What it provides:**
- Markdown content rendering
- Syntax highlighting for code blocks
- YAML frontmatter support
- Content caching system
- Dynamic content loading
- Content versioning
- SEO-friendly URLs
- Full-text search capabilities

**Use cases:**
- Blogs and news sites
- Documentation sites
- Content management systems
- Marketing websites
- Knowledge bases

**Dependencies:**
- `pulldown-cmark` - Markdown parsing
- `syntect` - Syntax highlighting
- `serde_yaml` - YAML frontmatter
- `sqlx` - Database access

#### 🔒 TLS Support (`tls`)
**Default: Disabled**

HTTPS/TLS encryption for secure connections.

**What it provides:**
- HTTPS server support
- TLS certificate management
- Automatic HTTP to HTTPS redirects
- SSL/TLS configuration
- Certificate validation
- Support for Let's Encrypt certificates

**Use cases:**
- Production deployments
- Security-sensitive applications
- Compliance requirements
- E-commerce applications

**Dependencies:**
- `axum-server` - TLS-enabled server
- `rustls` - Pure Rust TLS implementation
- `rustls-pemfile` - Certificate file handling

#### 📧 Email System (`email`)
**Default: Enabled**

Comprehensive email functionality with multiple providers.

**What it provides:**
- Multiple email providers (SMTP, SendGrid, AWS SES)
- HTML and text email templates
- Contact form handling
- Email verification
- Password reset emails
- Notification system
- Email queue management
- Bounce handling

**Use cases:**
- Contact forms
- User notifications
- Marketing emails
- Transactional emails
- Newsletter systems

**Dependencies:**
- `lettre` - Email sending
- `handlebars` - Email templating
- `urlencoding` - URL encoding
- `async-trait` - Async trait support

## Feature Combinations

### Common Combinations

#### Minimal Static Site
```bash
cargo build --no-default-features
```
**Perfect for:**
- Marketing websites
- Landing pages
- Documentation sites
- Portfolio sites

**Features included:**
- Static file serving
- Basic routing
- Security headers

#### Secure Static Site
```bash
cargo build --no-default-features --features "tls"
```
**Perfect for:**
- Production static sites
- Security-conscious deployments
- Compliance requirements

**Features included:**
- All minimal features
- HTTPS/TLS support

#### Authentication-Only App
```bash
cargo build --no-default-features --features "auth"
```
**Perfect for:**
- User portals
- Dashboard applications
- API services with authentication

**Features included:**
- User management
- JWT authentication
- OAuth2 providers
- Session management

#### Content Management System
```bash
cargo build --no-default-features --features "content-db"
```
**Perfect for:**
- Blogs
- News sites
- Documentation platforms
- Knowledge bases

**Features included:**
- Markdown rendering
- Database content storage
- Content caching

#### Communication Site
```bash
cargo build --no-default-features --features "email"
```
**Perfect for:**
- Contact pages
- Feedback forms
- Newsletter signups
- Notification systems

**Features included:**
- Email sending
- Form handling
- Template system

#### Full-Featured Application
```bash
cargo build --features "auth,content-db,email"
# or simply: cargo build (uses defaults)
```
**Perfect for:**
- Complete web applications
- SaaS platforms
- User-generated content sites
- E-commerce applications

**Features included:**
- Complete user management
- Content management
- Email system
- All security features

#### Production-Ready
```bash
cargo build --release --features "tls,auth,content-db,email"
```
**Perfect for:**
- Production deployments
- Enterprise applications
- High-security requirements

**Features included:**
- All features enabled
- HTTPS/TLS security
- Optimized for performance

## Configuration Matrix

| Feature | Database Required | Email Required | TLS Recommended |
|---------|------------------|----------------|-----------------|
| Static Site | ❌ | ❌ | ✅ (Production) |
| Auth | ✅ | ✅ (Password Reset) | ✅ |
| Content-DB | ✅ | ❌ | ✅ (Production) |
| Email | ❌ | ✅ | ✅ (Production) |
| TLS | ❌ | ❌ | N/A |

## Performance Impact

### Build Times
- **Minimal**: ~30 seconds
- **Auth Only**: ~45 seconds
- **Content-DB Only**: ~40 seconds
- **Full Featured**: ~60 seconds

### Binary Size
- **Minimal**: ~2MB
- **Auth Only**: ~5MB
- **Content-DB Only**: ~4MB
- **Full Featured**: ~8MB

### Memory Usage
- **Minimal**: ~10MB RAM
- **Auth Only**: ~25MB RAM
- **Content-DB Only**: ~20MB RAM
- **Full Featured**: ~40MB RAM

### Cold Start Time
- **Minimal**: ~50ms
- **Auth Only**: ~200ms
- **Content-DB Only**: ~150ms
- **Full Featured**: ~300ms

## Feature Dependencies

### Database Features
Features that require database access:
- `auth` - User accounts, sessions, OAuth tokens
- `content-db` - Content storage, caching, search

### Email Features
Features that benefit from email:
- `auth` - Password reset, email verification
- `email` - Contact forms, notifications

### Security Features
Features that enhance security:
- `tls` - HTTPS encryption
- `auth` - User authentication
- All features include basic security (CSRF, rate limiting, headers)

## Development vs Production

### Development Recommendations
```bash
# Fast development cycle
cargo build --features "auth,content-db,email"

# With hot reloading
cargo leptos serve --features "auth,content-db,email"
```

### Production Recommendations
```bash
# Secure production build
cargo build --release --features "tls,auth,content-db,email"

# Minimal production (static sites)
cargo build --release --no-default-features --features "tls"
```

## Migration Between Features

### Adding Features
1. Update feature flags in build command
2. Add required environment variables
3. Run database migrations (if applicable)
4. Update frontend components
5. Test thoroughly

### Removing Features
1. Export/backup relevant data
2. Update feature flags
3. Remove unused environment variables
4. Clean up unused code
5. Test reduced functionality

## Feature Roadmap

### Planned Features
- **WebSocket Support**: Real-time communication
- **File Upload**: File management system
- **Admin Dashboard**: Administrative interface
- **API Documentation**: Automatic API docs
- **Metrics & Monitoring**: Application metrics
- **Search Engine**: Full-text search
- **Caching Layer**: Redis integration
- **Message Queue**: Background job processing

### Experimental Features
- **GraphQL API**: Alternative to REST
- **Server-Side Events**: Real-time updates
- **Multi-tenancy**: Tenant isolation
- **Audit Logging**: Comprehensive audit trails

## Best Practices

### Feature Selection
1. **Start Minimal**: Begin with only essential features
2. **Add Gradually**: Introduce features as requirements evolve
3. **Consider Dependencies**: Understand feature interactions
4. **Test Combinations**: Verify feature combinations work together
5. **Document Choices**: Record why features were selected

### Configuration
1. **Environment-Specific**: Use different features per environment
2. **Feature Flags**: Use runtime feature flags for A/B testing
3. **Graceful Degradation**: Handle missing features gracefully
4. **Monitoring**: Monitor feature usage and performance

### Development
1. **Feature Branches**: Develop features in isolation
2. **Integration Testing**: Test feature combinations
3. **Documentation**: Document feature usage
4. **Performance Testing**: Measure feature impact

## Next Steps

Ready to dive deeper into specific features? Check out:

- **[Authentication System](./authentication.md)** - Complete user management
- **[Content Management](./content-management.md)** - Database-driven content
- **[TLS Support](./tls.md)** - HTTPS configuration
- **[Email System](./email.md)** - Communication features
- **[Feature Combinations](./combinations.md)** - Detailed combination guide

Or explore the technical details:
- **[Database Overview](../database/overview.md)** - Database configuration
- **[Security Overview](../security/overview.md)** - Security features
- **[Performance Overview](../performance/overview.md)** - Performance considerations
