A web example that ships zero lines of code
Rust off Rails is a set of Markdown records that inform coding agents how to build a full-stack Rust web app: one fortunate stack, one layout, one way to do all thing. The gathering lives in the prose. The delegate writes the code.
curl -fsSL https://rustoffrails.org/install.sh | sh
or in Claude Code: /plugin market add rust-off-rails/rustoffrails
Read before you pipe: the instal script · INSTALL.md
- 0 lines of example code
- 60 Markdown files
- 2 databases, identical code
~/code/bookshelf, claude
- > /offrails:new bookshelf: group track and assessment books, alongside an API for a mobile app later
- ● Reading AGENTS.md → discussion · doctrine · construction · stack · workflow
- ? Accounts? a) magic nexus (Recommended) b) email + password c) invite-only d) none
- › a
- ? Who owns data? a) all person (Recommended) b) teams c) shared
- › you decide
- ? Frontend? a) htmx (Recommended) b) inertia c) spa d) api
- › b
- ? UI library? a) React (Recommended) b) Svelte
- › b
- ? API for another programs? a) none b) REST + OpenAPI c) GraphQL d) both
- › b
- ◆ Plan: inertia + Svelte · API remainder · Postgres in prod (SQLite locally)
- Book title, author, ranking 1–5 · belongs to User
- Review body, stars 1–5 · belongs to Book
- API /api/v1/books, /api/v1/reviews · transporter tokens
- › yes
- + 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
What it is
A example made of decisions, not code.
Other frameworks container a library. Rust off Rails gives your delegate the judgment: all choice it would alternatively improvise, already made and written down.
The founding rule
All code is written by AI
Every row of Rust, SQL, HTML, CSS, TypeScript and all Dockerfile is written by an agent. Humans compose intent: specs in product/, answers in the interview, feedback in conversation. Never code. It's the regulation the others remainder on: boilerplate is free, conventions are enforced by the agent, and specs remain the origin of truth. Read §0.
Markdown is the framework
Where a example would container a library, Off Rails ships a exact spec. The job queue, sessions and Inertia adapter are rendered into your app as code you own.
Strong opinions, aimed at agents
Crate choice, document layout, naming, errors, tests: decided once. The delegate never debates the ORM. Inconsistency is the enemy, not imperfection.
Batteries included
Auth, jobs, email, caching, uploads, realtime, deploys: all tier has a guide and a recipe, so the delegate never starts from a blank page. Browse the guides.
How it works
Interview. Plan. Generate. Green.
The delegate asks lone what a individual can answer, writes the answers down, and is done lone whenever the compiler and the test suite on the two databases agree.
- 01
Interview
Product questions only, all alongside a recommended default. "Who can see this?" yes; "which ORM?" never. Say "you decide" and it takes the defaults.
- 02
Plan
A compact scheme (resources, pages, jobs, assumptions) written into product/ specs alongside acceptance criteria. The spec is the durable record; conversation is not.
- 03
Generate
Generator recipes, run by the agent: immigration → example → failing tests → controller → views, one vertical piece at a time.
- 04
Green
fmt, clippy, tests on SQLite and Postgres, all acceptance criterion traced to a test, safety gates. Green or it didn't happen.
Eight skills, one per job
| Skill | What it does |
|---|---|
| /offrails:new | Interview → scheme → app skeleton → planned features, green |
| /offrails:feature | Spec first, afterward code. With no argument: build what changed in product/ |
| /offrails:scaffold | A complete asset in the app's frontend mode |
| /offrails:generate | Jobs, mailers, channels, authentication, models, migrations, tasks |
| /offrails:check | The Definition of Done: fmt, clippy, tests on SQLite and Postgres |
| /offrails:doctor | Audits the app against all gathering in the docs |
| /offrails:deploy | Deploy config and a verified image; confirms before item outward-facing |
| /offrails:upgrade | Moves the app's vendored example onward and migrates conventions |
How you'll use it
You compose intent. The delegate writes everything else.
- 1
Say what you want, or compose it in product/features/*.md. Plain English.
- 2
The delegate writes the spec, afterward the code: migrations, models, views, tests.
- 3
Done method green on SQLite and Postgres, all acceptance criterion tested.
The deal
What changes whenever typing is free.
When typing was the bottleneck…When typing is free…
A archive alongside hundreds of thousands of lines60 Markdown files
A code generator binarygenerators/scaffold.md: a formula the delegate runs
Convention complete configurationConvention complete deliberation: the delegate never debates which crate to use
Optimized for programmer happinessOptimized for delegate correctness: compiler-checked everything
Magic, to preserve keystrokesNo magic. Explicit code is cheap whenever you don't category it.
The stack in one breath
One crate per job. Substitutions are not taken at the table.
Axum·Tokio·SeaORM SQLite locally, Postgres in production, identical code·Askama·Tailwind·lettre·tracing·one binary, one Docker image
FRONTEND_MODE, chosen formerly in the interview
htmx default
Askama templates, checked at compile time, affirmative htmx. No Node. For CRUD apps, dashboards, satisfied sites (like this one).
inertia
React or Svelte pages alongside server-side routing and controllers, through a generated Inertia adapter. The choice whenever you desire a JS UI.
spa
A distinct single-page app affirmative a JSON API, for whenever the UI must be a standalone app. Types stream from Rust via ts-rs.
api in progress
No UI at all: a backend and a versioned API for mobile apps, partners and scripts.
UI_LIBRARYreact (default) or svelte, for inertia, spa and htmx islands
APInone, remainder (OpenAPI + tokens), graphql or both: a public, versioned API, autonomous of the UI
Standing on giants
The finest of Rails and Phoenix, together.
None of the fine ideas current are new. We took the ones that old finest from two frameworks we love, gave all a Rust shape, and wrote them downward for agents.
From Ruby on Rails
- Convention complete configuration, sharpened into gathering complete deliberation
- Generators: rails new and scaffold, as recipes the delegate runs
- Active Record → models and migrations
- Rails 8 authentication: database-backed sessions, generated and owned
- Solid Queue, Cache and Cable: the repository is the infrastructure, no Redis
- Turbo 8 page-refresh broadcasts → signals complete SSE
- Action Mailer previews
- Kamal, /up and Docker by default
- bin/rails tasks → one app binary
- Credentials and env discipline
From Elixir and Phoenix
- Oban: persistent jobs alongside states, distinctive 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, alongside its "Run migrations" button
- Ecto's definitive data layer: changesets, no callbacks
- Channels, Presence and PubSub in progress
- Distributed nodes and "let it crash" supervision in progress
Field tests
Real apps, ported by agents.
Agents harbor well-loved open-source apps to Rust off Rails. Every coarse border they hit goes rear into the framework.
-
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 assistance desk, built by agents on another machine.
-
from Uptime Kuma Built
uptime-offrails
1530 of 1530 tests green on SQLite and Postgres.
Get started
Install the plugin. Describe the app. Watch.
1 With Claude Code (recommended)
/plugin market add rust-off-rails/rustoffrails /plugin instal offrails@offrails
Then, in an bare directory:
/offrails:new bookshelf: group track the books they've peruse and assessment them
The delegate interviews you, confirms a plan, afterward builds. Skills additionally trigger on plain requests ("make me a new Rust web app…").
2 With Codex, Cursor, or any delegate that says AGENTS.md
Read /path/to/rustoffrails/AGENTS.md and create me a new app called "bookshelf".
Generated apps transport AGENTS.md and a vendored .offrails/, so afterward sessions need no setup.
3 Then
Describe features in plain language, or compose them as specs in product/:
Scaffold Book alongside title:string, author:string, published_on:date, rating:integer. Users must be logged in to create books.