A site is declared, not coded
Routes, content types and languages live in configuration, and Rustelo turns them into a typed Rust web application at build time.
Build. Deploy. Deliver.
Generate a site, declare its routes, menus and languages in Nickel, write the content in Markdown and choose its rendering profile — HTMX-SSR or Leptos hydration.
Contribute resources and pages through compile-time plugins, or override anything in the local layer — the framework source is never modified.
One core · two rendering profiles · no framework forks
Everything configurable, nothing hardcoded.
Declared, not coded
Everything a site is — its routes, its content types, its languages — lives in configuration. Rustelo turns that declaration into a typed Rust application at build time, and the core stays untouched.
Configuration that compiles
Routes, pages, menus and the Fluent registry are generated from Nickel configuration by build.rs into OUT_DIR and included at compile time. A malformed route table is a build error, not a page that 404s in production.
Two rendering profiles, one core
Choose per site or per route: server-rendered HTML with HTMX and no WebAssembly, or Leptos SSR with WASM hydration. Same content, same configuration; a site with no hydrated route skips the wasm32 build entirely.
Extend without forking
A layered override system — Local over Feature over Template over Framework — and compile-time plugins through ResourceContributor and PageContributor let a site change anything without modifying framework source.
Architecture
Three layers — your application, the framework ports (rustelo_web, rustelo_auth, rustelo_content) and the foundation — with build-time code generation from Nickel configuration underneath.
How it works
Declare, generate, serve.
Declare in Nickel
Write routes, menus, content kinds, themes and languages as typed Nickel configuration. Languages are discovered from configuration and content; none is hardcoded.
Generate at build time
build.rs reads the configuration and generates routes.rs, pages.rs and menus.rs into OUT_DIR; include!() inlines them. The generated code is read-only — the configuration is the source of truth.
Serve from one binary
An Axum server renders every route in its profile — HTMX fragments or Leptos hydration — with authentication, RBAC, content, email and i18n composed through Cargo features.
A site you declare, review and rebuild
Configuration, templates and content are plain files under version control; the framework stays updatable because nothing in it was edited. Start from the framework overview or read how it is built.