Rwf is a comprehensive framework for building web applications in Rust. Written using the classic MVC pattern (model-view-controller), Rwf comes standard with everything you need to easily build fast and secure web apps.
📘 The documentation is available here.
- ✔ HTTP server
- ✔ User-friendly ORM to build PostgreSQL queries easily
- ✔ Dynamic templates
- ✔ Authentication & built-in user sessions
- ✔ Middleware
- ✔ Background jobs and scheduled jobs
- ✔ Database migrations
- ✔ Built-in REST framework with JSON serialization
- ✔ WebSockets support
- ✔ Static files hosting
- ✔ Tight integration with Hotwired Turbo for building backend-driven SPAs
- ✔ Environment-specific configuration
- ✔ Logging and metrics
- ✔ CLI
- ✔ WSGI server for migrating from Django/Flask apps
- ✔ Rack server for migrating from Rails
To add Rwf to your stack, create a Rust binary application and add rwf
and tokio
to your dependencies:
cargo add rwf
cargo add tokio@1 --features full
Building an app is then as simple as:
use rwf::prelude::*;
use rwf::http::Server;
#[derive(Default)]
struct IndexController;
#[async_trait]
impl Controller for IndexController {
async fn handle(&self, request: &Request) -> Result<Response, Error> {
Ok(Response::new().html("<h1>Hey Rwf!</h1>"))
}
}
#[tokio::main]
async fn main() {
Server::new(vec![
route!("/" => IndexController),
])
.launch("0.0.0.0:8000")
.await
.unwrap();
}
See examples for common use cases.
Rwf is in early development and not ready for production. Many features and documentation are incomplete. Contributions are welcome. Please see CONTRIBUTING for guidelines, ARCHITECTURE for a tour of the code, and ROADMAP for a non-exhaustive list of desired features.