GitHub Explorer
📰 公众号已发布 2026-09-25

GitHub推荐:18K Stars 国产 Office SDK 登顶:Univer 凭什么让 AI Agent 当成 Office Harness

GitHub: https://github.com/dream-num/univer

一句话总结

Univer 是 Apache-2.0 商用友好的「同构 Office SDK」——同一份运行时同时驱动浏览器 Canvas 渲染与 Node headless 计算,把 Sheets / Docs / Slides / Bases 四件套统一成可嵌入的产品族,并把 AI Agent 作为一等公民接进来。

值得关注的理由

  1. 跨度罕见:一个 TypeScript monorepo 同时维护 60+ 个子包、150 万行级公式引擎、SpreasheetBench 跑出接近人类水平的 68.86%(Copilot in Excel 仅 57.2%),并且已经接入了 Claude Code / OpenCode / Kimi Work 等 AI Agent 平台。
  2. 架构创新密度高:自研 DI 容器 @wendellhu/redi、Command/Mutation/Operation 三态分治、Isomorphic 渲染(同一代码 Web + Node 双跑)、RenderUnit 子 injector 隔离、JSONX 自定义 OT subtype——任何一项单拎出来都是一份长文。
  3. 事实标准的潜力:作为 Luckysheet(16K stars,停滞)的官方继任,已被大量国内 SaaS、低代码、BI 工具嵌入;这是少数把 Office 三件套做成「同源共享渲染层」的开源 SDK,且明确给 AI Agent 留了位。

项目展示

Univer SDK 官方横幅 「The next Office experience. Yours to create.」官方 hero 图。

Workspace 小应用与电子表格联动 Workspace 把 metrics / charts / 控件绑定到单元格,展示 Sheets 与小应用的联动。

▶ Build a collaborative tool with Univer Office SDK(YouTube) — 官方 90 秒演示,展示了多人协作 + AI 工作流。

Univer 在 README 中嵌入了 30+ 张演示截图;这里精选三张最直观的一张。完整作品集参见 univer-workspace 示例仓 与 dsh-univer-office 内部办公实例。

项目画像

维度数据
GitHubhttps://github.com/dream-num/univer
Star / Fork18,093 / 1,548
代码行数1,017,431(TypeScript 87.9% / TSX 9.2% / YAML 1.6% / JSON 1.1%)
项目年龄47.9 个月(首次提交 2022-09-29)
开发阶段密集开发(v1.0.2 / 149 tag / 100 release)
贡献模式公司驱动 + 社区协作(92 贡献者,主作者「白熱」占 21.3%,前 5 名合计过半)
热度定位大众热门(同赛道唯一兼具 Apache-2.0 + Isomorphic + AI 原生的项目)
质量评级代码优秀 / 文档优秀 / 测试充分

作者视角:为什么存在这个项目

创始人/作者背景

账号是 DreamNum Inc.(组织账号,不是个人),主架构师「白熱 / jikkai」是 @wendellhu/redi DI 容器与 OT-JSON 适配层 JSONX 的作者。前身 Luckysheet(16K stars)停止迭代后,团队把全部精力投入 Univer——这是少见的「不被分叉分走」的案例,说明品牌和仓库迁移策略成功。DreamNum 自己在用 Univer 做内部 SaaS(dsh-univer-office 400 ⭐),是真实的 dogfooding。

问题判断

作者识别了三个深层矛盾:

  1. AI Agent 缺 Office 表面——LLM 输出公式需要「能运行、能验证、能回滚」的运行时,纯导出 xlsx 不够。
  2. 企业 SaaS 缺开源 Office SDK——SpreadJS 闭源付费,onlyOffice 是自托管套件,AG Grid 只是数据网格。
  3. 数据模型必须与视图解耦——Univer 的 IWorkbookData / IDocumentData 既驱动 Canvas 渲染也驱动 Node headless 计算,这是同构架构的物理前提。

解法哲学

明确选择「不做的事」与「做的事」同样重要:

  • 不做:完整 Excel 兼容(接受部分函数子集)、客户端独立编译(强制 plugin 模式)、GraphQL/REST 风格 API(只给 Facade)。
  • 做:插件分层(logic / ui 强制拆分包)、Command/Mutation/Operation 三态分治、Isomorphic(同一运行时双端)、Canvas 自研渲染。

战略意图

  • 核心产品:Apache-2.0 OSS 抢占「嵌入式办公 SDK」赛道。
  • 商业化路径:「open-core」清晰——OSS 提供 Sheets/Docs/Slides 数据模型 + UI;Pro 闭源售卖实时协作服务端、文件交换、打印、透视表等。
  • AI 卡位:univer-mcp / univer-sdk-skills / 已接入 Claude Code / OpenCode / OpenClaw / Hermes / Codex / WorkBuddy / Kimi Work——这是把 Office 表面变成「AI 的脚手架」。

核心价值提炼

