Rullst - Rust Fullstack Web Framework
The AI-Native Advantage
๐ค
AI-Native by Design
Built from the ground up for AI coders. Zero runtime magic, pure compilation, and automatic `.ai-rules` context injection makes Rullst perfectly legible to Cursor and Copilot without hallucinations.
๐
Autonomous Upgrades
Never fear breaking changes again. cargo rullst upgrade performs AST-based codemods in the background to automatically update your syntax when the framework evolves.
๐
Edge Fusion & Replication
Compile to WebAssembly for Cloudflare Workers globally, backed by built-in Turso/libsql replication for 1ms database read latency worldwide.
๐ฑ
Omni-Frontend Wasm
Write frontend interactive components strictly in Rust (`#[client_component]`). They compile to lightweight Wasm, eliminating the need to write JavaScript for SPAs or Desktop apps.
The Interactive Experience
Stop memorizing flags. The Rullst CLI guides you through project setup, database migrations, authentication, and cloud deployment interactively.
bash
Crush the Competition
By combining Rust's memory safety, Tokio's async I/O, and Axum's routing, Rullst delivers unparalleled performance without sacrificing developer experience.
Requests per Second
Higher is better (Hello World endpoint)
Rullst (Rust)
420k req/s
Spring Boot (Java)
120k req/s
Express (Node)
65k req/s
Laravel (PHP)
32k req/s
Django (Python)
25k req/s
Memory Footprint
Lower is better (Idle memory usage)
Rullst (Rust)
18 MB
Laravel (PHP)
110 MB
Express (Node)
150 MB
Django (Python)
180 MB
Spring Boot (Java)
450 MB
Documentation
Getting started is simple. See the basics below or visit our GitHub for the full guide.
1. Define Your Model
No manual SQL. Use declarative macros to define your Active Record models.
#[derive(Orm, Clone)]<br>#[table("users")]<br>pub struct User {<br>pub id: i32,<br>pub name: String,<br>pub email: String,
2. Create a Controller
Fetch data effortlessly and return JSON or HTML using concise syntax.
pub async fn get_users() -> Json> {<br>let users = User::all().await.unwrap();<br>Json(users)
3. Register the Route
Bind your controller to an Axum-powered router natively.
Server::new()<br>.route(get, "/api/users", get_users)<br>.serve()<br>.await;