Runique — Django-inspired Rust Framework
Runique is a web framework built on Axum, focused on type-safe forms, security middleware, template rendering, ORM integration, and a code-generated admin workflow.
Current state: active development. The framework source of truth is the
runiquecrate.demo-appis used as a validation/testing application for framework behavior.
🌍 Languages: English | Français
What this repository contains
runique/→ framework crate (main product)demo-app/→ test/validation app for framework developmentdocs/→ EN/FR documentation
Workspace version (source of truth): 2.1.15.
Core capabilities
- Type-safe form system (
forms, extractors, validators, renderers) - Routing macros and URL helpers
- Tera template integration and context helpers
- Security middleware (CSRF, CSP, allowed hosts, sanitization, auth/session)
- SeaORM integration + migration tooling
- Flash message system
- Admin beta (
admin!macro + daemon-generated CRUD code)
Main public modules are exposed from runique/src/lib.rs.
Installation
git clone https://github.com/seb-alliot/runique
cd runique
cargo build --workspace
cargo test --workspace
Detailed guide: Installation
Quick usage
use runique::prelude::*;
use runique::app::builder::RuniqueAppBuilder;
mod url; // urlpatterns!{} — your routes
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
password_init(PasswordConfig::auto_with(Manual::Argon2));
let config = RuniqueConfig::from_env();
let db = DatabaseConfig::from_env()?.build().connect().await?;
RuniqueAppBuilder::new(config)
.routes(url::routes())
.with_database(db)
.statics()
.middleware(|m| {
m.with_allowed_hosts(|h| h.enabled(!is_debug()).host("localhost:3000"))
})
.build()
.await?
.run()
.await?;
Ok(())
}
CLI (actual commands)
runique provides:
runique new <name>runique start [--main src/main.rs] [--admin src/admin.rs]runique create-superuserrunique makemigrations --entities src/entities --migrations migration/src [--force false]runique migration up|down|status --migrations migration/src
⚠️ Warning — rolling back migrations
runique makemigrationsgenerates migrations while preserving the chronological order of the migration system. When you need to roll a migration back, prefer the SeaORM CLI: it keeps the migration tracking table synchronized with the actual schema state. Mixing rollback tooling can desynchronize migration tracking.
Admin beta status
Admin daemon behavior in start:
- checks whether
.with_admin(...)exists insrc/main.rs - starts the admin watcher when enabled
- otherwise exits with an explicit hint
Admin resources are declared in src/admin.rs using admin!.
The workflow:
- parse
admin!declarations - generate admin code under
src/admins/ - refresh on changes with watcher mode
Current beta limits:
- mostly resource-level permissions
- generated folder overwrite (
src/admins/) - iterative hardening still in progress
Admin docs: Admin
Features and database backends
Default features:
ormall-databases
Selectable backends:
sqlitepostgresmysqlmariadb
Test and coverage snapshot
- Reported tests: 2011+ passing
- Coverage snapshot (
2026-05-24, packagerunique):- Functions: 78.32%
- Lines: 76.05%
- Regions: 73.93%
cargo llvm-cov --tests --package runique --ignore-filename-regex "admin" --summary-only
Full per-file breakdown: docs/couverture_test.md
Sessions
CleaningMemoryStore replaces the default MemoryStore with automatic expired-session cleanup, a two-tier watermark system (128 MB / 256 MB), and priority-based protection for authenticated sessions.
- Low watermark: background purge of expired anonymous sessions
- High watermark: synchronous emergency purge + 503 refusal if still exceeded
protect_session(&session, duration_secs)— marks an anonymous session as untouchable until a given timestampuser_idkey — automatically protects authenticated sessions
Full reference: Sessions
Environment variables
All behavior is configurable via .env. Key variables:
RUNIQUE_SESSION_CLEANUP_SECS=60
RUNIQUE_SESSION_LOW_WATERMARK=134217728
RUNIQUE_SESSION_HIGH_WATERMARK=268435456
SECRET_KEY=your-secret-key
DATABASE_URL=sqlite://db.sqlite3
Full reference: Environment variables
Documentation
- Installation
- Architecture
- Configuration
- Routing
- Forms
- Model/Schema
- Templates
- ORM
- Middlewares
- Flash Messages
- Examples
- Admin beta
- Sessions
- Environment variables
Project status
For the detailed, continuously updated state report, see PROJECT_STATUS.md.
Resources
License
MIT — see LICENSE