创新之处(按新颖度 × 实用性排序)

  1. Command / Mutation / Operation 三态分治 + IExecutionOptions 多语义标记

    • CommandType 把「用户动作 / UI 变更 / 持久化变更」显式分类;叠加 onlyLocal / fromCollab / syncOnly / fromChangeset 四个 execution 标记。
    • 避免了「redo 时又把 undo 同步给对端」一类死循环问题,也根治了 #3483 这种 OT 回滚路径 bug。
  2. Isomorphic via IMessageProtocol + 两种 transport

    • IMessageProtocol 接口(send + onMessage$)抽象 Web Worker 与 child_process.fork;上层 Channel 完全 transport-agnostic。
    • 同一份 UniverSheetsPlugin + UniverFormulaEnginePlugin 既能在浏览器跑,也能在 Node fork 的子进程跑——是「一百万公式秒级」的物理基础。
  3. JSONX = ot-json1 + 自定义 Subtype

    • packages/core/src/docs/data-model/json-x/json-x.ts 注册自定义 subtype TextX(620 行),把富文本 retain/insert/delete 映射为标准 JSON0 Op。
    • 没引 Yjs / ShareDB,避免「为 OT 重写文档 schema」的陷阱——值得任何自定义富文本编辑器借鉴。
  4. RenderUnit 子 injector + activate/deactivate 隔离

    • 每个 unit = 一个 Engine + Scene + 子 injector;_activated$ = BehaviorSubject<boolean> 控制 unit 是否参与渲染。
    • 解决「多 widget 同屏 + 单 widget 隐藏时不能丢状态」矛盾——Figma 同源场景的解法。
  5. 公式引擎 AST + ValueObject + Dependency Tree 三层抽象

    • engine-formula/src/engine/ 分 ast-node/ / value-object/ / dependency/;ArrayValueObject 支持隐式数组,dependency-tree.ts 标记 FDtreeStateType 实现增量重算。
    • 是少数能在 web 端实现完整 Excel 公式语义(含隐式交集)的引擎。

可复用的模式与技巧

  1. composeInterceptors<M, C> + priority 排序:洋葱圈式中间件,core/src/common/interceptor.ts 实现;任何需要「按优先级链式改写单元格值 / 样式」的场景都该用——尤其 AOP 风格的「权限校验 → 数据脱敏 → 公式替换」管道。
  2. Plugin Lifecycle Stage(Starting / Ready / Rendered / Steady):类似 VS Code Extension activationEvents 但更轻,任何 monorepo SDK + 多插件 + 异步初始化都该借鉴。
  3. @DependentOn 装饰器 + DFS 拓扑排序 + 自动注册默认依赖:开发者写 @DependentOn(EnginePlugin, UIPlugin) 即可,框架在缺失依赖时自动用默认配置注册。
  4. Locale Namespace 严格归属包(docs/NAMING_CONVENTION.md 强制):每个包只能引用自己 namespace 下的 i18n key,避免「common button.cancel」式共享桶。
  5. FUniver.extend() + TS Module Augmentation:纯手写、无 reflect-metadata 的 facade 扩展机制;任何「基础类 + 多源扩展 + 类型合并」需求都该用。

关键设计决策

决策问题方案Trade-off可迁移性
插件分层 + 严格依赖方向60+ 包共存避免循环依赖每个包按 <business>-<feature> 命名,logic/ui 物理拆分包数量爆炸(74 个 npm package)极高
Command/Mutation/Operation 三态Undo/Redo、协作、UI 记录同时支持三态枚举 + IExecutionOptions 多语义标记心智成本更高高
DI 容器 @wendellhu/redi 自研跨端零反射 + 多端可用createIdentifier<T>() + @Inject 装饰器,无 reflect-metadata必须写显式 constructor中
Isomorphic = 同一运行时 + 两种 transport前后端共用业务逻辑IMessageProtocol 抽象 + Web Worker / child_process 双实现必须 fork 子进程高
RenderUnit 子 injector多 widget 隔离每个 unit 创建 child injector + activate/deactivate必须严格 Dispose高
Canvas-Based Rendering 跨产品共享Sheet/Doc/Slide 共享渲染共享 Scene + RenderComponent<T,U,V> 基类 + Extension 注册机制Scene 必须做得足够通用中
Facade API + Module Augmentation60+ 包扩展一个 FUniver 根类FUniver.extend() 静态方法 + TS declaration merging比 HOC 啰嗦但完全可类型化高
单元类型隔离 + 拓扑排序Sheets/Docs/Slides 同页隔离UniverInstanceType 分桶 + DFS + @DependentOn必须为每个插件标注 type中

竞品格局与定位

竞品对比矩阵

维度UniverSpreadJS(商业)Luckysheet(前作)Handsontable
Stars18K闭源付费16K(停滞)21K
LicenseApache-2.0商业付费MIT商业(社区版)
单元类型Sheets/Docs/Slides/Bases/PDFSheets 为主SheetsSheets
IsomorphicWeb + Node 同一运行时仅浏览器仅浏览器仅浏览器
AI 原生MCP / SDK skills无无无
公式引擎自研 AST + 隐式数组闭源 Excel 内核简版简版
渲染Canvas(多 unit 共享 Scene)CanvasDOMDOM
协作OSS 无,Pro 闭源商业版自带无商业版

