A web framework that ships zero lines of code
The opinionated web stack for the AI era.
Rust off Rails is a set of Markdown files that tell coding agents how to build a full-stack Rust web app: one blessed stack, one layout, one way to do each thing. The convention lives in the prose. The agent writes the code.
curl -fsSL https://rustoffrails.org/install.sh | sh
or in Claude Code: /plugin marketplace add rust-off-rails/rustoffrails
Read before you pipe: the install script · INSTALL.md
> /offrails:new bookshelf: people track and review books, with an API for a mobile app later
● Reading AGENTS.md → interview · doctrine · structure · stack · workflow
? Accounts? a) magic link (Recommended) b) email + password c) invite-only d) none
? Who owns data? a) each user (Recommended) b) teams c) shared
? Frontend? a) htmx (Recommended) b) inertia c) spa d) api
? UI library? a) React (Recommended) b) Svelte
? API for other programs? a) none b) REST + OpenAPI c) GraphQL d) both
◆ Plan: inertia + Svelte · API rest · Postgres in prod (SQLite locally)
Book title, author, rating 1–5 · belongs to User
Review body, stars 1–5 · belongs to Book
API /api/v1/books, /api/v1/reviews · bearer tokens
+ migration/src/m20261013_120000_create_books.rs
+ src/models/book.rs · src/controllers/books.rs
+ web/src/pages/Books/Index.svelte (+ 71 more)
✓ cargo clippy --all-targets -- -D warnings
✓ pnpm --dir web typecheck · svelte-check
✓ cargo nextest run · SQLite · 142 passed
✓ cargo nextest run · Postgres 18 · 142 passed
Definition of Done: green. Run bin/setup && bin/dev
All code is written by AI
Every line of Rust, SQL, HTML, CSS, TypeScript and every Dockerfile is written by an agent. Humans write intent: specs in product/ , answers in the interview, feedback in conversation. Never code. It's the rule the others rest on: boilerplate is free, conventions are enforced by the agent, and specs stay the source of truth. Read §0 .
Markdown is the framework
Where a framework would ship a library, Off Rails ships a precise spec. The job queue, sessions and Inertia adapter are rendered into your app as code you own.
Strong opinions, aimed at agents
Crate choice, file layout, naming, errors, tests: decided once. The agent never debates the ORM. Inconsistency is the enemy, not imperfection.
Batteries included
Auth, jobs, email, caching, uploads, realtime, deploys: every layer has a guide and a recipe, so the agent never starts from a blank page. Browse the guides .
01 Interview Product questions only, each with a recommended default. "Who can see this?" yes; "which ORM?" never. Say "you decide" and it takes the defaults.
02 Plan A compact plan (resources, pages, jobs, assumptions) written into product/ specs with acceptance criteria. The spec is the durable record; chat is not.
03 Generate Generator recipes, run by the agent: migration → model → failing tests → controller → views, one vertical slice at a time.
04 Green fmt, clippy, tests on SQLite and Postgres, every acceptance criterion traced to a test, coverage gates. Green or it didn't happen.
Eight skills, one per job
You write intent. The agent writes everything else .
1 Say what you want , or write it in product/features/*.md . Plain English.
2 The agent writes the spec, then the code: migrations, models, views, tests.
3 Done means green on SQLite and Postgres, every acceptance criterion tested.
The dashboard costs about 1 µs per request in a release build, and is development only by default.
Axum · Tokio · SeaORM SQLite locally, Postgres in production, same code · Askama · Tailwind · lettre · tracing · one binary, one Docker image
FRONTEND_MODE , chosen once in the interview
Askama templates, checked at compile time, plus htmx. No Node. For CRUD apps, dashboards, content sites (like this one).
React or Svelte pages with server-side routing and controllers, through a generated Inertia adapter. The pick when you want a JS UI.
A separate single-page app plus a JSON API, for when the UI must be a standalone app. Types flow from Rust via ts-rs .
No UI at all: a backend and a versioned API for mobile apps, partners and scripts.
And in the database: a job queue, a cache and pub/sub. The database is the only infrastructure.
From Ruby on Rails
Convention over configuration , sharpened into convention over deliberation
Generators : rails new and scaffold, as recipes the agent runs
Active Record → models and migrations
Rails 8 authentication : database-backed sessions, generated and owned
Solid Queue , Cache and Cable : the database is the infrastructure, no Redis
Turbo 8 page-refresh broadcasts → signals over SSE
Kamal, /up and Docker by default
bin/rails tasks → one app binary
Credentials and env discipline
From Elixir and Phoenix
Oban : persistent jobs with states, unique jobs, cron, snooze
Oban Web → the live /admin/jobs dashboard
Swoosh's local mailbox → /dev/mailbox
phx.gen.auth : magic links and the "check your mailbox" dev hint
LiveDashboard → the /dev toolbox
The pending-migrations page , with its "Run migrations" button
Ecto's explicit data layer : changesets, no callbacks
Channels, Presence and PubSub in progress
Distributed nodes and "let it crash" supervision in progress
from Fizzy In progress fizzyer Fizzy's boards and cards, rebuilt in Rust by agents.
from FreeScout In progress A FreeScout port A shared-inbox help desk, built by agents on another machine.
from Uptime Kuma Built uptime-offrails 1530 of 1530 tests green on SQLite and Postgres.
Built with GPT-6 Luna Claude Sonnet 5.5 Meta's Muse Wonder 1 GLM 5.3 Flash via opencode The goal: small, cheap agents that get real work done too.
1 With Claude Code (recommended)
/plugin marketplace add rust-off-rails/rustoffrails /plugin install offrails@offrails
/offrails:new bookshelf: people track the books they've read and review them
The agent interviews you, confirms a plan, then builds. Skills also trigger on plain requests ("make me a new Rust web app…").
2 With Codex, Cursor, or any agent that reads AGENTS.md
Read /path/to/rustoffrails/AGENTS.md and make me a new app called "bookshelf".
Generated apps carry AGENTS.md and a vendored .offrails/ , so later sessions need no setup.
3 Then
Describe features in plain language, or write them as specs in product/ :
Scaffold Book with title:string, author:string, published_on:date, rating:integer. Users must be logged in to create books.
The full walkthrough → How you'll use it Read the docs Star on GitHub