Skip to content

这篇长文解释了我当前 Dart 开源工作的重心为什么会收束到这里。

可以把它当作 odroe.dev 首页与 /zh/packages 当前项目入口的长文补充。

需要英文版?阅读 English version

为什么这条主线必须被明确说出来

过去几年里,我在 Dart 和 Flutter 上做过不少开源实验。

真实的问题也随之出现了:能看到的东西很多,但其中真正能组成“当前方向”的东西并不清晰。

所以我开始主动收束焦点。

现在,这条工作线的中心是 Spry

Spry 是一个基于文件路由的服务端框架,面向希望在 Dart VM、Node.js、Bun、Deno、Cloudflare Workers、Vercel 与 Netlify 之间复用同一套代码的团队。它保持小而直接的编写模型,让生成结果显式、可检查,并且能从同一份源码树里生成 OpenAPI 文档与类型化客户端。

对我来说,这个组合比再套一层抽象更重要。

我想要的是一个足够贴近文件系统的框架:把部署目标变成构建问题,而不是重写问题;把生成出来的运行时保持为可见状态,而不是全部藏进巨大的 DSL 里。

这就是为什么 Spry 成了当前的重心。

它不只是一个 package,而是一个可以承接文档、示例、starter、部署指南、AI 辅助工具,以及更清晰公开叙事的项目入口。

为什么先把 Spry 放到最前面

我把 Spry 推到最前面,主要有三个原因。

第一,用户价值足够清楚

你可以用一句话解释 Spry:文件路由、显式输出、跨运行时部署,以及从同一个 Dart 项目生成 OpenAPI 与类型化客户端。

一旦落到具体场景,这件事会更容易被判断。

我希望一个团队可以先在 Dart VM 上启动一套文件路由 API,之后把同样的路由树发布到 Cloudflare Workers 或 Bun,同时继续从同一项目里产出 openapi.json 和类型化客户端。这就是我希望 Spry 能够变得足够无聊、足够稳定的工作流。

第二,它能产生杠杆

如果 Spry 做得更好,围绕它的很多东西都会更容易讲清楚:starter 仓库、运行时适配、文档、调试流程,以及未来面向 AI 辅助开发体验的集成。

第三,它给了我更合理的运营模型

与其继续维护一堆入口薄弱、彼此分散的实验,我更希望围绕一个表面积足够大、路线足够具体的项目来组织当前工作。

Alien Signals 和 Oref 放在什么位置

这并不意味着其他东西就此消失。

alien-signals-dartoref 仍然是当前重点的一部分,只是它们承担的角色不同。

alien-signals-dart 是响应式核心。

它为 Dart 提供了一个轻量且高性能的响应式系统,核心原语是 signal()computed()effect()。我把它看作基础设施:表面积小、组合性强、追求性能,同时尽量减少不必要的仪式感。

oref 则是这种思路在 Flutter 里的开发体验表达。

它建立在 alien_signals 之上,把基于 signals 的状态模型变成真实 Flutter 应用里更顺手的开发方式。它不是为了“再做一个状态管理包”而存在,而是同一套偏好在 Flutter 场景里的实际延伸:更直接、更少模板代码、行为也更容易检查。

所以,我现在理解这组项目的方式很简单:

  • Spry 是框架主线,也是当前最主要的公开入口。
  • alien-signals-dart 是响应式核心主线。
  • oref 是这套响应式模型在 Flutter 侧的应用表达。

它们不是同一个项目,但它们确实属于同一条方向。

接下来我会围绕 Spry 建什么

下一步不是制造更多噪音,而是让 Spry 更容易进入、更容易采纳,也更容易扩展。

这意味着:

  1. 围绕真实起步路径继续收紧文档和示例;
  2. 持续改善不同部署目标下的运行时与发布体验;
  3. 围绕文档、调试和项目脚手架,构建第一方的 AI 辅助工作流;
  4. 继续让生成结果和框架行为保持可检查,而不是变成黑盒魔法。

我已经在推进和 AI 辅助开发体验有关的工作,包括第一方文档、调试 skill、可选的 MCP server 路径,以及面向 coding agents 的第一方 plugin 方向。

这些不是支线任务。

它们本来就是同一个想法的一部分:如果框架的人体工学重要,那么围绕“理解项目、生成项目、调试项目”的工具体验同样重要。

之后的写作会写什么

接下来,我希望长文成为解释这些项目更深层原因的地方,而不是继续只发碎片化更新。

所以后续写作会沿着三条线展开:

  • 围绕 Spryalien-signals-dartoref 的项目长文;
  • 关于运行时设计、响应式系统与框架取舍的架构长文;
  • 关于发布、维护与 AI 辅助工具链的开源运营长文。

简短版本仍然是同一句话:

Spry 之所以成为我当前 Dart 开源工作的中心,是因为它提供了最清晰的用户价值、最强的杠杆,也为我正在构建的其余工作给出了最连贯的下一步。

如果这条方向和你有关,最简单的跟进方式就是:先从 Spry 开始,再把 alien-signals-dartoref 理解成同一条更大方向里的响应式核心和 Flutter 侧表达。

从这里开始

更新于: