244 lines
8.3 KiB
Markdown
244 lines
8.3 KiB
Markdown
|
|
# Axum-Leptos Full-Stack Application
|
||
|
|
|
||
|
|
_A "2025" version of the official [Axum-Leptos template](https://github.com/leptos-rs/leptos/tree/main/examples/tailwind_axum)_
|
||
|
|
|
||
|
|
## Tech Stack
|
||
|
|
|
||
|
|
- **Frontend**:
|
||
|
|
- [Leptos](https://leptos.dev/) - A modern Rust web framework for building reactive web applications
|
||
|
|
- [UnoCSS](https://unocss.dev/) - On-demand atomic CSS engine for fast styling
|
||
|
|
- [DaisyUI](https://daisyui.com/) - Semantic component library for beautiful UI components
|
||
|
|
- WebAssembly - For running Rust code in the browser
|
||
|
|
- **State Management** - Global application state with persistence
|
||
|
|
- **Theme System** - Dynamic light/dark/auto themes with system detection
|
||
|
|
|
||
|
|
- **Backend**:
|
||
|
|
- [Axum](https://github.com/tokio-rs/axum) - Ergonomic and modular web framework built with Tokio, Tower, and Hyper
|
||
|
|
- [Tokio](https://tokio.rs/) - Asynchronous runtime for Rust
|
||
|
|
- [Tower](https://github.com/tower-rs/tower) - Tower is a library of modular and reusable components for building robust networking clients and servers.
|
||
|
|
- [Tower-http](https://github.com/tower-rs/tower-http) - HTTP specific Tower utilities
|
||
|
|
- **Security Middleware** - CSRF protection, rate limiting, security headers
|
||
|
|
- **Input Sanitization** - XSS prevention and malicious input filtering
|
||
|
|
|
||
|
|
- **Security & Configuration**:
|
||
|
|
- [Rustls](https://github.com/rustls/rustls) - Modern TLS library for secure HTTPS connections
|
||
|
|
- [dotenvy](https://github.com/allan2/dotenvy) - Environment variable loading from .env files
|
||
|
|
|
||
|
|
- **Testing**:
|
||
|
|
- [Playwright](https://playwright.dev/) - End-to-end testing framework
|
||
|
|
|
||
|
|
- **Other**:
|
||
|
|
- [reqwasm](https://github.com/koute/reqwasm) - A simple HTTP client for WebAssembly
|
||
|
|
- [serde](https://serde.rs/) - A data serialization framework for Rust
|
||
|
|
- [serde_json](https://serde.rs/json.html) - A JSON serialization/deserialization library for Rust
|
||
|
|
- [cargo-leptos](https://github.com/leptos-rs/cargo-leptos) - Build tool for Leptos applications
|
||
|
|
|
||
|
|
## Getting Started
|
||
|
|
|
||
|
|
### Prerequisites
|
||
|
|
|
||
|
|
1. Install Rust (nightly):
|
||
|
|
```bash
|
||
|
|
rustup toolchain install nightly --allow-downgrade
|
||
|
|
rustup target add wasm32-unknown-unknown
|
||
|
|
```
|
||
|
|
|
||
|
|
2. Install cargo-leptos:
|
||
|
|
```bash
|
||
|
|
cargo install cargo-leptos --locked
|
||
|
|
```
|
||
|
|
|
||
|
|
3. Install Node.js dependencies (pnpm recommended):
|
||
|
|
```bash
|
||
|
|
pnpm install
|
||
|
|
# or
|
||
|
|
npm install
|
||
|
|
```
|
||
|
|
|
||
|
|
### Quick Start
|
||
|
|
|
||
|
|
1. **Automated setup (recommended):**
|
||
|
|
```bash
|
||
|
|
./scripts/setup_dev.sh
|
||
|
|
```
|
||
|
|
This script will:
|
||
|
|
- Create your `.env` file from the template
|
||
|
|
- Install dependencies
|
||
|
|
- Build CSS
|
||
|
|
- Optionally generate TLS certificates for HTTPS development
|
||
|
|
|
||
|
|
2. **Manual setup:**
|
||
|
|
```bash
|
||
|
|
# Copy environment configuration
|
||
|
|
cp .env.example .env
|
||
|
|
|
||
|
|
# Install dependencies
|
||
|
|
pnpm install
|
||
|
|
|
||
|
|
# Build CSS
|
||
|
|
pnpm run build:css
|
||
|
|
|
||
|
|
# Start development server
|
||
|
|
cargo leptos watch
|
||
|
|
```
|
||
|
|
|
||
|
|
### Development
|
||
|
|
|
||
|
|
1. **Start the development server:**
|
||
|
|
```bash
|
||
|
|
cargo leptos watch
|
||
|
|
```
|
||
|
|
This will start your application at `127.0.0.1:3030` (configurable via `.env`)
|
||
|
|
|
||
|
|
2. **Watch for CSS changes (separate terminal):**
|
||
|
|
```bash
|
||
|
|
pnpm run dev
|
||
|
|
```
|
||
|
|
|
||
|
|
3. **For production build:**
|
||
|
|
```bash
|
||
|
|
cargo leptos build --release
|
||
|
|
```
|
||
|
|
|
||
|
|
### Configuration
|
||
|
|
|
||
|
|
The application uses environment variables for configuration. Key options:
|
||
|
|
|
||
|
|
- **HTTP (default):** `SERVER_PROTOCOL=http`
|
||
|
|
- **HTTPS:** `SERVER_PROTOCOL=https` (requires TLS certificates)
|
||
|
|
- **Host/Port:** `SERVER_HOST=127.0.0.1` `SERVER_PORT=3030`
|
||
|
|
- **Environment:** `ENVIRONMENT=DEV` or `ENVIRONMENT=PROD`
|
||
|
|
|
||
|
|
See [CONFIG.md](CONFIG.md) for complete configuration documentation.
|
||
|
|
|
||
|
|
### HTTPS Development
|
||
|
|
|
||
|
|
To enable HTTPS for local development:
|
||
|
|
|
||
|
|
1. Generate self-signed certificates:
|
||
|
|
```bash
|
||
|
|
./scripts/generate_certs.sh
|
||
|
|
```
|
||
|
|
|
||
|
|
2. Update `.env`:
|
||
|
|
```env
|
||
|
|
SERVER_PROTOCOL=https
|
||
|
|
```
|
||
|
|
|
||
|
|
3. Access your app at `https://127.0.0.1:3030`
|
||
|
|
|
||
|
|
### Testing
|
||
|
|
|
||
|
|
Run end-to-end tests:
|
||
|
|
```bash
|
||
|
|
cargo leptos end-to-end
|
||
|
|
```
|
||
|
|
|
||
|
|
## Project Structure
|
||
|
|
|
||
|
|
- `src/`
|
||
|
|
- `main.rs` - Server entry point with Axum configuration
|
||
|
|
- `lib.rs` - Shared code and WASM hydration setup
|
||
|
|
- `app.rs` - Main application component and routing setup
|
||
|
|
- `components/` - Reusable UI components
|
||
|
|
- `Counter.rs` - Example counter component
|
||
|
|
- `mod.rs` - Components module definitions
|
||
|
|
- `pages/` - Application pages/routes
|
||
|
|
- `Home.rs` - Homepage component
|
||
|
|
- `About.rs` - About page with API integration
|
||
|
|
- `mod.rs` - Pages module definitions
|
||
|
|
- `server/` - Backend server code
|
||
|
|
- `handlers.rs` - API endpoint handlers
|
||
|
|
- `routes.rs` - API route definitions
|
||
|
|
- `mod.rs` - Server module setup
|
||
|
|
- `style/` - CSS and TailwindCSS files
|
||
|
|
- `end2end/` - End-to-end tests with Playwright
|
||
|
|
- `tests/` - Test specifications
|
||
|
|
- `playwright.config.ts` - Playwright configuration
|
||
|
|
- `public/` - Static assets
|
||
|
|
- `Cargo.toml` - Rust dependencies and build configuration
|
||
|
|
- `package.json` - Node.js dependencies
|
||
|
|
- `tailwind.config.js` - TailwindCSS configuration
|
||
|
|
|
||
|
|
## Features
|
||
|
|
|
||
|
|
### 🚀 Core Features
|
||
|
|
- **Full-stack Rust development** with shared types
|
||
|
|
- **Server-side rendering (SSR)** with hydration
|
||
|
|
- **Client-side routing** with Leptos Router
|
||
|
|
- **Modern UI components** with DaisyUI integration
|
||
|
|
- **Fast CSS** with UnoCSS atomic engine
|
||
|
|
- **Flexible configuration** with environment variables
|
||
|
|
- **TLS/HTTPS support** for secure development and production
|
||
|
|
- **End-to-end testing** setup with Playwright
|
||
|
|
- **Development hot-reload** for rapid iteration
|
||
|
|
|
||
|
|
### 🎨 UI/UX Enhancements
|
||
|
|
- **Dynamic Theme System** - Light/Dark/Auto themes with system detection
|
||
|
|
- **Toast Notifications** - Rich notifications with auto-dismiss and persistence
|
||
|
|
- **Form Validation** - Real-time validation with comprehensive error handling
|
||
|
|
- **Loading States** - Smart loading management and skeleton screens
|
||
|
|
- **Responsive Design** - Mobile-first approach with touch-friendly interactions
|
||
|
|
|
||
|
|
### 📊 State Management
|
||
|
|
- **Global State** - Centralized application state with automatic persistence
|
||
|
|
- **User Management** - Authentication, roles, and preferences
|
||
|
|
- **Cache System** - TTL-based caching with automatic cleanup
|
||
|
|
- **Theme Persistence** - Theme preferences saved across sessions
|
||
|
|
- **Form State** - Advanced form handling with validation
|
||
|
|
|
||
|
|
### 🔒 Security Features
|
||
|
|
- **CSRF Protection** - Secure token-based protection against cross-site request forgery
|
||
|
|
- **Rate Limiting** - Per-IP and global rate limiting with burst protection
|
||
|
|
- **Security Headers** - Comprehensive HTTP security headers (HSTS, CSP, etc.)
|
||
|
|
- **Input Sanitization** - XSS prevention and malicious input filtering
|
||
|
|
- **Content Security Policy** - Environment-specific CSP with strict production rules
|
||
|
|
|
||
|
|
## Documentation
|
||
|
|
|
||
|
|
- [CONFIG.md](CONFIG.md) - Complete configuration guide
|
||
|
|
- [DAISYUI_INTEGRATION.md](DAISYUI_INTEGRATION.md) - UI component usage guide
|
||
|
|
- [scripts/setup_dev.sh](scripts/setup_dev.sh) - Automated development setup
|
||
|
|
- [scripts/generate_certs.sh](scripts/generate_certs.sh) - TLS certificate generation
|
||
|
|
|
||
|
|
## Example Pages
|
||
|
|
|
||
|
|
- **Home:** `/` - Landing page with hero section
|
||
|
|
- **About:** `/about` - About page with API integration
|
||
|
|
- **DaisyUI Demo:** `/daisyui` - Comprehensive UI component showcase
|
||
|
|
- **Features Demo:** `/features-demo` - **NEW!** Interactive demonstration of all new features:
|
||
|
|
- State management with live examples
|
||
|
|
- Theme system with real-time switching
|
||
|
|
- Toast notifications showcase
|
||
|
|
- Form validation demonstration
|
||
|
|
- Security features overview
|
||
|
|
|
||
|
|
## 🆕 New Features Overview
|
||
|
|
|
||
|
|
This template now includes three major feature enhancements:
|
||
|
|
|
||
|
|
### 1. **State Management System**
|
||
|
|
- Global application state with automatic localStorage persistence
|
||
|
|
- Modular state architecture (app, user, theme, toast, form)
|
||
|
|
- Type-safe state access with Leptos signals
|
||
|
|
- Cache management with TTL and cleanup
|
||
|
|
|
||
|
|
### 2. **UI/UX Improvements**
|
||
|
|
- **Theme System**: Dynamic light/dark/auto themes with system preference detection
|
||
|
|
- **Toast Notifications**: Rich notification system with multiple types and auto-dismiss
|
||
|
|
- **Form Validation**: Real-time validation with comprehensive error handling
|
||
|
|
- **Loading States**: Smart loading management for better UX
|
||
|
|
|
||
|
|
### 3. **Security Enhancements**
|
||
|
|
- **CSRF Protection**: Token-based protection with automatic header injection
|
||
|
|
- **Rate Limiting**: Multi-level rate limiting (per-IP + global) with burst protection
|
||
|
|
- **Security Headers**: HSTS, CSP, and other security headers
|
||
|
|
- **Input Sanitization**: XSS prevention and malicious input filtering
|
||
|
|
|
||
|
|
For detailed implementation information, see [FEATURES_IMPLEMENTATION_SUMMARY.md](FEATURES_IMPLEMENTATION_SUMMARY.md).
|
||
|
|
|
||
|
|
## License
|
||
|
|
|
||
|
|
This project is released under the Unlicense. Feel free to use it as a starting point for your own applications.
|
||
|
|
|