简介技术栈与兼容性声明

技术栈与兼容性说明

你可以在 StackShare 了解我们所使用的技术栈。

Univer SDK 兼容性

Univer SDK 是指 Univer 中以 TypeScript 编写,以 npm 包的形式发布的代码。Univer SDK 的编译目标是 Chrome 70,但这并不意味着 Univer 能够完全支持所有主流环境。我们会尽力确保 Univer 在以下浏览器和 Node.js 环境中能够正常运行:

EdgeEdgeFirefoxFirefoxChromeChromeSafariSafariElectronElectronNode.js
最近两年最近两年最近两年最近两年最近两年v18.17.0 及之后的版本

如果遇到无法兼容的情况,请先借助对应的 polyfill 来解决,如果仍然无法解决,请提交 issue

SDK 技术栈

工具说明
TypeScriptSDK 代码完全由 TypeScript 编写,极大地提升了代码可维护性的同时也提升了用户的开发体验。我们使用 typedoc 生成详细的 API 查询手册。我们会定期更新到最新的 TypeScript 版本。
redi我们团队自行开发的轻量且强大的依赖注入工具。Univer SDK 使用 redi 来管理内部成百上千的模块,使得代码更容易组织和维护。
CanvasUniver 使用 Canvas 来渲染文档内容,通过一系列优化极大提升了大文档的性能表现。
React我们使用 React 来构建除了文档内容之外的用户界面,诸如工具栏、浮动面板、侧边栏和右键菜单等等。我们支持 16.8.0 及之后版本的 React。
TailwindCSS, Radix我们正逐步迁移到 TailwindCSS 和 Radix 以让我们的组件和样式系统能够更加容易定制。我们会持续到最新的版本。
RxJSRxJS 是我们在代码库中实现反应式编程模式的默认解决方案。我们目前支持 RxJS 7.0.0 及以上版本。
Decimal.js, numfmt我们在公式引擎中使用这两个库来解决计算精度和数字格式的问题。
Vitest, Playwright我们专注于通过自动化来确保代码质量。我们使用 vitest 进行单元测试和集成测试,使用 playwright 进行 e2e 测试和 vasual 比较测试。
Operational Transformation我们使用操作转换来处理并发编辑。我们自研了协同编辑引擎和冲突解决算法。
json1我们在协同模块当中的一部分使用了 json1,主要用于 Univer 文档和幻灯片。

Univer 服务端技术栈

工具说明
Go, Python, NestJS, Node.jsGolang 在处理高并发和快速网络 I/O 方面表现出色,让 Univer 协作引擎可以轻松处理大量的客户端连接请求;Python 是目前最流行的 AI 应用开发语言,借助 Python,我们可以采用前沿的框架,快速开发我们的 AI 应用;Node.js 使得我们可以在服务端使用 Univer SDK,让用户能以一套 API 在两个端编写业务逻辑,同时还支持服务端计算、服务端渲染、解决协同编辑冲突等特色功能。
Kubernetes, Docker Compose我们的目标是在部署灵活性和易用性之间取得平衡,使客户能够快速启动并开始在系统中集成。为了满足客户的多样化需求,我们同时支持 Kubernetes 和 Docker Compose。
PostgreSQL, Redis, RabbitMQ我们的主要存储层组件。
Autogen, Langchain我们基于 Autogen 构建了灵活和复杂的 AI 工作流。借助 Langchain 活跃的生态链,我们快速开发了丰富、实用和有趣的 AI 功能。
Sentry我们使用 Sentry 收集系统中的错误,以便我们能持续跟进和处理它们。
Prometheus, Grafana, Jaeger, Loki我们主要的系统观测工具。
gRPC, Protobuf服务之间主要采用 gRPC 作为传输协议,并基于 protoful 文件自动生成不同编程语言的类型定义,以确保全局的一致性。

研发工具

工具说明
GitHubUniver 团队的工作围绕 GitHub 进行,包括项目管理、质量管理、代码评审以及版本管理。我们的工程师在 GitHub Actions 上创建了大量的流水线任务,包括单元测试(包含测试覆盖率检查)、集成测试、端到端测试、内存泄露测试,性能测试、自动化部署等等,这些工具使得我们能够在快速迭代的同时保持代码质量。
Coder我们基于 Coder 打造了云端开发环境,并基于 Istio 开发了我们自己的流量染色和路由分发系统,使得我们的工程师能够方便地进行系统集成和测试,极大地提升了我们的需求研发和缺陷修复速度。
Artillery性能测试的主要工具。