โจ Features
- ๐งญ Intuitive routing with
route!(...)androute_any!(...)macros - ๐งต Templating with
render!,{% include %}, and{% extends %}support - โก Fully async, powered by
async_tiny - ๐ LiveReload support in development mode
- ๐ Static file serving with zero config
- ๐ Global middleware support via
App::use_middleware() - ๐ง Minimal boilerplate via
velto::prelude - ๐งช Built-in testing with
TestRequest - ๐ First-class CLI support via
velto-cli
๐ฆ Installation
Add Velto to your Cargo.toml:
[]
= "1.9.0"
Or use velto-cli to scaffold a new project instantly:
๐ Quick Start
use *;
use logger; // Built-in middleware
async
๐ Middleware
Velto supports global middleware functions that run before and/or after route handlers.
Use App::use_middleware() to register middleware like logging, authentication, or header injection.
Example: Logger Middleware
- Middleware is synchronous and composable
- Multiple middleware are executed in registration order
- Built-in
loggermiddleware is available invelto::middleware
๐ LiveReload
Velto automatically watches your static/ and templates/ directories in dev mode.
When a file changes, connected browsers reload instantly via WebSocket.
No setup required. Just call:
app.enable_dev_mode;
๐งช Testing
Velto includes a built-in TestRequest type for simulating requests in unit tests:
No external test harness required โ just write Rust tests and run cargo test.
๐งฐ Project Structure
Velto is organized into modular components for clarity and maintainability:
velto/
โโโ src/
โ โโโ app.rs # Core application logic
โ โโโ dev.rs # Dev mode toggles and helpers
โ โโโ form.rs # Form data parsing
โ โโโ http_method.rs # HTTP method utilities
โ โโโ macros.rs # Macros for render! and route!
โ โโโ middleware.rs # Middleware system and built-in examples
โ โโโ prelude.rs # Public API surface
โ โโโ reload.rs # LiveReload WebSocket + file watcher
โ โโโ response.rs # HTTP response utilities including redirect helpers
โ โโโ router.rs # Routing and handler dispatch
โ โโโ template.rs # Templating engine with include/inheritance
โ โโโ test.rs # TestRequest and internal test harness
โ โโโ util.rs # Utility functions (e.g., MIME types)
โ โโโ lib.rs # Entry point
โ Why Velto
Velto is for developers who want:
- A fast, async-native web framework without the complexity of full-stack giants
- Clean routing and templating without ceremony
- Instant LiveReload for a smooth development loop
- A modular codebase that grows with your project
- A framework that feels like Rust โ not like a port of something else
Whether you're building a personal site, a microservice, or a dev tool, Velto gives you just enough structure to stay productive โ and just enough freedom to stay creative.
๐ Migration from 0.x
Velto 1.0.0 introduced async support and LiveReload, but kept the public API familiar. Here's what changed:
| Old (0.x) | New (1.0.0) |
|---|---|
fn main() |
#[tokio::main] async fn main() |
Response<Cursor<Vec<u8>>> |
Response (no generics) |
app.run(...) |
app.run(...).await |
| No LiveReload | app.enable_dev_mode() |
Most route handlers and macros (route!, render!) remain unchanged.
Just update your main() function and remove Cursor<Vec<u8>> from response types.
๐ License
MIT โ free to use, modify, and distribute.
๐ฌ Contributing
Velto is evolving rapidly. If you have ideas, feedback, or want to help shape its future, open an issue or submit a PR.
We welcome clean code, thoughtful design, and good vibes.