26 KiB
スプレッドシート、ドキュメント、プレゼンテーションを構築するためのフルスタックでアイソモーフィックなオフィス SDK。
Univer は、プラグインアーキテクチャ、Canvas ベースのレンダリング、 数式エンジン、ブラウザと Node.js の両方で使える Facade API により、 組み込み型の生産性体験を構築できます。
English | 简体中文 | 繁體中文 | 日本語 | 한국어 | Español
📖 ドキュメント | ✨ ショーケース | 📘 API Reference | 📝 ブログ
✨ Univer とは?
Univer は、自分のプロダクト内にオフィスアプリケーションを作るためのオープンソース SDK です。スプレッドシート、ドキュメント、プレゼンテーション体験に必要な構成要素を提供しつつ、ホスト型アプリや固定 UI を強制しません。
Univer は次のような場面に適しています。
- SaaS、社内ツール、BI ワークフロー、AI アプリケーションにスプレッドシートやドキュメント編集を組み込む。
- ブラウザと同じアーキテクチャで、サーバー上のワークブック/ドキュメント処理を実行する。
- 必要な機能だけをプラグインで組み合わせる、または presets で素早く始める。
- カスタムプラグイン、コマンド、サービス、UI コンポーネント、Facade API で振る舞いを拡張する。
Univer は単なるスプレッドシートファイルビューアではありません。独自の生産性インターフェースを構築するためのフレームワークです。
🌟 Highlights
|
⚡ 大規模な編集面に対応 Canvas ベースのレンダリングと専用の数式エンジンにより、複雑なワークブックでも応答性を保ちます。 |
🧩 プラグイン前提の設計 必要な機能を組み合わせ、置換、遅延読み込み、拡張できます。 |
🤖 Headless AI 基盤 Node.js でワークブックとドキュメントのロジックを実行し、エージェント、自動化、サーバーサイドワークフローを支えます。 |
|
🛠️ プロダクト向け SDK フレームワークアダプター、Facade API、presets、headless runtime が実際の統合経路に対応します。 |
🌗 Dark mode 対応 UI コンポーネントとレンダリングエンジンの両方がライト/ダークテーマに対応します。 |
🔌 統合 Facade API ブラウザと Node.js の両方で、ワークブック、範囲、数式、ドキュメントを一貫した API で扱えます。 |
🚀 なぜ Univer なのか?
- アイソモーフィック設計:ブラウザの UI アプリと Node.js のヘッドレス処理の両方で動作します。
- プラグイン優先アーキテクチャ:すべての機能は組み合わせ可能なプラグインとして提供され、追加、削除、置換、遅延読み込みが可能です。
- Preset Mode による高速な統合:すぐに動くアプリが必要な場合は、
univer-presetsの curated plugin bundle を利用できます。 - Plugin Mode による完全な制御:カスタム読み込み、より小さなバンドル、深い統合が必要な場合は、パッケージを手動で組み合わせられます。
- Facade API:ワークブック、ワークシート、範囲、ドキュメント、数式、コマンド、イベントを高レベル API で扱えます。
- Canvas レンダリングエンジン:大規模な編集可能ドキュメント面をサポートし、複数の文書タイプでレンダリング層を共有します。
- 拡張可能な UI:React、Vue、Web Components、各種フレームワークのアプリケーションシェルに統合できます。
⚡ クイックスタート
多くのアプリケーションでは Preset Mode から始めるのがおすすめです。パッケージを手動で組み合わせ、プラグイン登録を制御したい場合は Plugin Mode を使います。
Preset Mode(推奨)
Preset は、必要な Facade API 登録とスタイルを含む Univer プラグインの curated collection です。
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({})
Plugin Mode
Plugin Mode では、パッケージ、スタイルの import、locale の merge、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'
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({})
ページにはコンテナが必要です。
<div id="app" style="height: 100vh"></div>
詳しくは Installation & Basic Usage guide、createUniver reference、Facade API reference を参照してください。
🧩 Preset Mode と Plugin Mode
| 選択肢 | 使う場面 | はじめに読むもの |
|---|---|---|
| Preset Mode | 最小限の設定で Sheets、Docs、Node の動作環境を作りたい場合。 | univer-presets と getting started guide |
| Plugin Mode | パッケージ、プラグイン登録順、遅延読み込み、実行時の構成を厳密に制御したい場合。 | このリポジトリの examples/ と architecture guide |
| Headless Mode | UI なしでサーバー側のワークブック/ドキュメント処理、数式計算、自動化を行いたい場合。 | Headless Univer |
すべての @univerjs/* パッケージは同じバージョンに揃えてください。Univer Pro パッケージを使う場合も、@univerjs-pro/* のバージョンを揃えてください。
API 互換性、experimental API、internal API、deprecation rules については API Stability Policy を参照してください。
🧭 互換性
- ブラウザ実行環境:Univer は Chrome 88 をターゲットとしてコンパイルされており、Edge
>=88、Firefox>=90、Chrome>=88、Safari>=14.1、Electron>=12で動作することを目指しています。 - Polyfills:Univer は
Intl.Segmenterに依存しています。対象ブラウザや実行環境が対応していない場合は、@formatjs/intl-segmenterなどの polyfill を追加してください。 - ビルドツール:Vite、esbuild、Webpack 5 を推奨します。
package.jsonのexportsフィールドに対応していないビルドツール(Webpack 4 など)では、追加のパスマッピングが必要になる場合があります。 - React:Univer の view layer は React 18 ベースで構築されており、React 18 と 19 をサポートします。React 16.9+ と 17 には最小限の互換サポートを提供します。
- Node.js runtime:Headless Univer は Node.js
>=18.17.0をサポートします。この monorepo の開発には Node.js>=22.18が必要です。
🛠️ 構築できるもの
| 領域 | オープンソースの機能 | Univer Pro 拡張 |
|---|---|---|
| Sheets | ワークブック、ワークシート、範囲、選択、数式、数値書式、フィルター、ソート、データ検証、条件付き書式、ハイパーリンク、コメント、検索と置換、ノート、テーブル、描画連携、拡張可能な UI プラグイン。 | リアルタイム共同編集、編集履歴、インポート/エクスポート、印刷、チャート、ピボットテーブル、スパークライン、アウトライン、図形、セル内グラフィックス、データコネクタ、サーバーサイド計算、強化された数式機能。 |
| Docs | リッチドキュメントモデル、編集 UI、リスト、ハイパーリンク、描画連携、コメント、クイック挿入、共有ドキュメントアーキテクチャ。 | 共同編集、インポート/エクスポート、印刷、強化されたテーブルとリスト、段組み、コールアウト、コードブロック、引用ブロック、図形、リモートコメントリソース。 |
| Slides | プレゼンテーションデータモデルと UI パッケージ。現在も活発に開発中です。 | Pro スライドモデルと UI、スライドのインポート/エクスポート、チャートとテーブルのモデル/UI プラグイン、共有の図形編集基盤。 |
| Bases | Univer のプラグイン、コマンド、モデルのアーキテクチャ上に、カスタムの構造化データ体験を構築できます。 | Base データベースモデル、コマンド、数式連携、ワークベンチ UI、フィールドエディタ、レンダリングエンジンビュー。 |
| Runtime | ブラウザアプリ、Node.js ヘッドレス利用、Web Worker/RPC パターン、複数インスタンス、サーバー向け自動化。 | 共同編集クライアント/サーバーパッケージ、Node.js 共同編集クライアント、Pro サーバーサービス、SSR、計算委譲、サーバーサイド計算、changeset replay ツール。 |
| Integrations | React、Vue、Web Components、フレームワークテンプレート、テーマ、ローカライズ、カスタムプラグイン。 | Pro presets とエンタープライズデプロイパッケージ。 |
現在もっとも成熟しているプロダクト面は Sheets です。Docs と Slides も Univer のアーキテクチャを共有し、同じ SDK の中で継続的に進化しています。
🔓 Open Source と Pro
このリポジトリには Univer のオープンソースコアと first-party OSS プラグインが含まれています。Univer Pro は、高度なプロダクトサーフェス、共同編集、サーバー機能、エンタープライズ連携のための商用拡張レイヤーとして別途開発されています。
| カテゴリ | Open source | Univer Pro / commercial |
|---|---|---|
| Foundation | Core SDK、プラグインシステム、レンダリングエンジン、数式エンジン、Facade API、テーマ、i18n、フレームワークアダプタ。 | Pro presets とエンタープライズデプロイパッケージ。 |
| Sheets | コアのスプレッドシート編集、数式、数値書式、フィルター/ソート、データ検証、条件付き書式、ノート、テーブル、ハイパーリンク、コメント、描画、検索と置換。 | 共同編集、編集履歴、インポート/エクスポート、印刷、チャート、ピボットテーブル、スパークライン、アウトライン、図形、セル内グラフィックス、データコネクタ、範囲の前処理、強化された数式エンジン機能。 |
| Docs | ドキュメントモデルと編集 UI、リスト、ハイパーリンク、コメント、クイック挿入、描画連携。 | 共同編集、インポート/エクスポート、印刷、強化されたテーブル/リスト、段組み、コールアウト、コードブロック、引用ブロック、図形、リモートスレッドコメントリソース。 |
| Slides | OSS のプレゼンテーションモデルと UI パッケージ。 | Pro スライドモデル/UI パッケージ、スライドのインポート/エクスポート、チャート、テーブル、再利用可能な図形エディタ UI。 |
| Bases | カスタムのデータ中心プロダクト向けの拡張可能なプラグインアーキテクチャ。 | Base データベースコアモデル、コマンド、ミューテーション、数式連携、ワークベンチ UI、フィールドエディタ、レンダリングエンジン連携。 |
| Server and runtime | Node.js ヘッドレスランタイム、RPC/Web Worker パターン、サーバー向け自動化のプリミティブ。 | 共同編集サーバー、Node.js 共同編集クライアント、SSR サービス、計算委譲、サーバーサイド計算、共同編集 changeset replay ツール。 |
Pro 機能は Univer Pro guide に記載されています。ここでは OSS パッケージの範囲を明確にするため、意図的に分けて説明しています。
Boundary principles:
- このリポジトリの OSS パッケージは Apache-2.0 license の下で単独利用できることを意図しています。Univer Pro は任意であり、公開 OSS SDK API の利用に Pro は不要です。
- OSS パッケージの bugs、regressions、security issues は、関連する Pro 機能がある場合でも OSS リポジトリで報告・修正されるべきです。
- OSS documentation は、Pro-only capabilities が公開
@univerjs/*packages に含まれるかのように示すべきではありません。Pro-only APIs、packages、deployment paths は明示的に名前を出してください。 - OSS feature に Pro enhancement がある場合でも、OSS behavior は独立して文書化し、commercial docs を先に読まなくても open-source surface を評価できるようにします。
🌐 エコシステム
- Core SDK:
dream-num/univer、この monorepo です。 - Presets:
dream-num/univer-presets、ブラウザと Node.js アプリ向けの curated plugin bundle。 - AI agent skills:
dream-num/univer-sdk-skills、Univer 統合、Pro 機能、プラグイン開発、Node バックエンドに取り組む AI agent 向けの再利用可能な指示集です。AI Skills guide も参照してください。 - Documentation:docs.univer.ai、Sheets、Docs、Slides、recipes、Pro guides を含みます。
- API Reference:docs.univer.ai/reference、Facade API と生成された API reference。
- Examples and showcase:Univer Showcase とこのリポジトリの
examples/。 - AI-native spreadsheets:
dream-num/univer-mcp、自然言語で Univer Sheets を操作する Univer Platform / MCP 統合。
📦 リポジトリ構成
.
├── packages/ コアパッケージ、エンジン、文書タイプ、UI プラグイン、機能プラグイン
├── examples/ 開発用のローカルブラウザ/Node.js デモ
├── common/ 共有内部ツール、mock data、storybook、ユーティリティ
├── e2e/ Playwright とビジュアル比較テスト
├── tests/ 追加の統合テストプロジェクト
└── docs/ アーキテクチャメモ、画像、リポジトリ内ドキュメント
パッケージごとの README は packages/ 配下の各パッケージにあります。
🧑💻 開発
必要環境:
- Node.js
>=22.18 - pnpm
>=10
git clone https://github.com/dream-num/univer.git
cd univer
pnpm install
pnpm dev
よく使うコマンド:
| コマンド | 用途 |
|---|---|
pnpm dev |
ローカル examples アプリを起動します。 |
pnpm build |
内部 common パッケージを除いて workspace パッケージをビルドします。 |
pnpm test |
Turbo 経由でユニットテストを実行します。 |
pnpm typecheck |
Turbo 経由で TypeScript チェックを実行します。 |
pnpm lint |
ESLint を実行します。 |
pnpm test:e2e |
Playwright テストを実行します。 |
pnpm storybook:dev |
UI コンポーネント開発用の Storybook を起動します。 |
Pull request を作成する前に CONTRIBUTING.md を読んでください。
📝 Contributor Notes
より深い変更を行う前に読む価値のあるリポジトリ内メモです。
- Building Isomorphic Univer:ブラウザ、Node.js、UI、共有プラグインロジックの分離方針。
- API Stability Policy:stable、experimental、internal、deprecated、breaking-change expectations。
- Contributing to Facade API:
FUniver、FWorkbook、FRangeなどの Facade API 設計方針。 - Naming Convention:ファイル、フォルダ、インターフェース、プラグイン、コマンド、DI token の命名規則。
- Fixing Memory Leaks:Univer インスタンスでよくあるメモリリークパターンとデバッグ手順。
- Architecture TLDRs:数式エンジン、Web Worker、権限、選択、ref-range の簡潔な設計メモ。
💬 コミュニティ
- GitHub Discussions で質問できます。
- Discord でコミュニティと交流できます。
- Twitter / X と YouTube もフォローできます。
参加する前に Code of Conduct を読んでください。
🔒 セキュリティ
セキュリティ上の問題を見つけたと思われる場合は、Security Policy に従ってください。
❤️ スポンサー
Univer はコミュニティとスポンサーによって支えられています。Open Collective からプロジェクトを支援できます。
📄 ライセンス
Copyright (c) 2021-present DreamNum Co., Ltd.
Apache-2.0 ライセンスの下で公開されています。