开源 SDK,可将电子表格/文档/幻灯片嵌入 SaaS、内部工具或 AI 应用,支持浏览器和 Node.js 双端运行,插件化架构按需引入。
| Spreadsheets | Documents | Presentations | Bases | Boards | PDFs(即将推出) |
高性能、可完全定制的 Office SDK
通过插件架构、Canvas 渲染引擎、公式引擎以及一个可在浏览器和 Node.js 中运行的 Facade API,构建可嵌入的生产力应用。
English | 简体中文 | 繁體中文 | 日本語 | 한국어 | Español
🌐 Website | 📖 Documentation | ✨ Showcase | 📘 API Reference | 📝 Blog
Univer 是一个开源 SDK,用于在自有产品中构建办公应用。它为你提供了电子表格、文档和演示文稿体验所需的组件,而无需被迫使用托管应用或固定 UI。
在以下场景中使用 Univer:
Univer 不只是一个电子表格文件查看器,它是一个用于构建自有生产力界面的框架。
在整个 Univer 产品系列中,办公工具共享一套存储和计算运行时。内容可以在不同工具之间组合和嵌入,关联数据和引用会同步更新。人员和 AI 智能体可以在同一文件中协同工作。参见功能矩阵了解产品覆盖范围,以及 Open Source 和 Pro 了解本仓库的范围。
这些开源项目均基于 Univer Office SDK 构建:
每个项目都有自己的安装指南和 SDK 许可要求。
同构设计:在浏览器中运行 UI 应用,在 Node.js 中运行无头处理。
插件优先架构:每项能力都作为可组合的插件交付,因此可以添加、移除、替换或懒加载功能。
预设模式快速集成:当你希望快速获得一个可用的应用时,使用 presets/ 中策划的插件集合。
插件模式完全可控:当你需要自定义加载、更小的包体积或深度集成时,手动组合包。
Facade API:通过高级 API 操作工作簿、工作表、区域、文档、公式、命令和事件。
Canvas 渲染引擎:支持大型可编辑文档界面,在不同文档类型之间共享渲染层。
可扩展 UI:与 React、Vue、Web Components 和框架特定的应用外壳集成。
Univer 的 AI 和协作能力将智能体操作与交互式编辑和人工审核连接起来:
有关集成详情,请参阅 AI SDK 文档。实时编辑、共享修订和工作树工作流需要相应的 Web SDK 和协作能力;功能包可用性和许可因功能而异。
有关完整的产品覆盖范围和精确组合,请使用插件模式。对于支持的 Sheets、Docs 和 Node 配置文件,预设模式提供了更简洁的策划设置。
插件模式为你提供对包、样式导入、语言环境合并、Facade API 注册和插件配置的更低层级控制。
pnpm add @univerjs/core @univerjs/design @univerjs/docs @univerjs/docs-ui @univerjs/engine-formula @univerjs/engine-render @univerjs/sheets @univerjs/sheets-formula @univerjs/sheets-formula-ui @univerjs/sheets-numfmt @univerjs/sheets-numfmt-ui @univerjs/sheets-ui @univerjs/ui
import { LocaleType, mergeLocales, Univer } from '@univerjs/core'
import { FUniver } from '@univerjs/core/facade'
import DesignEnUS from '@univerjs/design/locale/en-US'
import { UniverDocsPlugin } from '@univerjs/docs'
import { UniverDocsUIPlugin } from '@univerjs/docs-ui'
import DocsUIEnUS from '@univerjs/docs-ui/locale/en-US'
import { UniverFormulaEnginePlugin } from '@univerjs/engine-formula'
import { UniverRenderEnginePlugin } from '@univerjs/engine-render'
import { UniverSheetsPlugin } from '@univerjs/sheets'
import SheetsEnUS from '@univerjs/sheets/locale/en-US'
import { UniverSheetsFormulaPlugin } from '@univerjs/sheets-formula'
import SheetsFormulaEnUS from '@univerjs/sheets-formula/locale/en-US'
import { UniverSheetsFormulaUIPlugin } from '@univerjs/sheets-formula-ui'
import SheetsFormulaUIEnUS from '@univerjs/sheets-formula-ui/locale/en-US'
import { UniverSheetsNumfmtPlugin } from '@univerjs/sheets-numfmt'
import { UniverSheetsNumfmtUIPlugin } from '@univerjs/sheets-numfmt-ui'
import SheetsNumfmtUIEnUS from '@univerjs/sheets-numfmt-ui/locale/en-US'
import { UniverSheetsUIPlugin } from '@univerjs/sheets-ui'
import SheetsUIEnUS from '@univerjs/sheets-ui/locale/en-US'
import { UniverUIPlugin } from '@univerjs/ui'
import UIEnUS from '@univerjs/ui/locale/en-US'
import '@univerjs/design/lib/index.css'
import '@univerjs/ui/lib/index.css'
import '@univerjs/docs-ui/lib/index.css'
import '@univerjs/sheets-ui/lib/index.css'
import '@univerjs/sheets-formula-ui/lib/index.css'
import '@univerjs/sheets-numfmt-ui/lib/index.css'
```typescript
import '@univerjs/engine-formula/facade'
import '@univerjs/ui/facade'
import '@univerjs/sheets/facade'
import '@univerjs/sheets-ui/facade'
import '@univerjs/sheets-formula/facade'
import '@univerjs/sheets-numfmt/facade'
const univer = new Univer({
locale: LocaleType.EN_US,
locales: {
[LocaleType.EN_US]: mergeLocales(
DesignEnUS,
UIEnUS,
DocsUIEnUS,
SheetsEnUS,
SheetsUIEnUS,
SheetsFormulaEnUS,
SheetsFormulaUIEnUS,
SheetsNumfmtUIEnUS,
),
},
})
univer.registerPlugin(UniverRenderEnginePlugin)
univer.registerPlugin(UniverFormulaEnginePlugin)
univer.registerPlugin(UniverUIPlugin, { container: 'app' })
univer.registerPlugin(UniverDocsPlugin)
univer.registerPlugin(UniverDocsUIPlugin)
univer.registerPlugin(UniverSheetsPlugin)
univer.registerPlugin(UniverSheetsUIPlugin)
univer.registerPlugin(UniverSheetsFormulaPlugin)
univer.registerPlugin(UniverSheetsFormulaUIPlugin)
univer.registerPlugin(UniverSheetsNumfmtPlugin)
univer.registerPlugin(UniverSheetsNumfmtUIPlugin)
const univerAPI = FUniver.newAPI(univer)
univerAPI.createWorkbook({})
Preset(预设)是一组精选的 Univer 插件集合,已包含所需的 Facade API 注册和样式。
pnpm add @univerjs/presets @univerjs/preset-sheets-core
import { UniverSheetsCorePreset } from '@univerjs/preset-sheets-core'
import UniverPresetSheetsCoreEnUS from '@univerjs/preset-sheets-core/locales/en-US'
import { createUniver, LocaleType, mergeLocales } from '@univerjs/presets'
import '@univerjs/preset-sheets-core/lib/index.css'
const { univerAPI } = createUniver({
locale: LocaleType.EN_US,
locales: {
[LocaleType.EN_US]: mergeLocales(UniverPresetSheetsCoreEnUS),
},
presets: [
UniverSheetsCorePreset({
container: 'app',
}),
],
})
univerAPI.createWorkbook({})
你的页面需要一个容器:
<div id="app" style="height: 100vh"></div>
更多内容请参阅 Installation & Basic Usage 指南、createUniver 参考文档以及 Facade API 参考。
🧩 Preset 模式 vs 插件模式
请保持所有 @univerjs/* SDK 包与同一协调的 Univer 发布线保持同一版本。独立发布的包(包括 @univerjs/icons 和 @univerjs/icons-svg)使用 package manifest 中声明的兼容版本,而非 SDK 版本。如果你使用了 Univer Pro 包,请保持 @univerjs-pro/* 与匹配的协调发布线对齐。
关于 API 兼容性预期、实验性 API、内部 API 和弃用规则,请参阅 API Stability Policy。
浏览器运行时:Univer 以 Chrome 88 为编译目标,目标是支持 Edge >=88、Firefox >=90、Chrome >=88、Safari >=14.1 和 Electron >=12。
Polyfill:Univer 依赖 Intl.Segmenter。如果你的目标浏览器或运行时不提供此 API,需要添加 @formatjs/intl-segmenter 等 polyfill。
构建工具:我们推荐 Vite、esbuild 或 Webpack 5。如果你的构建工具不支持 package.json 中的 exports 字段(Webpack 4 中常见),可能需要额外的路径映射。
React:Univer 的视图层基于 React 18 构建,支持 React 18 和 19,并对 React 16.9+ 和 17 提供最低兼容性支持。
Node.js 运行时:Headless Univer 支持 Node.js >=18.17.0。开发此 monorepo 需要 Node.js >=22.18。
🛠️ 你可以用它构建什么
Sheets 是目前最成熟的产品面。Docs 和 Slides 共享 Univer 的架构,并在同一 SDK 中持续演进。
🔓 开源与 Pro
本仓库包含 Univer 的开源核心和第一方 OSS 插件。Univer Pro 作为商业扩展层独立开发,提供高级产品面、协作、服务器功能和企业集成。
Pro 功能记录在 Univer Pro 指南中。这些内容有意在此分离,以保持 OSS 包表面的清晰。
本仓库中的 OSS 包依据 Apache-2.0 许可证,旨在独立发挥作用。Univer Pro 是可选的,使用公共 OSS SDK API 时不需要它。
OSS 包中的 bug、回归和安全问题应在 OSS 仓库中报告和修复,即使存在相关的 Pro 功能也是如此。
OSS 文档不应暗示 Pro 专属功能在公共 @univerjs/* 包中可用。Pro 专属 API、包和部署路径应明确命名。
当某个 OSS 功能有 Pro 增强时,OSS 行为应独立记录,以便用户无需先阅读商业文档即可评估开源表面。
Core SDK:dream-num/univer,即此 monorepo。
Presets:本仓库的 presets/,为浏览器和 Node.js 应用精选的插件集合。
AI 智能体技能:dream-num/univer-sdk-skills,供 AI 智能体在 Univer 集成、Pro 功能、插件开发和 Node 后端方面使用的可复用指令。参阅 AI Skills 指南。
文档:docs.univer.ai,包括 Sheets、Docs、Slides、recipes 和 Pro 指南。
Web SDK:在浏览器和 Node.js 中嵌入编辑器和无头处理。
Server SDK:协作和文件转换,与你应用的存储、身份认证和权限集成。
AI SDK:用于检查、编辑和验证 Office 内容的智能体工作流。
API 参考:docs.univer.ai/reference,Facade API 和生成的 API 参考。
示例和展示:Univer Showcase 及本仓库的 examples/。
AI 原生表格:dream-num/univer-mcp,Univer Platform / MCP 集成,用自然语言驱动 Univer Sheets。
.
├── packages/ 核心包、引擎、文档类型、UI 插件和功能插件
├── examples/ 用于本地浏览器开发的一体化 Vite 工作台
├── common/ 共享的内部工具、Storybook 和工具函数
├── tests/ 额外的集成测试项目
└── docs/ 架构笔记、图片和仓库本地文档
各包的 README 位于 packages/ 下对应包的旁边。
git clone https://github.com/dream-num/univer.git
cd univer
pnpm install
pnpm dev
在提 PR 之前请阅读 CONTRIBUTING.md。
值得在深入修改之前阅读的仓库本地笔记:
Building Isomorphic Univer:如何拆分浏览器、Node.js、UI 和共享插件逻辑。
API Stability Policy:stable、experimental、internal、deprecated 和 breaking-change 预期。
Contributing to Facade API:FUniver、FWorkbook、FRange 及相关 Facade 类的 API 设计预期。
Naming Convention:文件、文件夹、接口、插件、命令和依赖注入 token 的命名约定。
Fixing Memory Leaks:Univer 实例的常见泄漏模式和调试工作流。
Architecture TLDRs:公式引擎、Web Worker、权限、选择和 ref-range 行为的精简笔记。
在 GitHub Discussions 中提问。
加入 Discord 与社区交流。
关注 Twitter / X 和 YouTube。
参与之前请阅读行为准则。
如果你认为发现了安全问题,请遵循安全策略。
Univer 接受社区和赞助商的支持。你可以通过 Open Collective 支持该项目。
Copyright (c) 2021-present DreamNum Co., Ltd.
Licensed under the Apache-2.0 license.