差异化护城河

  • 技术护城河:Isomorphic 架构 + 自研 DI + JSONX 自定义 OT subtype + 公式引擎隐式数组——这套组合在 OSS 领域没有等价物。
  • 生态护城河:60+ npm package 的模块化生态、企业级集成案例(dsh-univer-office 等)、AI Agent 多平台接入。
  • 信任护城河:Apache-2.0 + 47 个月稳定迭代 + 团队从 Luckysheet 平滑迁移过来的连续性。

竞争风险

  • SpreadJS V19+ 的反击:Excel 兼容性仍是 SpreadJS 领先(约 90%+ 测试用例通过),且闭源商业可以快速集成 AI 能力。
  • Microsoft Loop / Notion 路线:如果用户只是想「云端协作 + AI」,Notion / 飞书文档可能比 Univer 套壳更顺手——但这是「文档优先」而非「数据模型优先」路线。
  • onlyOffice 桌面化扩张:如果 onlyOffice 把 SDK 拆出来商用,会正面碰撞 Univer 的「嵌入式」卖点。

生态定位

在「办公生产力生态」中扮演**「Office 三件套的可编程运行时底座」**角色——既不是 SaaS(不像 Notion / Loop),也不是纯组件库(不像 Handsontable / AG Grid),而是把二者优点整合的「AI Agent 时代的 Office Harness」。填补了「开源 + 可嵌入 + 同构 + AI 原生」四象限的空白。

套利机会分析

  • 信息差:Univer 在中文圈已是大热门(30K+ 合并 stars),但在英文开发者圈仍被低估。SpreadsheetBench 上 Univer 跑赢 Copilot in Excel 的事实,国际开发者社区尚未充分传播。
  • 技术借鉴:JSONX(OT subtype)+ Isomorphic transport + RenderUnit 三件套,几乎可以原样搬到任何「多端协同 + 自定义数据模型」项目——比如在线 IDE、白板工具、3D 编辑器。
  • 生态位:填补了「开源 + 可嵌入 + 同构 + AI 原生」四象限的空白——这是事实上的新生态位,竞争者寥寥。
  • 趋势判断:v1.0 之后 2026-07/08 双月提交数创历史新高(185/188),说明商业化需求牵引持续强;AI Agent 平台的快速接入是顺势而为——趋势在 Univer 这一侧。

风险与不足

  • 学习曲线陡:plugin 模式 50+ 行 import 起;Facade + Command + DI 体系需要时间消化。
  • 生态以中英为主:其他语言依赖社区,质量参差。
  • 关键能力 Pro 闭源:实时协作服务端、文件交换、打印、透视表、迷你图、增强公式、编辑历史——B 端要这些得买授权。
  • 历史包袱:从 Luckysheet → Univer 是重大重写,老 API 无法平滑迁移。
  • Benchmark 公开缺位:README 宣称「1000 万单元格 / 一百万公式秒级 / 200 人协同」,但仓库内未找到对应 benchmark 代码——第三方复现可信度待验证。
  • 打磨期 bug 密度:fix:feature 比例 66% : 14.5%,打磨期健康但仍意味着生产环境需谨慎做版本锁定。

行动建议

  • 如果你要用它:
    • 选 Preset 模式快速验证(30 分钟跑通 Sheet Demo);
    • 走 Facade API 而非直接 DI(避免后期重构成本);
    • 锁定版本号 + 关注 BREAKING CHANGE: 标记;
    • 关键场景(实时协作 / 大数据 / PPT 美工)评估 Pro 付费意愿。
  • 如果你要学它:
    • 重点看 packages/core/src/univer.ts + command.service.ts + plugin.service.ts;
    • 读 docs/ISOMORPHIC.md + NAMING_CONVENTION.md + FIX_MEMORY_LEAK.md 三份纪律文档;
    • 跟 engine-formula/src/engine/dependency/dependency-tree.ts 学公式增量重算;
    • 跟 engine-render/src/render-manager/render-unit.ts 学多 unit 隔离。
  • 如果你要 fork 它:
    • 不要试图「再做一遍 Office 三件套」——护城河在公式引擎 + 渲染层 + 协作层;
    • 可以做的是「垂直场景 SDK」——比如教育行业的批改 SDK、医疗行业的病历 SDK、AI 行业的报表生成 SDK;
    • 改造 IMessageProtocol 接入自己的 AI Agent 平台。

知识入口

资源链接
DeepWikihttps://deepwiki.com/dream-num/univer
Zread.aihttps://zread.ai/dream-num/univer
官方文档https://docs.univer.ai
官方博客https://univer.ai/blog
架构对比(vs SpreadJS)https://blog.univer.ai/posts/univer-vs-spreadjs-comprehensive-analysis-of-the-next-generation-open-source-collaborative-engine-and-traditional-commercial-spreadsheet-controls
在线 Demohttps://univer.ai(官网内嵌 Playground)
关联论文无(OT/CRDT 学术文献丰富,但 Univer 本身的论文尚未发表)

相关报告