Roa is an async web framework inspired by koajs, lightweight but powerful.

Stable Test codecov wiki Rust Docs Crate version Download Version License: MIT

Examples | Guide | Cookbook

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, runtime-independent, you can chose async runtime as 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.
    • ORM integration (with diesel).
    • HTTPS support.
    • WebSocket support.
    • GraphQL support(based on juniper).
    • Asynchronous multipart form support.
    • Other middlewares(logger, CORS .etc).
  • Works on stable Rust.

Get start

# Cargo.toml

roa = "0.5.0-beta"
async-std = { version = "1.5", features = ["attributes"] }
use roa::App;
use roa::preload::*;
use std::error::Error as StdError;

async fn main() -> Result<(), Box<dyn StdError>> {
    let mut app = App::new(());
    app.end(|mut ctx| async move {
        ctx.resp_mut().write("Hello, World");
    app.listen("", |addr| {
        println!("Server is listening on {}", addr)