[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-71260":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":17,"stars7d":18,"stars30d":19,"stars90d":16,"forks30d":16,"starsTrendScore":20,"compositeScore":21,"rankGlobal":10,"rankLanguage":10,"license":22,"archived":23,"fork":23,"defaultBranch":24,"hasWiki":25,"hasPages":25,"topics":26,"createdAt":10,"pushedAt":10,"updatedAt":47,"readmeContent":48,"aiSummary":49,"trendingCount":16,"starSnapshotCount":16,"syncStatus":50,"lastSyncTime":51,"discoverSource":52},71260,"univer","dream-num\u002Funiver","dream-num","Univer is a full-stack framework for creating and editing spreadsheets \u002F word processor \u002F presentation on both web and server.","https:\u002F\u002Fdocs.univer.ai",null,"TypeScript",13185,1182,91,121,0,29,67,235,87,44.22,"Apache License 2.0",false,"dev",true,[27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46],"ai-excel","ai-sheet","ai-spreadsheet","appscript","collaboration","data-table","doc","excel","excel-mcp","grid","live-share","ppt","sdk","sheet","sheet-mcp","spreadsheet","spreadsheet-mcp","univer-mcp","word","xlsx","2026-06-12 02:02:50","\u003Cdiv align=\"center\">\n\n\u003Cpicture>\n    \u003Csource media=\"(prefers-color-scheme: dark)\" srcset=\".\u002Fdocs\u002Fimg\u002Fbanner-light.png\">\n    \u003Cimg src=\".\u002Fdocs\u002Fimg\u002Fbanner-dark.png\" alt=\"Univer\" width=\"420\" \u002F>\n\u003C\u002Fpicture>\n\n**A full-stack, isomorphic office SDK for building spreadsheets, documents, and presentations.**\n\nBuild embeddable productivity experiences with a plugin architecture, Canvas-based rendering,\na formula engine, and one Facade API that works in the browser and on Node.js.\n\nEnglish | [简体中文](.\u002Fdocs\u002Freadme\u002Fzh-CN.md) | [繁體中文](.\u002Fdocs\u002Freadme\u002Fzh-TW.md) | [日本語](.\u002Fdocs\u002Freadme\u002Fja-JP.md) | [한국어](.\u002Fdocs\u002Freadme\u002Fko-KR.md) | [Español](.\u002Fdocs\u002Freadme\u002Fes-ES.md)\n\n[📖 Documentation](https:\u002F\u002Fdocs.univer.ai) | [✨ Showcase](https:\u002F\u002Fdocs.univer.ai\u002Fshowcase) | [📘 API Reference](https:\u002F\u002Fdocs.univer.ai\u002Freference\u002Fclasses\u002Funiver) | [📝 Blog](https:\u002F\u002Fdocs.univer.ai\u002Fblog)\n\n[![Release](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fv\u002Frelease\u002Fdream-num\u002Funiver?style=flat-square)](https:\u002F\u002Fgithub.com\u002Fdream-num\u002Funiver\u002Freleases)\n[![License](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Flicense\u002Fdream-num\u002Funiver?style=flat-square)](.\u002FLICENSE)\n[![Build](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Factions\u002Fworkflow\u002Fstatus\u002Fdream-num\u002Funiver\u002Fbuild.yml?style=flat-square)](https:\u002F\u002Fgithub.com\u002Fdream-num\u002Funiver\u002Factions\u002Fworkflows\u002Fbuild.yml)\n[![CodeFactor](https:\u002F\u002Fwww.codefactor.io\u002Frepository\u002Fgithub\u002Fdream-num\u002Funiver\u002Fbadge\u002Fdev?style=flat-square)](https:\u002F\u002Fwww.codefactor.io\u002Frepository\u002Fgithub\u002Fdream-num\u002Funiver\u002Foverview\u002Fdev)\n[![Codecov](https:\u002F\u002Fimg.shields.io\u002Fcodecov\u002Fc\u002Fgh\u002Fdream-num\u002Funiver?token=aPfyW2pIMN&style=flat-square)](https:\u002F\u002Fcodecov.io\u002Fgh\u002Fdream-num\u002Funiver)\n\n[![Stars](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fstars\u002Fdream-num\u002Funiver?style=flat-square)](https:\u002F\u002Fgithub.com\u002Fdream-num\u002Funiver\u002Fstargazers)\n[![Contributors](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fcontributors\u002Fdream-num\u002Funiver?style=flat-square)](https:\u002F\u002Fgithub.com\u002Fdream-num\u002Funiver\u002Fgraphs\u002Fcontributors)\n[![Issues](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fissues\u002Fdream-num\u002Funiver?style=flat-square)](https:\u002F\u002Fgithub.com\u002Fdream-num\u002Funiver\u002Fissues)\n[![Last Commit](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Flast-commit\u002Fdream-num\u002Funiver?style=flat-square)](https:\u002F\u002Fgithub.com\u002Fdream-num\u002Funiver\u002Fcommits\u002Fmain\u002F)\n\n[![Discord](https:\u002F\u002Fimg.shields.io\u002Fdiscord\u002F1136129819961217077?logo=discord&logoColor=FFFFFF&label=discord&color=5865F2&style=flat-square)](https:\u002F\u002Fdiscord.gg\u002Fz3NKNT6D2f)\n[![Twitter](https:\u002F\u002Fimg.shields.io\u002Ftwitter\u002Ffollow\u002Funiverhq?style=flat-square&logo=x)](https:\u002F\u002Ftwitter.com\u002Funiverhq)\n[![Open Collective](https:\u002F\u002Fimg.shields.io\u002Fopencollective\u002Fall\u002Funiver?logo=opencollective&style=flat-square)](https:\u002F\u002Fopencollective.com\u002Funiver)\n\n[![Trendshift](https:\u002F\u002Ftrendshift.io\u002Fapi\u002Fbadge\u002Frepositories\u002F4376)](https:\u002F\u002Ftrendshift.io\u002Frepositories\u002F4376)\n\n\u003C\u002Fdiv>\n\n## ✨ What is Univer?\n\nUniver is an open-source SDK for creating office applications inside your own product. It gives you the building blocks for spreadsheet, document, and presentation experiences without forcing you into a hosted app or a fixed UI.\n\nUse Univer when you need to:\n\n- Embed spreadsheet or document editing into a SaaS product, internal tool, BI workflow, or AI application.\n- Run workbook\u002Fdocument processing on the server with the same architecture used in the browser.\n- Compose only the features you need through plugins or start quickly with presets.\n- Extend behavior through custom plugins, commands, services, UI components, and Facade APIs.\n\nUniver is not a spreadsheet file viewer only. It is a framework for building your own productivity surface.\n\n## 🌟 Highlights\n\n\u003Ctable>\n  \u003Ctr>\n    \u003Ctd align=\"center\" width=\"33%\">\n      ⚡\u003Cbr \u002F>\n      \u003Cstrong>Built for large surfaces\u003C\u002Fstrong>\u003Cbr \u002F>\n      \u003Csub>Canvas-based rendering and a dedicated formula engine keep complex workbooks responsive.\u003C\u002Fsub>\n    \u003C\u002Ftd>\n    \u003Ctd align=\"center\" width=\"33%\">\n      🧩\u003Cbr \u002F>\n      \u003Cstrong>Plugin-shaped by default\u003C\u002Fstrong>\u003Cbr \u002F>\n      \u003Csub>Compose, replace, lazy-load, or extend capabilities without taking the whole stack.\u003C\u002Fsub>\n    \u003C\u002Ftd>\n    \u003Ctd align=\"center\" width=\"33%\">\n      🤖\u003Cbr \u002F>\n      \u003Cstrong>Headless for AI infrastructure\u003C\u002Fstrong>\u003Cbr \u002F>\n      \u003Csub>Run workbook and document logic in Node.js to power agents, automation, and server-side workflows.\u003C\u002Fsub>\n    \u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd align=\"center\" width=\"33%\">\n      🛠️\u003Cbr \u002F>\n      \u003Cstrong>Product-ready SDK\u003C\u002Fstrong>\u003Cbr \u002F>\n      \u003Csub>Framework adapters, Facade APIs, presets, and headless runtime fit real integration paths.\u003C\u002Fsub>\n    \u003C\u002Ftd>\n    \u003Ctd align=\"center\" width=\"33%\">\n      🌗\u003Cbr \u002F>\n      \u003Cstrong>Dark-mode ready\u003C\u002Fstrong>\u003Cbr \u002F>\n      \u003Csub>UI components and the rendering engine both adapt to light and dark themes.\u003C\u002Fsub>\n    \u003C\u002Ftd>\n    \u003Ctd align=\"center\" width=\"33%\">\n      🔌\u003Cbr \u002F>\n      \u003Cstrong>Unified Facade API\u003C\u002Fstrong>\u003Cbr \u002F>\n      \u003Csub>One consistent API surface for workbooks, ranges, formulas, and documents across browser and Node.js.\u003C\u002Fsub>\n    \u003C\u002Ftd>\n  \u003C\u002Ftr>\n\u003C\u002Ftable>\n\n## 🚀 Why Univer?\n\n- **Isomorphic by design**: run UI apps in browsers and headless processing in Node.js.\n- **Plugin-first architecture**: every capability is delivered as a composable plugin, so features can be added, removed, replaced, or lazy-loaded.\n- **Preset mode for fast integration**: use curated plugin bundles from [`univer-presets`](https:\u002F\u002Fgithub.com\u002Fdream-num\u002Funiver-presets) when you want a working app quickly.\n- **Plugin mode for full control**: manually compose packages when you need custom loading, smaller bundles, or deep integration.\n- **Facade API**: work with workbooks, worksheets, ranges, documents, formulas, commands, and events through a higher-level API.\n- **Canvas rendering engine**: support large editable document surfaces with a rendering layer shared across document types.\n- **Extensible UI**: integrate with React, Vue, Web Components, and framework-specific application shells.\n\n## ⚡ Quick Start\n\nFor most applications, start with **Preset Mode**. Use **Plugin Mode** when you need to manually compose packages and control plugin registration.\n\n\u003Cdetails open>\n\u003Csummary>\u003Cstrong>Preset Mode (recommended)\u003C\u002Fstrong>\u003C\u002Fsummary>\n\nPresets are curated collections of Univer plugins that include the required Facade API registrations and styles.\n\n```bash\npnpm add @univerjs\u002Fpresets @univerjs\u002Fpreset-sheets-core\n```\n\n```ts\nimport { UniverSheetsCorePreset } from '@univerjs\u002Fpreset-sheets-core'\nimport UniverPresetSheetsCoreEnUS from '@univerjs\u002Fpreset-sheets-core\u002Flocales\u002Fen-US'\nimport { createUniver, LocaleType, mergeLocales } from '@univerjs\u002Fpresets'\n\nimport '@univerjs\u002Fpreset-sheets-core\u002Flib\u002Findex.css'\n\nconst { univerAPI } = createUniver({\n  locale: LocaleType.EN_US,\n  locales: {\n    [LocaleType.EN_US]: mergeLocales(UniverPresetSheetsCoreEnUS),\n  },\n  presets: [\n    UniverSheetsCorePreset({\n      container: 'app',\n    }),\n  ],\n})\n\nuniverAPI.createWorkbook({})\n```\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Cstrong>Plugin Mode\u003C\u002Fstrong>\u003C\u002Fsummary>\n\nPlugin Mode gives you lower-level control over packages, style imports, locale merging, Facade API registration, and plugin order.\n\n```bash\npnpm add @univerjs\u002Fcore @univerjs\u002Fdesign @univerjs\u002Fdocs @univerjs\u002Fdocs-ui @univerjs\u002Fengine-formula @univerjs\u002Fengine-render @univerjs\u002Fsheets @univerjs\u002Fsheets-formula @univerjs\u002Fsheets-formula-ui @univerjs\u002Fsheets-numfmt @univerjs\u002Fsheets-numfmt-ui @univerjs\u002Fsheets-ui @univerjs\u002Fui\n```\n\n```ts\nimport { LocaleType, mergeLocales, Univer } from '@univerjs\u002Fcore'\nimport { FUniver } from '@univerjs\u002Fcore\u002Ffacade'\nimport DesignEnUS from '@univerjs\u002Fdesign\u002Flocale\u002Fen-US'\nimport { UniverDocsPlugin } from '@univerjs\u002Fdocs'\nimport { UniverDocsUIPlugin } from '@univerjs\u002Fdocs-ui'\nimport DocsUIEnUS from '@univerjs\u002Fdocs-ui\u002Flocale\u002Fen-US'\nimport { UniverFormulaEnginePlugin } from '@univerjs\u002Fengine-formula'\nimport { UniverRenderEnginePlugin } from '@univerjs\u002Fengine-render'\nimport { UniverSheetsPlugin } from '@univerjs\u002Fsheets'\nimport SheetsEnUS from '@univerjs\u002Fsheets\u002Flocale\u002Fen-US'\nimport { UniverSheetsFormulaPlugin } from '@univerjs\u002Fsheets-formula'\nimport { UniverSheetsFormulaUIPlugin } from '@univerjs\u002Fsheets-formula-ui'\nimport SheetsFormulaUIEnUS from '@univerjs\u002Fsheets-formula-ui\u002Flocale\u002Fen-US'\nimport { UniverSheetsNumfmtPlugin } from '@univerjs\u002Fsheets-numfmt'\nimport { UniverSheetsNumfmtUIPlugin } from '@univerjs\u002Fsheets-numfmt-ui'\nimport SheetsNumfmtUIEnUS from '@univerjs\u002Fsheets-numfmt-ui\u002Flocale\u002Fen-US'\nimport { UniverSheetsUIPlugin } from '@univerjs\u002Fsheets-ui'\nimport SheetsUIEnUS from '@univerjs\u002Fsheets-ui\u002Flocale\u002Fen-US'\nimport { UniverUIPlugin } from '@univerjs\u002Fui'\nimport UIEnUS from '@univerjs\u002Fui\u002Flocale\u002Fen-US'\n\nimport '@univerjs\u002Fdesign\u002Flib\u002Findex.css'\nimport '@univerjs\u002Fui\u002Flib\u002Findex.css'\nimport '@univerjs\u002Fdocs-ui\u002Flib\u002Findex.css'\nimport '@univerjs\u002Fsheets-ui\u002Flib\u002Findex.css'\nimport '@univerjs\u002Fsheets-formula-ui\u002Flib\u002Findex.css'\nimport '@univerjs\u002Fsheets-numfmt-ui\u002Flib\u002Findex.css'\n\nimport '@univerjs\u002Fengine-formula\u002Ffacade'\nimport '@univerjs\u002Fui\u002Ffacade'\nimport '@univerjs\u002Fdocs-ui\u002Ffacade'\nimport '@univerjs\u002Fsheets\u002Ffacade'\nimport '@univerjs\u002Fsheets-ui\u002Ffacade'\nimport '@univerjs\u002Fsheets-formula\u002Ffacade'\nimport '@univerjs\u002Fsheets-numfmt\u002Ffacade'\n\nconst univer = new Univer({\n  locale: LocaleType.EN_US,\n  locales: {\n    [LocaleType.EN_US]: mergeLocales(\n      DesignEnUS,\n      UIEnUS,\n      DocsUIEnUS,\n      SheetsEnUS,\n      SheetsUIEnUS,\n      SheetsFormulaUIEnUS,\n      SheetsNumfmtUIEnUS,\n    ),\n  },\n})\n\nuniver.registerPlugin(UniverRenderEnginePlugin)\nuniver.registerPlugin(UniverFormulaEnginePlugin)\nuniver.registerPlugin(UniverUIPlugin, { container: 'app' })\nuniver.registerPlugin(UniverDocsPlugin)\nuniver.registerPlugin(UniverDocsUIPlugin)\nuniver.registerPlugin(UniverSheetsPlugin)\nuniver.registerPlugin(UniverSheetsUIPlugin)\nuniver.registerPlugin(UniverSheetsFormulaPlugin)\nuniver.registerPlugin(UniverSheetsFormulaUIPlugin)\nuniver.registerPlugin(UniverSheetsNumfmtPlugin)\nuniver.registerPlugin(UniverSheetsNumfmtUIPlugin)\n\nconst univerAPI = FUniver.newAPI(univer)\nuniverAPI.createWorkbook({})\n```\n\n\u003C\u002Fdetails>\n\nYour page needs a container:\n\n```html\n\u003Cdiv id=\"app\" style=\"height: 100vh\">\u003C\u002Fdiv>\n```\n\nLearn more in the [Installation & Basic Usage guide](https:\u002F\u002Fdocs.univer.ai\u002Fguides\u002Fsheets\u002Fgetting-started\u002Finstallation), the [`createUniver` reference](https:\u002F\u002Fdocs.univer.ai\u002Freference\u002Fmethods\u002Fcreate-univer), and the [Facade API reference](https:\u002F\u002Fdocs.univer.ai\u002Freference\u002Fclasses\u002Funiver).\n\n## 🧩 Preset Mode vs Plugin Mode\n\n| Choose | When to use it | Start here |\n| --- | --- | --- |\n| **Preset Mode** | You want a working Sheets, Docs, or Node setup with minimal configuration. | [`univer-presets`](https:\u002F\u002Fgithub.com\u002Fdream-num\u002Funiver-presets) and the [getting started guide](https:\u002F\u002Fdocs.univer.ai\u002Fguides\u002Fsheets\u002Fgetting-started\u002Finstallation) |\n| **Plugin Mode** | You need strict control over packages, plugin registration order, lazy loading, or custom runtime composition. | This repository's [`examples\u002F`](.\u002Fexamples) and [architecture guide](https:\u002F\u002Fdocs.univer.ai\u002Fguides\u002Frecipes\u002Farchitecture\u002Funiver) |\n| **Headless Mode** | You need server-side workbook\u002Fdocument processing, formula calculation, or automation without UI. | [Headless Univer](https:\u002F\u002Fdocs.univer.ai\u002Fguides\u002Fsheets\u002Fgetting-started\u002Fnode) |\n\nKeep all `@univerjs\u002F*` packages on the same version. If you use Univer Pro packages, keep `@univerjs-pro\u002F*` versions aligned as well.\n\n## 🧭 Compatibility\n\n- **Browser runtime**: Univer is compiled with a Chrome 70 target and aims to work on Edge `>=70`, Firefox `>=63`, Chrome `>=70`, Safari `>=12.0`, and Electron `>=5`.\n- **Polyfills**: Univer relies on `Intl.Segmenter`. Add a polyfill such as `@formatjs\u002Fintl-segmenter` if your target browser or runtime does not provide it.\n- **Build tools**: We recommend Vite, esbuild, or Webpack 5. If your build tool does not support the `exports` field in `package.json` (common in Webpack 4), you may need extra path mapping.\n- **React**: Univer's view layer is built on React 18, supports React 18 and 19, and provides minimal compatibility support for React 16.9+ and 17.\n- **Node.js runtime**: Headless Univer supports Node.js `>=18.17.0`. Developing this monorepo requires Node.js `>=22.18`.\n\n## 🛠️ What You Can Build\n\n| Area | Open-source capabilities |\n| --- | --- |\n| **Sheets** | Workbooks, worksheets, ranges, selection, formulas, number formatting, filtering, sorting, data validation, conditional formatting, hyperlinks, comments, find and replace, notes, tables, drawing integration, and extensible UI plugins. |\n| **Docs** | Rich document model, editing UI, lists, hyperlinks, drawing integration, comments, quick insert, and shared document architecture. |\n| **Slides** | Presentation data model and UI packages under active development. |\n| **Runtime** | Browser apps, Node.js headless usage, Web Worker\u002FRPC patterns, multi-instance usage, and server-oriented automation. |\n| **Integrations** | React, Vue, Web Components, framework templates, theming, localization, and custom plugins. |\n\nSheets are the most mature product surface today. Docs and Slides share Univer's architecture and continue to evolve in the same SDK.\n\n## 🔓 Open Source and Pro\n\nThis repository contains Univer's open-source core and first-party OSS plugins. Some enterprise features are developed as Univer Pro packages and require separate integration.\n\n| Open source | Univer Pro \u002F commercial |\n| --- | --- |\n| Core SDK, plugin system, rendering engine, formula engine, Facade API, Sheets\u002FDocs\u002FSlides packages, themes, i18n, and many first-party plugins. | Real-time collaboration, import\u002Fexport, printing, charts, pivot tables, sparklines, advanced formula capabilities, edit history, Pro server components, and license management. |\n\nPro features are documented in the [Univer Pro guide](https:\u002F\u002Fdocs.univer.ai\u002Fguides\u002Fpro). They are intentionally separated here so the OSS package surface is clear.\n\n## 🌐 Ecosystem\n\n- **Core SDK**: [`dream-num\u002Funiver`](https:\u002F\u002Fgithub.com\u002Fdream-num\u002Funiver), this monorepo.\n- **Presets**: [`dream-num\u002Funiver-presets`](https:\u002F\u002Fgithub.com\u002Fdream-num\u002Funiver-presets), curated plugin bundles for browser and Node.js apps.\n- **AI agent skills**: [`dream-num\u002Funiver-sdk-skills`](https:\u002F\u002Fgithub.com\u002Fdream-num\u002Funiver-sdk-skills), reusable instructions for AI agents working with Univer integration, Pro features, plugin development, and Node backends. See the [AI Skills guide](https:\u002F\u002Fdocs.univer.ai\u002Fguides\u002Fskills).\n- **Documentation**: [docs.univer.ai](https:\u002F\u002Fdocs.univer.ai), including Sheets, Docs, Slides, recipes, and Pro guides.\n- **API Reference**: [docs.univer.ai\u002Freference](https:\u002F\u002Fdocs.univer.ai\u002Freference\u002Fclasses\u002Funiver), the Facade API and generated API reference.\n- **Examples and showcase**: [Univer Showcase](https:\u002F\u002Fdocs.univer.ai\u002Fshowcase) and this repository's [`examples\u002F`](.\u002Fexamples).\n- **AI-native spreadsheets**: [`dream-num\u002Funiver-mcp`](https:\u002F\u002Fgithub.com\u002Fdream-num\u002Funiver-mcp), Univer Platform \u002F MCP integration for driving Univer Sheets with natural language.\n\n## 📦 Repository Guide\n\n```text\n.\n├── packages\u002F      Core packages, engines, document types, UI plugins, and feature plugins\n├── examples\u002F      Local browser and Node.js demos used for development\n├── common\u002F        Shared internal tooling, mock data, storybook, and utilities\n├── e2e\u002F           Playwright and visual comparison tests\n├── tests\u002F         Additional integration test projects\n└── docs\u002F          Architecture notes, images, and repository-local documentation\n```\n\nPackage-level READMEs live beside each package under [`packages\u002F`](.\u002Fpackages).\n\n## 🧑‍💻 Development\n\nRequirements:\n\n- Node.js `>=22.18`\n- pnpm `>=10`\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Fdream-num\u002Funiver.git\ncd univer\npnpm install\npnpm dev\n```\n\nUseful commands:\n\n| Command | Purpose |\n| --- | --- |\n| `pnpm dev` | Start the local examples app. |\n| `pnpm build` | Build workspace packages, excluding internal common packages. |\n| `pnpm test` | Run unit tests through Turbo. |\n| `pnpm typecheck` | Run TypeScript checks through Turbo. |\n| `pnpm lint` | Run ESLint. |\n| `pnpm test:e2e` | Run Playwright tests. |\n| `pnpm storybook:dev` | Start Storybook for UI component development. |\n\nRead [CONTRIBUTING.md](.\u002FCONTRIBUTING.md) before opening a pull request.\n\n## 📝 Contributor Notes\n\nRepository-local notes worth reading before deeper changes:\n\n- [Building Isomorphic Univer](.\u002Fdocs\u002FISOMOPHIC.md): how to split browser, Node.js, UI, and shared plugin logic.\n- [Contributing to Facade API](.\u002Fdocs\u002FCONTRIBUTING-FACADE.md): API design expectations for `FUniver`, `FWorkbook`, `FRange`, and related Facade classes.\n- [Naming Convention](.\u002Fdocs\u002FNAMING_CONVENTION.md): file, folder, interface, plugin, command, and dependency injection token conventions.\n- [Fixing Memory Leaks](.\u002Fdocs\u002FFIX_MEMORY_LEAK.md): common leak patterns and debugging workflow for Univer instances.\n- [Architecture TLDRs](.\u002Fdocs\u002Ftldr): concise notes for formula engine, web worker, permission, selection, and ref-range behavior.\n\n## 💬 Community\n\n- Ask questions in [GitHub Discussions](https:\u002F\u002Fgithub.com\u002Fdream-num\u002Funiver\u002Fdiscussions).\n- Chat with the community on [Discord](https:\u002F\u002Fdiscord.gg\u002Fz3NKNT6D2f).\n- Follow [Twitter \u002F X](https:\u002F\u002Ftwitter.com\u002Funiverhq) and [YouTube](https:\u002F\u002Fwww.youtube.com\u002F@dreamNum).\n\nPlease read the [Code of Conduct](.\u002FCODE_OF_CONDUCT.md) before participating.\n\n## 🔒 Security\n\nIf you believe you have found a security issue, please follow the [Security Policy](.\u002FSECURITY.md).\n\n## ❤️ Sponsors\n\nUniver is supported by the community and sponsors. You can support the project through [Open Collective](https:\u002F\u002Fopencollective.com\u002Funiver).\n\n\u003Ca href=\"https:\u002F\u002Fopencollective.com\u002Funiver\u002Fsponsor\u002F0\u002Fwebsite\">\u003Cimg src=\"https:\u002F\u002Fopencollective.com\u002Funiver\u002Fsponsor\u002F0\u002Favatar.svg\" alt=\"Sponsor 0\" \u002F>\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fopencollective.com\u002Funiver\u002Fsponsor\u002F1\u002Fwebsite\">\u003Cimg src=\"https:\u002F\u002Fopencollective.com\u002Funiver\u002Fsponsor\u002F1\u002Favatar.svg\" alt=\"Sponsor 1\" \u002F>\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fopencollective.com\u002Funiver\u002Fsponsor\u002F2\u002Fwebsite\">\u003Cimg src=\"https:\u002F\u002Fopencollective.com\u002Funiver\u002Fsponsor\u002F2\u002Favatar.svg\" alt=\"Sponsor 2\" \u002F>\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fopencollective.com\u002Funiver\u002Fsponsor\u002F3\u002Fwebsite\">\u003Cimg src=\"https:\u002F\u002Fopencollective.com\u002Funiver\u002Fsponsor\u002F3\u002Favatar.svg\" alt=\"Sponsor 3\" \u002F>\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fopencollective.com\u002Funiver\u002Fsponsor\u002F4\u002Fwebsite\">\u003Cimg src=\"https:\u002F\u002Fopencollective.com\u002Funiver\u002Fsponsor\u002F4\u002Favatar.svg\" alt=\"Sponsor 4\" \u002F>\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fopencollective.com\u002Funiver\u002Fsponsor\u002F5\u002Fwebsite\">\u003Cimg src=\"https:\u002F\u002Fopencollective.com\u002Funiver\u002Fsponsor\u002F5\u002Favatar.svg\" alt=\"Sponsor 5\" \u002F>\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fopencollective.com\u002Funiver\u002Fsponsor\u002F6\u002Fwebsite\">\u003Cimg src=\"https:\u002F\u002Fopencollective.com\u002Funiver\u002Fsponsor\u002F6\u002Favatar.svg\" alt=\"Sponsor 6\" \u002F>\u003C\u002Fa>\n\n\u003Ca href=\"https:\u002F\u002Fopencollective.com\u002Funiver\u002Fbacker\u002F0\u002Fwebsite\">\u003Cimg src=\"https:\u002F\u002Fopencollective.com\u002Funiver\u002Fbacker\u002F0\u002Favatar.svg\" alt=\"Backer 0\" \u002F>\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fopencollective.com\u002Funiver\u002Fbacker\u002F1\u002Fwebsite\">\u003Cimg src=\"https:\u002F\u002Fopencollective.com\u002Funiver\u002Fbacker\u002F1\u002Favatar.svg\" alt=\"Backer 1\" \u002F>\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fopencollective.com\u002Funiver\u002Fbacker\u002F2\u002Fwebsite\">\u003Cimg src=\"https:\u002F\u002Fopencollective.com\u002Funiver\u002Fbacker\u002F2\u002Favatar.svg\" alt=\"Backer 2\" \u002F>\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fopencollective.com\u002Funiver\u002Fbacker\u002F3\u002Fwebsite\">\u003Cimg src=\"https:\u002F\u002Fopencollective.com\u002Funiver\u002Fbacker\u002F3\u002Favatar.svg\" alt=\"Backer 3\" \u002F>\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fopencollective.com\u002Funiver\u002Fbacker\u002F4\u002Fwebsite\">\u003Cimg src=\"https:\u002F\u002Fopencollective.com\u002Funiver\u002Fbacker\u002F4\u002Favatar.svg\" alt=\"Backer 4\" \u002F>\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fopencollective.com\u002Funiver\u002Fbacker\u002F5\u002Fwebsite\">\u003Cimg src=\"https:\u002F\u002Fopencollective.com\u002Funiver\u002Fbacker\u002F5\u002Favatar.svg\" alt=\"Backer 5\" \u002F>\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fopencollective.com\u002Funiver\u002Fbacker\u002F6\u002Fwebsite\">\u003Cimg src=\"https:\u002F\u002Fopencollective.com\u002Funiver\u002Fbacker\u002F6\u002Favatar.svg\" alt=\"Backer 6\" \u002F>\u003C\u002Fa>\n\n## 📄 License\n\nCopyright (c) 2021-present DreamNum Co., Ltd.\n\nLicensed under the [Apache-2.0](.\u002FLICENSE) license.\n","Univer 是一个用于创建和编辑电子表格的全栈框架，支持在网页端和服务端使用，并且可以通过自然语言直接驱动 Univer 电子表格。项目核心功能包括基于Canvas的渲染、公式引擎以及统一的Facade API，既可以在浏览器中运行也能在Node.js环境中使用。它采用了插件架构，便于扩展和定制。适用于需要嵌入式办公应用（如电子表格、文档和演示文稿）的场景，尤其适合那些希望在自己产品中集成高效生产力工具而不依赖于特定托管服务或固定用户界面的开发者。",2,"2026-06-11 03:36:49","high_star"]