| Crates.io | ripress |
| lib.rs | ripress |
| version | 1.9.8 |
| created_at | 2025-03-11 08:07:45.881742+00 |
| updated_at | 2025-09-24 18:49:55.480879+00 |
| description | An Express.js-inspired web framework for Rust |
| homepage | |
| repository | https://github.com/guru901/ripress |
| max_upload_size | |
| id | 1587672 |
| size | 785,158 |
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

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)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
This will create a new project with Ripress.
use ripress::{
app::App,
context::{HttpRequest, HttpResponse},
types::RouterFns,
};
#[tokio::main]
async fn main() {
let mut app = App::new();
app.get("/", handler);
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!"}))
}
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.
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
.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 ✨