| Crates.io | ripress |
| lib.rs | ripress |
| version | 2.3.3 |
| created_at | 2025-03-11 08:07:45.881742+00 |
| updated_at | 2026-01-20 08:32:21.54513+00 |
| description | An Express.js-inspired web framework for Rust |
| homepage | |
| repository | https://github.com/guru901/ripress |
| max_upload_size | |
| id | 1587672 |
| size | 919,046 |
Please star the repo if you like it, so that I know someone is using it.
Ripress is an Express.js-inspired web framework for Rust that combines the familiar developer experience of Express with the performance and safety of Rust. Built on top of Hyper and Tokio, Ripress provides a simple and intuitive API for building fast, reliable web applications.
🚀 Performance
💡 Developer Experience
âš¡ Modern Foundation
App::enable_http2 and App::http2_config)
Ripress is a web framework inspired by Express.js, designed to bring the familiar and intuitive Express.js developer experience to the Rust ecosystem while maintaining Rust's performance and safety guarantees.
App and Routertokiowynd crate (with "with-wynd" feature)Ripress includes several optional features that can be enabled to reduce compile time and binary size:
compression - Enables response compression middleware (gzip/deflate) using flate2file-upload - Enables file upload middleware for handling multipart form data using uuidlogger - Enables request/response logging middleware using tracingwith-wynd - Enables WebSocket support via the wynd crateTo enable features, add them to your Cargo.toml:
[dependencies]
ripress = { version = "*", features = ["compression", "file-upload", "logger", "with-wynd"] }
The easiest way to get started is with the HexStack CLI.
HexStack is a project scaffolding tool (similar to create-t3-app) that lets you spin up new Rust web projects in seconds. With just a few selections, you can choose:
Backend: Ripress, Wynd, or both
Frontend: React, Svelte, or none
Extras: Out-of-the-box HTTP + WebSocket support
This means you can quickly bootstrap a full-stack project (Rust backend + modern frontend) or just a backend-only Ripress/Wynd project.
To create a new project with Ripress:
hexstack new my-project --template ripress
Alternatively, you can create a new project manually by running the following commands:
cargo new my-project
cd my-project
cargo add ripress
cargo add tokio --features macros,rt-multi-thread
To enable optional features (compression, file upload, logger, WebSocket support):
cargo add ripress --features compression,file-upload,logger,with-wynd
This will create a new project with Ripress and all optional features enabled.
use ripress::{
app::{App, Http2Config},
context::{HttpRequest, HttpResponse},
types::RouterFns,
};
#[tokio::main]
async fn main() {
let mut app = App::new();
app.get("/", handler);
// Optional: disable HTTP/2 and serve only HTTP/1.1
// app.enable_http2(false);
// Optional: advanced HTTP/2 tuning
// app.http2_config(Http2Config {
// http2_only: false,
// max_concurrent_streams: Some(100),
// ..Default::default()
// });
app.listen(3000, || {
println!("Server is running on port 3000");
})
.await;
}
async fn handler(_req: HttpRequest, res: HttpResponse) -> HttpResponse {
res.status(200)
.json(json!({"message": "Welcome to Ripress!"}))
}
Note: This example requires the with-wynd feature to be enabled. See Optional Features for details.
use ripress::{app::App, types::RouterFns};
use wynd::wynd::Wynd;
#[tokio::main]
async fn main() {
let mut app = App::new();
let mut wynd = Wynd::new();
// HTTP route
app.get("/", |_, res| async move {
res.ok().text("Hello, World!")
});
// WebSocket connection handler
wynd.on_connection(|conn| async move {
conn.on_text(|event, _| async move {
println!("Received: {}", event.data);
});
});
// Mount WebSocket at /ws path
app.use_wynd("/ws", wynd.handler());
app.listen(3000, || {
println!("Server running on http://localhost:3000");
println!("WebSocket available at ws://localhost:3000/ws");
})
.await;
}
View more basic examples in Examples dir. View full blown code examples here.
Note: This example requires the file-upload feature to be enabled. See Optional Features for details.
use ripress::{
app::App,
middlewares::{file_upload::file_upload},
types::RouterFns,
};
#[tokio::main]
async fn main() {
let mut app = App::new();
// Add middleware (pre and post)
app.use_cors(None) // Pre-middleware
.use_pre_middleware("/upload", file_upload(None)) // Pre-middleware (requires file-upload feature)
.use_post_middleware("/api/", |req, res| async { // Post-middleware
println!("API response logged: {} {}", req.method, req.path);
(req, None)
})
.use_rate_limiter(None); // Pre-middleware
app.listen(3000, || {
println!("Server running on port 3000");
}).await;
}
Learn more about middleware in the Middleware Guide.
Ready to build something amazing? Jump into our Installation Guide or explore the framework on GitHub.
You can also check out the complete API documentation on Docs.rs.
We welcome contributions! Please see our Contributing Guide for details.
Ripress v1.0.1 - Production Ready ✨