Rust off Rails:面向 AI 時代的堅定 Web 堆疊
Rust off Rails: The opinionated web stack for the AI era
Rust off Rails 是一套零程式碼的 Web 框架,透過 Markdown 指令讓 AI 代理自動生成完整的 Rust 前後端應用。
- - 核心特性:零程式碼庫,所有程式碼由 AI 代理生成。
- 提供完整的 CRUD、認證、作業排程、即時通訊等功能。
這篇文章展示瞭如何利用 Markdown 指令讓 AI 代理自動生成完整的 Rust Web 應用,對想快速開發 Rust 前端後端的工程師有實用參考價值,並且提供完整安裝指令碼、測試覆蓋率與可擴充的外掛機制,讓開發流程更順暢。
一個零程式碼釋出的網路框架
Rust off Rails 是一組 Markdown 檔案,告訴程式開發代理如何構建一個完整的 Rust 網頁應用:一個被祝福的堆疊,一個佈局,做每件事的唯一方式。慣例存在於文字中。代理會寫程式碼。
curl -fsSL https://rustoffrails.org/install.sh | sh或在 Claude Code: /plugin marketplace add rust-off-rails/rustoffrails
閱讀後再執行:安裝指令碼 · INSTALL.md
- 0 行框架程式碼
- 60 個 Markdown 檔案
- 2 個資料庫,程式碼相同
~/code/bookshelf, claude
- > /offrails:new bookshelf: 人們追蹤並審閱書籍,後續提供手機應用程式的 API
- ● 閱讀 AGENTS.md → 訪談 · 原則 · 結構 · 堆疊 · 工作流程
- ? 帳戶? a) 魔法連結 (推薦) b) 電子郵件 + 密碼 c) 只限邀請 d) 無
- › a
- ? 誰擁有資料? a) 每位使用者 (推薦) b) 團隊 c) 共享
- › 你決定
- ? 前端? a) htmx (推薦) b) inertia c) spa d) api
- › b
- ? UI 套件? a) React (推薦) b) Svelte
- › b
- ? 供其他程式使用的 API? a) 無 b) REST + OpenAPI c) GraphQL d) 兩者皆有
- › b
- ◆ 計畫:inertia + Svelte · API rest · 產環境使用 Postgres(本機使用 SQLite)
- Book 標題、作者、評分 1–5 · 屬於 User
- Review 內容、星級 1–5 · 屬於 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
- 完成定義:綠色。執行
bin/setup && bin/dev
它是什麼
一個由 決策 組成的框架,而非程式碼。
其他框架會提供函式庫。Rust off Rails 給你的代理判斷力:每一個本來會即興決定的選擇,已經事先決定並寫下來。
創始規則
所有程式碼均由 AI 撰寫
每一行 Rust、SQL、HTML、CSS、TypeScript 以及每一個 Dockerfile 都由代理撰寫。人類撰寫意圖:specs 在 product/,訪談中的答案,對話中的回饋。永遠不寫程式碼。這是其他人依賴的規則:樣板免費,慣例由代理執行,specs 為真實來源。閱讀 §0。
Markdown 是框架
當框架會提供函式庫時,Off Rails 提供精確的 spec。工作佇列、會話與 Inertia 介面卡會以你擁有的程式碼呈現在你的應用中。
堅定的觀點,針對代理
Crate 選擇、檔案佈局、命名、錯誤、測試:一次決定。代理永遠不會爭論 ORM。不一致是敵人,而非不完美。
一切已內建
Auth、jobs、email、caching、uploads、realtime、deploys:每一層都有指引與範例,讓代理永遠不必從空白頁面開始。瀏覽指南。
運作方式
訪談。計畫。產生。綠色。
代理程式只會詢問人類能回答的問題,將答案寫下,只有當兩個資料庫的編譯器和測試套件一致時才算完成。
-
01
面試
只問產品相關問題,每個都有建議預設值。"誰能看到這個?" 是;"使用哪個 ORM?" 否。說 "你決定",它會採用預設值。
-
02
規劃
一份簡潔的計畫(資源、頁面、工作、假設),寫入
product/規格並附上驗收標準。規格是持久的紀錄;聊天不是。 -
03
產生
生成器配方,由代理程式執行:遷移 → 模型 → 失敗測試 → 控制器 → 檢視,一次一個垂直切片。
-
04
綠色
fmt、clippy、SQLite 與 Postgres 測試,所有驗收標準都追蹤到測試,覆蓋門檻。綠色才算完成。
八項技能,對應每個工作
| 技能 | 功能 |
|---|---|
/offrails:new | 面試 → 規劃 → 應用骨架 → 規劃功能,綠色 |
/offrails:feature | 先寫規格,再寫程式碼。若無引數:建構 product/ 中變更的部分 |
/offrails:scaffold | 在應用程式前端模式下的完整資源 |
/offrails:generate | 工作、郵件器、頻道、身份驗證、模型、遷移、任務 |
/offrails:check | 完成定義:fmt、clippy、SQLite 與 Postgres 測試 |
/offrails:doctor | 根據檔案中的所有慣例審核應用程式 |
/offrails:deploy | 部署設定與已驗證的映像;在任何對外釋出前先確認 |
/offrails:upgrade | 推進應用程式的套件框架並遷移慣例 |
使用方式
你寫下意圖,代理程式寫下 其餘所有。
- 1
說出你想要的,或寫在
product/features/*.md。簡單英文。 - 2
代理程式先寫規格,再寫程式碼:遷移、模型、檢視、測試。
- 3
完成即綠色於 SQLite 與 Postgres,所有驗收標準已測試。
開發工具
檢視 內部 你的應用程式。
追蹤、分析器、本機信箱、工作佈景板與即時存在感,內建。你的代理程式以 JSON 讀取相同資料,能檢查自身工作。
佈景板在釋出版中每個請求約耗費 1 微秒,預設僅用於開發。
重點
輸入免費時會有什麼變化。
- 一個包含數十萬行程式碼的庫
- 60 個 Markdown 檔案
- 一個程式碼產生器二進位檔
generators/scaffold.md:代理程式執行的配方- 慣例優先於設定
- 慣例優先於深思熟慮:代理程式永不爭論使用哪個 crate
- 最佳化以提升程式員的快樂
- 最佳化以確保代理程式正確:所有內容皆經編譯器檢查
- 魔法,節省鍵入
- 無魔法。若你不需要手動輸入,明確程式碼才是經濟的。
一口氣描述整個堆疊
每個工作一個 crate。取代不會在表格中進行。
Axum·Tokio·SeaORM SQLite 本地,Postgres 生產環境,程式碼相同·Askama·Tailwind·lettre·tracing·一個二進位檔,一個 Docker 映像檔
FRONTEND_MODE,在面試時選擇一次
htmx 預設值
Askama 模板,編譯時檢查,並搭配 htmx。無需 Node。適用於 CRUD 應用、儀錶板、內容網站(如本網站)。
inertia
React 或 Svelte 頁面,搭配伺服器端路由與控制器,透過產生的 Inertia 介面卡。當你需要 JavaScript UI 時選擇。
spa
獨立的單頁應用加上 JSON API,當 UI 必須是獨立應用時使用。型別透過 Rust 透過 ts-rs 傳遞。
api 進行中
完全沒有 UI:僅有後端與版本化 API,供行動應用、合作夥伴與指令碼使用。
UI_LIBRARYreact(預設)或svelte,適用於inertia、spa以及 htmx islandsAPInone、rest(OpenAPI + tokens)、graphql或both:一個公開、版本化的 API,獨立於 UI。
以及資料庫:工作佇列、快取與 pub/sub。資料庫即為唯一基礎設施。
立於巨人之上
結合 Rails 與 Phoenix 的最佳特性,一起。
這裡的好點子並非全新。我們挑選兩個我們喜愛框架中最適應時代的理念,為每個賦予 Rust 形式,並為代理寫下。
來自 Ruby on Rails
- Convention over configuration,精煉為 convention over deliberation
- Generators:
rails new和 scaffold,作為代理執行的食譜 - Active Record → models 與 migrations
- Rails 8 authentication:以資料庫為後端的會話,已產生且屬於自己
- Solid Queue、Cache 與 Cable:資料庫即為基礎設施,無需 Redis
- Turbo 8 page-refresh broadcasts → 透過 SSE 的訊號
- Action Mailer previews
- Kamal,
/upand Docker 預設啟用 bin/railstasks → 一個app二進位檔- Credentials and env discipline
來自 Elixir 與 Phoenix
- Oban:帶狀態的持久工作、唯一工作、cron、snooze
- Oban Web → 直播
/admin/jobs儀錶板 - Swoosh's local mailbox →
/dev/mailbox - phx.gen.auth:magic links 與 "check your mailbox" 開發提示
- LiveDashboard →
/dev工具箱 - The pending-migrations page,搭配 "Run migrations" 按鈕
- Ecto's explicit data layer:changesets,無 callbacks
- Channels, Presence and PubSub 進行中
- Distributed nodes and "let it crash" supervision 進行中
還有
實地測試
實際應用,由代理移植。
代理將廣受歡迎的開源應用從 Rails 移植至 Rust。每一次碰到的瑕疵都會回饋到框架。
-
from Fizzy 進行中
fizzyer
Fizzy 的看板與卡片,已由代理用 Rust 重新建置。
-
from FreeScout 進行中
A FreeScout port
一個共享收件箱的客服系統,已由代理在另一臺機器上建置。
-
from Uptime Kuma 已建置
uptime-offrails
1530/1530 個測試在 SQLite 與 Postgres 上皆通過。
使用 GPT-6 Luna Claude Sonnet 5.5 Meta's Muse Wonder 1 GLM 5.3 Flash via opencode 目標:打造小型、低成本的代理,同時完成實際工作。
開始使用
安裝外掛。描述應用。觀察。
1 使用 Claude Code(建議)
/plugin marketplace add rust-off-rails/rustoffrails
/plugin install offrails@offrails接著,在空目錄中:
/offrails:new bookshelf: people track the books they've read and review them代理會與你面談,確認計畫,然後建置。技能亦可在簡單請求("make me a new Rust web app…")時觸發。
2 使用 Codex、Cursor,或任何閱讀 AGENTS.md 的代理
Read /path/to/rustoffrails/AGENTS.md and make me a new app called "bookshelf".產生的應用攜帶 AGENTS.md 與一個 vendored .offrails/,因此後續會話不需設定。
3 然後
以簡單語言描述功能,或將其寫成規格於 product/:
Scaffold Book with title:string, author:string, published_on:date, rating:integer.
Users must be logged in to create books.