在 AI 驱动的开发工具浪潮中,Onlook 以其独特的定位脱颖而出 —— 它被社区称为 "设计师的 Cursor",是一个开源的 AI-first 设计工具,让开发者能够可视化地构建、样式化和编辑 React 应用。与传统的设计到代码转换工具不同,Onlook 直接在运行的 Next.js + Tailwind CSS 项目之上提供了一个 WYSIWYG(所见即所得)的 AI 优先层,实现了设计与代码的实时双向同步。
架构概览:Monorepo 与模块化设计
Onlook 采用现代 monorepo 架构,将整个系统划分为多个相互关联的应用和包。根据官方架构文档,其目录结构清晰地反映了模块化设计思想:
onlook/
├── apps/
│ ├── web/ # Web 应用组件
│ │ ├── client/ # 客户端应用 (Next.js)
│ │ ├── preload/ # 预加载脚本 (TypeScript)
│ │ └── server/ # 服务端代码 (Fastify.js)
│ └── backend/ # 后端 (Supabase)
├── packages/
│ ├── models/ # 共享数据模型和类型
│ ├── ui/ # 可复用 UI 组件和主题 (ShadCN + TailwindCSS)
│ ├── ai/ # AI 集成工具 (AI SDK)
│ └── schema/ # 共享应用模式 (Drizzle ORM)
└── docs/ # 文档 (Fumadocs + Nextjs)
这种架构设计使得各个模块能够独立开发、测试和部署,同时保持高度的内聚性。前端主要基于 Next.js 和 TailwindCSS,后端使用 Supabase 处理认证、数据库和存储,ORM 层采用 Drizzle,而 AI 集成则通过 AI SDK 实现。
可视化编辑的核心机制:DOM 映射与代码同步
Onlook 最核心的创新在于其可视化编辑机制。从技术角度看,Onlook 本质上是一个指向本地运行应用的浏览器,能够像 Chrome DevTools 一样操作 DOM。但与传统开发工具不同,Onlook 建立了一套完整的 DOM 到源代码的映射系统。
代码映射的实现原理
为了实现可视化编辑到代码的转换,Onlook 在构建时向 DOM 元素注入一个特殊属性,这个属性类似于 sourcemap,指向代码中的具体位置。该属性提供了代码块的位置信息和组件作用域。当用户在画布上编辑元素时,系统会:
- 定位源代码:通过注入的 DOM 属性找到对应的代码位置
- 解析 AST:将代码解析为抽象语法树(AST)
- 注入样式:在 AST 中插入或修改样式信息
- 写回代码:将修改后的 AST 重新生成为代码并写回源文件
这个过程的关键在于 "非持久化直到写入代码" 的设计哲学。所有可视化编辑首先通过 CSS 样式表或 DOM 操作注入到页面中,这些更改在用户确认之前不会影响源代码。这种设计既保证了实时预览的流畅性,又避免了意外修改代码的风险。
框架无关的设计理念
Onlook 的技术实现是框架无关的。正如架构文档所述:"这种技术是框架无关的,因为我们可以为另一个框架交换不同的编译器。它可以适用于任何代码库,因为我们只使用不需要任何自定义代码的开放标准。"
这种设计使得 Onlook 理论上可以支持任何以声明方式显示 DOM 元素的框架(如 JSX/TSX/HTML)。虽然目前主要专注于 Next.js 和 TailwindCSS,但其架构为未来的扩展奠定了基础。
实时样式编辑的工程实现
实时样式编辑是 Onlook 的核心功能之一,其实现涉及多个技术层面的协同工作。
编辑循环的工作流程
Onlook 的编辑循环遵循一个精心设计的流程:
- 画布交互:用户在画布上选择、拖拽、调整元素
- DOM 操作:系统通过注入的样式或直接 DOM 操作更新预览
- 动作记录:所有更改被记录为可序列化的动作(Actions)
- 代码生成:当用户确认更改时,系统将动作转换为代码修改
- 实时同步:修改后的代码立即重新编译,更新预览
这个循环的关键在于 "动作"(Actions)的概念。所有更改都被存储为动作,这使得它们可以被序列化、存储和重现。这种设计不仅支持撤销 / 重做功能,还为未来的协作编辑和 AI 代理生成动作奠定了基础。
TailwindCSS 的深度集成
Onlook 对 TailwindCSS 的支持尤为深入。当用户通过可视化界面调整样式时,系统能够:
- 智能类名生成:根据用户的拖拽、调整操作生成合适的 Tailwind 类名
- 响应式适配:在调整画布大小时,自动维护响应式断点
- 设计系统约束:强制执行预定义的设计令牌(颜色、字体、间距等)
例如,当用户将一个卡片拖到新的网格单元格时,系统不仅会更新布局相关的 Tailwind 类,还会确保这些更改在所有响应式断点下保持一致。
AI 辅助代码生成的架构设计
Onlook 的 AI 功能不仅仅是简单的代码补全,而是一个完整的 "AI 配对设计师" 系统。
AI 技术栈的组成
Onlook 的 AI 子系统基于多个技术组件构建:
- AI SDK:作为 LLM 客户端,提供统一的 AI 接口
- OpenRouter:作为主要的 LLM 模型提供商
- Morph Fast Apply 和 Relace:用于快速应用模型
这种多提供商架构确保了系统的可靠性和性能,同时为未来的模型切换提供了灵活性。
上下文感知的 AI 交互
Onlook 的 AI 聊天功能具有深度上下文感知能力。当用户描述设计变更时,AI 不仅理解自然语言指令,还能够:
- 读取整个代码库:AI 能够访问项目的完整代码上下文
- 尊重自定义约定:理解并遵循项目特定的主题、命名约定和设计模式
- 提供可视化覆盖:在修改代码之前,在画布上展示 AI 建议的视觉结果
这种上下文感知使得 AI 建议更加准确和实用。例如,当用户要求 "使这个英雄区域在悬停时变暗" 时,AI 不仅会生成相应的 React + Tailwind 代码差异,还会立即在画布上展示效果,让用户能够在应用更改前进行预览。
动作生成与代码转换
AI 生成的建议最终被转换为可执行的 "动作"。这些动作与用户通过界面交互生成的动作具有相同的结构,确保了系统的一致性。这种设计使得:
- AI 与手动编辑的统一:无论是 AI 生成的还是手动操作的更改,都使用相同的机制处理
- 可序列化的协作:动作可以被序列化和传输,支持多人协作
- 历史追踪:所有动作都被记录,支持完整的版本历史
多用户协作同步机制
Onlook 的协作功能借鉴了 Google Docs 的设计理念,实现了真正的实时多人编辑。
实时同步架构
多用户协作的核心是动作的实时同步。当多个用户同时编辑同一个项目时:
- 动作广播:每个用户的编辑动作被序列化并广播到其他用户
- 冲突解决:系统使用操作转换(Operational Transformation)或冲突解决策略处理并发编辑
- 状态同步:所有用户的界面状态保持同步,包括游标位置、选择状态等
游标与评论系统
Onlook 实现了类似 Google Docs 的游标系统,让协作者能够看到彼此的:
- 实时游标位置:显示其他用户当前正在编辑的元素
- 选择状态:高亮显示其他用户选择的元素范围
- 评论标记:支持在 DOM 节点上添加评论,便于设计评审
这种视觉反馈极大地改善了协作体验,让团队成员能够直观地了解彼此的工作状态。
共享预览与部署
Onlook 还提供了便捷的共享和部署功能:
- 可共享预览链接:生成实时更新的预览链接,每次保存后自动更新
- 一键部署:支持一键发布到 Vercel、Netlify 或自定义域名
- 检查点回滚:系统保留所有更改的历史检查点,支持快速回滚到任意版本
技术挑战与工程考量
在实现这样一个复杂的可视化编辑系统时,Onlook 团队面临多个技术挑战:
性能优化
实时编辑对性能要求极高。Onlook 通过以下策略优化性能:
- 增量更新:只更新受影响的 DOM 部分,避免全页面重绘
- 虚拟化:对于大型组件树,使用虚拟化技术减少内存占用
- 懒加载:按需加载代码和资源,提高初始加载速度
代码质量维护
可视化编辑生成的代码需要保持高质量。Onlook 通过:
- 设计系统约束:强制执行一致的设计模式
- 代码格式化:自动应用代码格式化规则
- 组件提取:支持将重复的 JSX 提取为可复用组件
扩展性与维护性
为了确保系统的长期可维护性,Onlook 采用了:
- 插件架构:支持通过插件扩展功能
- 类型安全:全面使用 TypeScript 确保类型安全
- 测试覆盖:建立完整的测试套件,包括单元测试和集成测试
实际应用场景与最佳实践
基于 Onlook 的架构特点,以下是一些实际应用场景和最佳实践:
设计系统开发
Onlook 特别适合设计系统的开发和维护。团队可以:
- 可视化定义令牌:在画布上直接定义颜色、间距、字体等设计令牌
- 实时组件开发:同时查看组件的外观和代码实现
- 一致性检查:利用 AI 检测设计偏差并提出重构建议
快速原型开发
对于快速原型开发,Onlook 提供了完整的流程:
- 从文本或图像开始:使用 AI 根据描述或参考图像生成初始界面
- 迭代优化:通过可视化编辑快速调整布局和样式
- 代码导出:随时将设计导出为生产就绪的代码
团队协作工作流
在团队协作场景中,建议采用以下工作流:
- 设计评审:使用评论功能在具体 DOM 节点上进行设计讨论
- 并行开发:多个设计师 / 开发者同时处理不同部分
- 版本控制:利用检查点功能管理设计迭代
未来发展方向
虽然 Onlook 仍在积极开发中,但其架构为未来的扩展提供了坚实基础。可能的发展方向包括:
框架扩展
当前主要支持 Next.js + TailwindCSS,未来可能扩展到:
- 其他 React 框架:如 Remix、Gatsby 等
- 其他 CSS 方案:支持 CSS-in-JS、Sass 等
- 非 React 生态:探索 Vue、Svelte 等框架的支持
AI 能力增强
随着 AI 技术的发展,Onlook 可能集成:
- 多模态输入:支持草图、手势等更自然的输入方式
- 个性化学习:根据用户习惯优化 AI 建议
- 自动化测试:AI 辅助生成测试用例和验证设计一致性
企业级功能
对于企业用户,可能需要:
- SSO 集成:支持企业身份验证系统
- 审计日志:完整的操作审计和合规性支持
- 性能监控:集成应用性能监控工具
结语
Onlook 代表了 AI-first 设计工具的新方向,它不仅仅是另一个可视化编辑器,而是一个完整的开发环境,将设计、代码和 AI 深度集成。其架构设计体现了现代 Web 开发的最佳实践:模块化、可扩展、框架无关。
通过深入分析 Onlook 的架构,我们可以看到可视化编辑工具的未来趋势:不再是简单的代码生成器,而是智能的、协作的、实时的开发伙伴。随着项目的不断成熟和社区的贡献,Onlook 有望成为连接设计师与开发者的重要桥梁,真正实现 "设计即代码" 的愿景。
对于开发者而言,理解 Onlook 的架构不仅有助于更好地使用这个工具,也为构建类似系统提供了宝贵的技术参考。在 AI 驱动的开发新时代,这种深度集成的可视化开发环境可能会成为标准配置,而 Onlook 正在这个方向上迈出坚实的一步。
资料来源:
- Onlook GitHub 仓库:https://github.com/onlook-dev/onlook
- Onlook 架构文档:https://docs.onlook.com/developers/architecture