Rust off Rails:面向 AI 时代的固执己见型 Web 技术栈
摘要
Rust off Rails 引入了一套以 AI 为核心的固执己见型 Web 技术栈,它以 Markdown 约定的形式发布,而非代码。它引导编程智能体(如 Claude Code)生成全栈 Rust 应用程序,遵循一套统一且唯一的决策方案。该项目强调所有代码均由 AI 编写,人类只需提供意图、规格说明和回答访谈式的问题。
暂无内容
查看缓存全文
缓存时间: 2026/10/21 18:23
# Rust off Rails:为 AI 时代打造的固执己见的 Web 技术栈
来源:https://rustoffrails.org/
一个不附带任何代码的 Web 框架
Rust off Rails 是一套 Markdown 文件,它告诉编码智能体如何构建一个全栈 Rust Web 应用:一个钦定的技术栈、一种布局、每件事只有一种做法。**约定写在文字里,代码由智能体来写。**
``
curl -fsSL https://rustoffrails.org/install.sh | sh
``
或在 Claude Code 中:`/plugin marketplace add rust-off-rails/rustoffrails`
在你执行之前请先阅读:安装脚本 (https://rustoffrails.org/install.sh) · INSTALL.md (https://github.com/rust-off-rails/rustoffrails/blob/main/INSTALL.md)
Railboard:由 AI 用 7 次提示构建的实时看板 3:06 · 在 YouTube 观看 (https://www.youtube.com/watch?v=k65vA28_JT8)
- **0** 行框架代码
- **60** 个 Markdown 文件
- **2** 个数据库,同一份代码
~/code/bookshelf, claude
一次图解的智能体会话:`/offrails:new` 命令、访谈、计划、生成的文件,以及在 SQLite 和 Postgres 上全部通过的测试。
1. \>/offrails:new bookshelf:人们跟踪和评论书籍,之后要为移动端提供 API
2. ● 正在读取 AGENTS.md → 访谈 · 教条 · 结构 · 技术栈 · 工作流
3. ? 账户体系?a) magic link(推荐)b) 邮箱 + 密码 c) 仅限邀请 d) 无需账户
4. › a
5. ? 谁拥有数据?a) 每个用户(推荐)b) 团队 c) 共享
6. › you decide
7. ? 前端?a) htmx(推荐)b) inertia c) spa d) api
8. › b
9. ? UI 库?a) React(推荐)b) Svelte
10. › b
11. ? 为其他程序提供 API?a) 无 b) REST + OpenAPI c) GraphQL d) 两者都要
12. › b
13. ◆ 计划:inertia + Svelte · API 用 REST · 生产环境 Postgres(本地 SQLite)
14. Book title, author, rating 1–5 · belongs to User
15. Review body, stars 1–5 · belongs to Book
16. API /api/v1/books, /api/v1/reviews · bearer tokens
17. › yes
18. \+migration/src/m20261013\_120000\_create\_books\.rs
19. \+src/models/book\.rs · src/controllers/books\.rs
20. \+web/src/pages/Books/Index\.svelte(\+ 71 more)
21. ✓cargo clippy \-\-all\-targets \-\- \-D warnings
22. ✓pnpm \-\-dir web typecheck · svelte\-check
23. ✓cargo nextest run · **SQLite** · 142 passed
24. ✓cargo nextest run · **Postgres 18** · 142 passed
25. 完成定义:全绿。运行 `bin/setup && bin/dev`
它是什么
## 一个由*决策*构成的框架,而非由代码构成。
其他框架发布的是一个库。Rust off Rails 给你的智能体的是判断力:它本会即兴发挥的每一个选择,都已经做出并记录在案。
创始规则
### 所有代码均由 AI 编写
每一行 Rust、SQL、HTML、CSS、TypeScript,以及每一个 Dockerfile,都由智能体编写。人类只写意图:`product/` 中的需求文档、访谈中的回答、对话中的反馈。永远不写代码。这是其他一切所依赖的规则:样板代码是免费的,约定由智能体来执行,规格文档始终保持为事实的唯一来源。阅读 §0 (https://rustoffrails.org/philosophy#pillar-0)。
### Markdown 就是框架
框架本应发布一个库,而 Off Rails 发布的是一份精确的规格。任务队列、会话管理和 Inertia 适配器,都以代码的形式渲染到你的应用中,代码归你所有。
### 强烈的观点,面向智能体
Crate 选择、文件布局、命名、错误处理、测试:一次决定,永久生效。智能体永远不需要争论用哪个 ORM。不一致才是敌人,而非不完美。
### 开箱即用
认证、任务队列、邮件、缓存、文件上传、实时通信、部署:每一层都有指南和配方,智能体永远不需要从空白页开始。浏览指南 (https://rustoffrails.org/docs)。
它如何工作
## 访谈。计划。生成。*绿灯。*
智能体只问人类能回答的问题,把答案记录下来,并且只有当编译器和两个数据库上的测试套件都同意时才算完成。
1. 01 ### 访谈 仅询问产品层面的问题,每个问题都有推荐的默认值。"谁能看到这个?"会问;"用哪个 ORM?"永远不会。说"你决定",它就会采用默认值。
2. 02 ### 计划 一份紧凑的计划(资源、页面、任务、假设),连同验收标准一起写入 `product/` 规格文档中。规格文档是持久记录;聊天记录不是。
3. 03 ### 生成 生成器配方,由智能体执行:迁移 → 模型 → 失败的测试 → 控制器 → 视图,每次一个垂直切片。
4. 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. 1 **说出你想要什么**,或写在 `product/features/*.md` 中。用普通英语即可。
2. 2 **智能体先写规格,再写代码**:迁移、模型、视图、测试。
3. 3 **完成意味着在 SQLite 和 Postgres 上全绿**,每条验收标准都有测试覆盖。
阅读指南 (https://rustoffrails.org/guide)
这笔交易
## 当打字变得免费时,什么会改变。
数十万行代码的库 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 适配器实现。想要 JS UI 时的首选。
`spa`
一个独立的单页应用加上 JSON API,适用于 UI 必须是独立应用的场景。类型通过 `ts-rs` 从 Rust 流转。
`api`(进行中)
完全没有 UI:一个后端和一个带版本的 API,供移动端、合作伙伴和脚本使用。
`UI_LIBRARY`:`react`(默认)或 `svelte`,用于 `inertia`、`spa` 和 htmx islands
`API`:`none`、`rest`(OpenAPI + tokens)、`graphql` 或 `both`:一个公开的、带版本的 API,独立于 UI
数据库中还包含:任务队列、缓存和 pub/sub。**数据库是唯一的基础设施。**
站在巨人的肩膀上
## Rails 和 Phoenix 的精华,*合二为一*。
这里没有任何一个好点子是新的。我们从两个我们热爱的框架中取了经受住时间考验的部分,为每个部分赋予 Rust 的形态,然后为智能体把它们写下来。
### 来自 Ruby on Rails
- 约定优于配置 (https://rustoffrails.org/philosophy),提炼为约定优于商议
- 生成器 (https://rustoffrails.org/docs/generators/scaffold):`rails new` 和 scaffold,变成智能体执行的配方
- Active Record (https://rustoffrails.org/docs/guides/models) → 模型和迁移 (https://rustoffrails.org/docs/guides/migrations)
- Rails 8 认证 (https://rustoffrails.org/docs/guides/auth):基于数据库的会话,生成后归你所有
- Solid Queue (https://rustoffrails.org/docs/guides/jobs)、Cache (https://rustoffrails.org/docs/guides/caching) 和 Cable (https://rustoffrails.org/docs/guides/realtime):数据库就是基础设施,不需要 Redis
- Turbo 8 页面刷新广播 (https://rustoffrails.org/docs/guides/realtime) → 通过 SSE 传递信号
- Action Mailer 预览 (https://rustoffrails.org/docs/guides/mailers)
- Kamal、`/up` 和 Docker (https://rustoffrails.org/docs/guides/deployment) 默认就有
- `bin/rails` 任务 (https://rustoffrails.org/docs/cli) → 单个 `app` 二进制文件
- 凭据和环境变量纪律 (https://rustoffrails.org/docs/guides/config)
### 来自 Elixir 和 Phoenix
- Oban (https://rustoffrails.org/docs/guides/jobs):持久化任务,带状态、唯一任务、定时任务、延迟重试
- Oban Web (https://rustoffrails.org/docs/guides/jobs-dashboard) → 实时的 `/admin/jobs` 仪表盘
- Swoosh 的本地邮箱 (https://rustoffrails.org/docs/guides/mailers) → `/dev/mailbox`
- phx.gen.auth (https://rustoffrails.org/docs/guides/auth):magic links 以及"查看你的收件箱"开发提示
- LiveDashboard (https://rustoffrails.org/docs/guides/dev-tools) → `/dev` 工具箱
- 待执行迁移页面 (https://rustoffrails.org/docs/guides/dev-tools),带"运行迁移"按钮
- Ecto 的显式数据层 (https://rustoffrails.org/docs/guides/models):changesets,没有回调
- Channels、Presence 和 PubSub (https://rustoffrails.org/docs/guides/realtime)(进行中)
- 分布式节点和"let it crash"监督机制 (https://rustoffrails.org/docs/guides/deployment)(进行中)
还有
- htmx (https://rustoffrails.org/docs/guides/frontend-htmx)
- Inertia.js (https://rustoffrails.org/docs/guides/frontend-inertia)
- Tailwind (https://rustoffrails.org/docs/guides/views)
- shadcn 风格的自有组件 (https://rustoffrails.org/docs/stack)
- ts-rrs 端到端类型 (https://rustoffrails.org/docs/guides/frontend-react)
- Svelte (https://rustoffrails.org/docs/guides/frontend-svelte)
- Playwright (https://rustoffrails.org/docs/guides/testing)
实战检验
## 真实的应用,*由智能体移植而来*。
智能体将广受喜爱的开源应用移植到 Rust off Rails。它们遇到的每一个磕磕绊绊,都会回馈到框架中。
- 移植自 Fizzy(进行中) ### fizzyer (https://rustoffrails.org/field-tests#fizzyer) Fizzy 的看板和卡片,由智能体用 Rust 重建。
- 移植自 FreeScout(进行中) ### A FreeScout 移植版 (https://rustoffrails.org/field-tests#freescout) 一个共享收件箱的客服台,由另一台机器上的智能体构建。
- 移植自 Uptime Kuma(已完成) ### uptime-offrails (https://rustoffrails.org/field-tests#uptime-offrails) 在 SQLite 和 Postgres 上 1530 个测试全部通过。
开始使用
## 安装插件。描述你的应用。*然后观看。*
### 1 使用 Claude Code(推荐)
``
/plugin marketplace add rust-off-rails/rustoffrails
/plugin install offrails@offrails
``
然后,在一个空目录中:
``
/offrails:new bookshelf:人们跟踪自己读过的书并撰写评论
``
智能体访谈你,确认计划,然后开始构建。技能也可以在普通请求中触发("帮我创建一个新的 Rust Web 应用……")。
### 2 使用 Codex、Cursor 或任何能读取 `AGENTS.md` 的智能体
``
Read /path/to/rustoffrails/AGENTS.md and make me a new app called "bookshelf".
``
生成的应用自带 `AGENTS.md` 和一个内嵌的 `.offrails/`,因此后续的会话无需任何设置。
### 3 然后
用普通语言描述功能,或写成规格文档放在 `product/` 中:
``
Scaffold Book with title:string, author:string, published_on:date, rating:integer.
Users must be logged in to create books.
``
完整教程 (https://rustoffrails.org/start)
你将如何使用它 (https://rustoffrails.org/guide)
阅读文档 (https://rustoffrails.org/docs)
在 GitHub 上点 Star (https://github.com/rust-off-rails/rustoffrails)
相似文章
@ryanlpeterman:关于用AI将整个代码库重写为Rust的思考,@charliermarsh(OpenAI 和 Astral)有趣的开放问题…
一条推文线程,总结了与 Charlie Marsh(Astral/OpenAI)的访谈,讨论了在AI辅助下将整个代码库重写为Rust所面临的挑战和开放问题。
@alphabatcher:54万行Rails代码是进入智能体时代的残酷方式 Garry's List 发布时包含:> 26.2万行应用代码 > …
对AI智能体时代大型Rails代码库的批评,提出转向基于技能的开发方式,使用智能体、Markdown技能和TypeScript实现确定性I/O。
Zerostack – 一个受Unix启发的纯Rust编写的编码助手
Zerostack 是一个完全用 Rust 构建的受 Unix 启发的编码助手,旨在帮助开发人员进行代码生成和自动化。
从Rust到Ruby
开发人员描述使用LLM将一个15,000行的Rust Web应用转换为Ruby on Rails,发现Ruby版本明显更短,并评估了开发速度、安全性和可测试性方面的权衡。
使用AI编写10万行Rust代码的心得(2025)
一位开发者分享了使用AI编程助手构建一个基于Rust的10万行多Paxos共识引擎的心得,实现了显著的生产力提升和性能改进。