20 KiB
Un SDK ofimático full-stack e isomórfico para crear hojas de cálculo, documentos y presentaciones.
Univer ayuda a crear experiencias de productividad integrables con una arquitectura de plugins, renderizado basado en Canvas, un motor de fórmulas y una Facade API que funciona tanto en el navegador como en Node.js.
English | 简体中文 | 繁體中文 | 日本語 | 한국어 | Español
✨ ¿Qué es Univer?
Univer es un SDK de código abierto para crear aplicaciones ofimáticas dentro de tu propio producto. Proporciona los bloques necesarios para experiencias de hojas de cálculo, documentos y presentaciones sin obligarte a usar una aplicación alojada ni una UI fija.
Usa Univer cuando necesites:
- Integrar edición de hojas de cálculo o documentos en un SaaS, herramienta interna, flujo de BI o aplicación de IA.
- Ejecutar procesamiento de libros/documentos en el servidor con la misma arquitectura que se usa en el navegador.
- Componer solo las funciones que necesitas mediante plugins o empezar rápido con presets.
- Extender el comportamiento mediante plugins personalizados, comandos, servicios, componentes de UI y Facade APIs.
Univer no es solo un visor de archivos de hojas de cálculo. Es un framework para crear tu propia superficie de productividad.
🌟 Highlights
|
⚡ Preparado para superficies grandes El renderizado Canvas y un motor de fórmulas dedicado mantienen responsivos los libros complejos. |
🧩 Extensible por plugins Compón, reemplaza, carga bajo demanda o amplía capacidades sin adoptar todo el stack. |
🤖 Headless para infraestructura de IA Ejecuta lógica de libros y documentos en Node.js para impulsar agentes, automatización y flujos del servidor. |
|
🛠️ SDK listo para producto Adaptadores de framework, Facade APIs, presets y runtime headless encajan en integraciones reales. |
🌗 Dark mode listo Los componentes de UI y el motor de renderizado se adaptan a temas claros y oscuros. |
🔌 Facade API unificada Una API consistente para libros, rangos, fórmulas y documentos en el navegador y Node.js. |
🚀 ¿Por qué Univer?
- Diseño isomórfico: ejecuta aplicaciones UI en navegadores y procesamiento headless en Node.js.
- Arquitectura basada en plugins: cada capacidad se entrega como un plugin componible, por lo que las funciones se pueden añadir, quitar, reemplazar o cargar bajo demanda.
- Preset mode para integración rápida: usa bundles de plugins preparados desde
univer-presetscuando quieras una aplicación funcional rápidamente. - Plugin mode para control total: compón paquetes manualmente cuando necesites carga personalizada, bundles más pequeños o integración profunda.
- Facade API: trabaja con libros, hojas, rangos, documentos, fórmulas, comandos y eventos mediante una API de alto nivel.
- Motor de renderizado Canvas: soporta superficies editables grandes y comparte la capa de renderizado entre distintos tipos de documento.
- UI extensible: integración con React, Vue, Web Components y shells de aplicación específicos de cada framework.
⚡ Inicio rápido
Para la mayoría de las aplicaciones, empieza con Preset Mode. Usa Plugin Mode cuando necesites componer paquetes manualmente y controlar el registro de plugins.
Preset Mode (recomendado)
Los presets son colecciones curadas de plugins de Univer que incluyen los registros de Facade API y estilos necesarios.
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 te da control de bajo nivel sobre paquetes, imports de estilos, combinación de locales, registro de Facade API y orden de plugins.
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 { 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/docs-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,
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({})
Tu página necesita un contenedor:
<div id="app" style="height: 100vh"></div>
Consulta más detalles en la guía de instalación y uso básico, la referencia de createUniver y la referencia de Facade API.
🧩 Preset Mode vs Plugin Mode
| Opción | Cuándo usarla | Empieza aquí |
|---|---|---|
| Preset Mode | Quieres una configuración funcional de Sheets, Docs o Node con mínima configuración. | univer-presets y la guía de inicio |
| Plugin Mode | Necesitas control estricto sobre paquetes, orden de registro de plugins, carga bajo demanda o composición personalizada en tiempo de ejecución. | Los examples/ de este repositorio y la guía de arquitectura |
| Headless Mode | Necesitas procesamiento de libros/documentos en servidor, cálculo de fórmulas o automatización sin UI. | Headless Univer |
Mantén todos los paquetes @univerjs/* en la misma versión. Si usas paquetes de Univer Pro, mantén también alineadas las versiones de @univerjs-pro/*.
🧭 Compatibilidad
- Runtime de navegador: Univer se compila con objetivo Chrome 70 y busca funcionar en Edge
>=70, Firefox>=63, Chrome>=70, Safari>=12.0y Electron>=5. - Polyfills: Univer depende de
Intl.Segmenter. Añade un polyfill como@formatjs/intl-segmentersi tu navegador o runtime objetivo no lo incluye. - Herramientas de build: Recomendamos Vite, esbuild o Webpack 5. Si tu herramienta no soporta el campo
exportsdepackage.json(común en Webpack 4), puede que necesites configurar mapeos de ruta adicionales. - React: La capa de vista de Univer está construida sobre React 18, soporta React 18 y 19, y ofrece compatibilidad mínima para React 16.9+ y 17.
- Runtime Node.js: Headless Univer soporta Node.js
>=18.17.0. Para desarrollar este monorepo se requiere Node.js>=22.18.
🛠️ Qué puedes construir
| Área | Capacidades open source |
|---|---|
| Sheets | Libros, hojas, rangos, selección, fórmulas, formato numérico, filtros, ordenación, validación de datos, formato condicional, hipervínculos, comentarios, buscar y reemplazar, notas, tablas, integración de dibujo y plugins de UI extensibles. |
| Docs | Modelo de documento enriquecido, UI de edición, listas, hipervínculos, integración de dibujo, comentarios, inserción rápida y arquitectura compartida de documentos. |
| Slides | Modelo de datos de presentaciones y paquetes de UI en desarrollo activo. |
| Runtime | Aplicaciones en navegador, uso headless en Node.js, patrones Web Worker/RPC, múltiples instancias y automatización orientada al servidor. |
| Integrations | React, Vue, Web Components, plantillas de frameworks, temas, localización y plugins personalizados. |
Sheets es actualmente la superficie de producto más madura. Docs y Slides comparten la arquitectura de Univer y siguen evolucionando dentro del mismo SDK.
🔓 Open Source y Pro
Este repositorio contiene el núcleo open source de Univer y plugins OSS de primera parte. Algunas funciones empresariales se desarrollan como paquetes de Univer Pro y requieren integración aparte.
| Open source | Univer Pro / comercial |
|---|---|
| SDK core, sistema de plugins, motor de renderizado, motor de fórmulas, Facade API, paquetes de Sheets/Docs/Slides, temas, i18n y muchos plugins de primera parte. | Colaboración en tiempo real, importación/exportación, impresión, gráficos, tablas dinámicas, sparklines, fórmulas avanzadas, historial de edición, componentes de servidor Pro y gestión de licencias. |
Las funciones Pro están documentadas en la guía de Univer Pro. Se separan aquí intencionalmente para que el alcance OSS sea claro.
🌐 Ecosistema
- Core SDK:
dream-num/univer, este monorepo. - Presets:
dream-num/univer-presets, bundles de plugins para aplicaciones en navegador y Node.js. - AI agent skills:
dream-num/univer-sdk-skills, instrucciones reutilizables para agentes de IA que trabajan con integración de Univer, funciones Pro, desarrollo de plugins y backends Node. Consulta la guía de AI Skills. - Documentación: docs.univer.ai, con guías de Sheets, Docs, Slides, recipes y Pro.
- API Reference: docs.univer.ai/reference, Facade API y referencia de API generada.
- Ejemplos y showcase: Univer Showcase y los
examples/de este repositorio. - AI-native spreadsheets:
dream-num/univer-mcp, integración Univer Platform / MCP para controlar Univer Sheets con lenguaje natural.
📦 Guía del repositorio
.
├── packages/ Paquetes core, motores, tipos de documento, plugins UI y plugins de funciones
├── examples/ Demos locales de navegador y Node.js usadas para desarrollo
├── common/ Herramientas internas compartidas, mock data, storybook y utilidades
├── e2e/ Pruebas Playwright y de comparación visual
├── tests/ Proyectos adicionales de pruebas de integración
└── docs/ Notas de arquitectura, imágenes y documentación local del repositorio
Los README de cada paquete están junto a sus paquetes dentro de packages/.
🧑💻 Desarrollo
Requisitos:
- Node.js
>=22.18 - pnpm
>=10
git clone https://github.com/dream-num/univer.git
cd univer
pnpm install
pnpm dev
Comandos útiles:
| Comando | Propósito |
|---|---|
pnpm dev |
Inicia la aplicación local de ejemplos. |
pnpm build |
Compila los paquetes del workspace, excluyendo paquetes internos de common. |
pnpm test |
Ejecuta pruebas unitarias mediante Turbo. |
pnpm typecheck |
Ejecuta comprobaciones TypeScript mediante Turbo. |
pnpm lint |
Ejecuta ESLint. |
pnpm test:e2e |
Ejecuta pruebas Playwright. |
pnpm storybook:dev |
Inicia Storybook para desarrollo de componentes UI. |
Lee CONTRIBUTING.md antes de abrir un pull request.
📝 Notas para contribuidores
Notas locales del repositorio que vale la pena leer antes de cambios profundos:
- Building Isomorphic Univer: cómo separar lógica de navegador, Node.js, UI y plugins compartidos.
- Contributing to Facade API: expectativas de diseño para
FUniver,FWorkbook,FRangey clases Facade relacionadas. - Naming Convention: convenciones para archivos, carpetas, interfaces, plugins, comandos y tokens de inyección de dependencias.
- Fixing Memory Leaks: patrones comunes de fugas de memoria y flujo de depuración para instancias Univer.
- Architecture TLDRs: notas breves sobre motor de fórmulas, Web Worker, permisos, selección y comportamiento ref-range.
💬 Comunidad
- Haz preguntas en GitHub Discussions.
- Habla con la comunidad en Discord.
- Sigue Twitter / X y YouTube.
Lee el Código de Conducta antes de participar.
🔒 Seguridad
Si crees haber encontrado un problema de seguridad, sigue la Política de Seguridad.
❤️ Patrocinadores
Univer cuenta con el apoyo de la comunidad y patrocinadores. Puedes apoyar el proyecto a través de Open Collective.
📄 Licencia
Copyright (c) 2021-present DreamNum Co., Ltd.
Publicado bajo la licencia Apache-2.0.