Feature highlights
- A lightweight, solid and well extensible core.
- Supports HTTP/1.x and HTTP/2.0 protocols.
- Full streaming.
- Highly extensible middleware system.
- Based on
hyper
and async-std
, runtime-independent, you can chose any async runtime you like.
- Many useful extensions and middlewares.
- Transparent content compression (br, gzip, deflate, zstd).
- Configurable and nestable router.
- Named uri parameters(query and router parameter).
- Cookie and jwt support.
- Integration with serde and askama. JSON, urlencoded form, html template support.
- Other middlewares(logger, CORS .etc).
- Works on stable Rust.
Next step
- Streaming multipart form support.
- ORM integration.
- Websocket support.
- HTTPS support.
Get start
[dependencies]
roa = "0.3"
async-std = { version = "1.4", features = ["attributes"] }
use roa::core::App;
use roa::preload::*;
use std::error::Error as StdError;
#[async_std::main]
async fn main() -> Result<(), Box<dyn StdError>> {
let mut app = App::new(());
app.end(|ctx| async move {
ctx.write_text("Hello, World").await
});
app.listen("127.0.0.1:8000", |addr| {
println!("Server is listening on {}", addr)
})?
.await?;
Ok(())
}