@witqq/spreadsheet

March 11, 2026 · View on GitHub

Canvas-based spreadsheet and datagrid engine for React, Vue, Angular, and vanilla JS. Zero external dependencies in the core package.

npm install @witqq/spreadsheet @witqq/spreadsheet-react
import { Spreadsheet } from '@witqq/spreadsheet-react';

const columns = [
  { key: 'name', title: 'Name', width: 200 },
  { key: 'value', title: 'Value', width: 120, type: 'number' },
];

const data = [
  { name: 'Alpha', value: 100 },
  { name: 'Beta', value: 200 },
];

function App() {
  return <Spreadsheet columns={columns} data={data} />;
}

Packages

PackagePathnpmDescription
@witqq/spreadsheetpackages/core/npmCanvas engine — rendering, editing, selection, data model, commands, theming, localization. 224 exports.
@witqq/spreadsheet-reactpackages/react/npmReact wrapper component. 18 exports.
@witqq/spreadsheet-vuepackages/vue/npmVue 3 wrapper component. 19 exports.
@witqq/spreadsheet-angularpackages/angular/npmAngular wrapper component. 13 exports.
@witqq/spreadsheet-pluginspackages/plugins/npmFormulas, conditional formatting, collaboration (OT), Excel I/O, context menu, progressive loader. 40 exports.
@witqq/spreadsheet-widgetpackages/widget/npmIIFE/UMD bundle for <script> tag embedding. 12 exports.
@witqq/spreadsheet-serverpackages/server/privateWebSocket collaboration relay server. README

Each package README contains full API documentation with all exported functions, classes, interfaces, and types — sufficient for LLM agents to use the library from node_modules without internet access.

Package Decision Tree

Need a spreadsheet in your app?
├── Using React?       → @witqq/spreadsheet-react
├── Using Vue 3?       → @witqq/spreadsheet-vue
├── Using Angular?     → @witqq/spreadsheet-angular
├── No framework / plain HTML?
│   ├── Build step available? → @witqq/spreadsheet (use SpreadsheetEngine directly)
│   └── No build step?       → @witqq/spreadsheet-widget (<script> tag)
└── Need server-side collab?  → @witqq/spreadsheet-server

Need plugins?
├── Formulas (SUM, IF, etc.)        → @witqq/spreadsheet-plugins → FormulaPlugin
├── Conditional formatting          → @witqq/spreadsheet-plugins → ConditionalFormattingPlugin
├── Excel import/export             → @witqq/spreadsheet-plugins → ExcelPlugin
├── Real-time collaboration (OT)    → @witqq/spreadsheet-plugins → CollaborationPlugin
├── Right-click context menu        → @witqq/spreadsheet-plugins → createContextMenuPlugin
└── Progressive loading (100K+ rows)→ @witqq/spreadsheet-plugins → ProgressiveLoaderPlugin

All framework wrappers re-export core types (ColumnDef, CellData, SpreadsheetTheme, etc.) so you typically don't need to import from @witqq/spreadsheet directly. The wrapper packages list @witqq/spreadsheet as a regular dependency (installed automatically).

Core API Overview

The core package (@witqq/spreadsheet) provides SpreadsheetEngine — the main class that manages the entire spreadsheet lifecycle. See packages/core/README.md for the full 224-export API reference.

Key areas:

AreaKey ExportsDescription
EngineSpreadsheetEngine, SpreadsheetEngineConfigMain class: mount, destroy, data, plugins, events
ColumnsColumnDef, CellType, CellTypeRendererColumn definition, type system, custom renderers
DataCellData, CellValue, CellAddress, CellStoreCell data model, addresses, storage
SelectionSelection, SelectionManagerCurrent selection, multi-range, keyboard navigation
CommandsCommand, CommandManagerUndo/redo command pattern
EventsEventBus, CellChangeEvent, SelectionChangeEventEvent system for all state changes
RenderingRenderLayer, CanvasManager, GridRendererCanvas rendering pipeline, custom layers
ThemingSpreadsheetTheme, lightTheme, darkThemeTheme definitions, built-in themes
LocalizationSpreadsheetLocale, enLocale, ruLocale, resolveLocalei18n, locale packs, partial overrides
EditingCellEditor, CellEditorRegistry, InlineEditorCell editing, custom editors, date pickers
StylingCellStyle, BorderStyle, StylePoolPer-cell font, color, alignment, borders
DecoratorsCellDecorator, CellDecoratorRegistrationComposable cell icons/indicators with hit zones
LayoutLayoutEngine, ViewportManagerFloat64Array positions, virtualized scrolling

Performance

MetricValue
Initial render (10K rows, 41 columns)~120ms
Initial render (100K rows)~350ms
Scroll FPS60fps
Widget bundle<36KB gzip
Core dependencies0
Memory (100K rows)~45MB

Development

npm install          # Install dependencies
npm run build        # Build all packages
npm run test         # Unit tests (Vitest)
npm run test:e2e     # E2E tests (Playwright)
npm run typecheck    # TypeScript strict mode
npm run lint         # ESLint
npm run dev          # Docker dev server on port 3150

License

BSL 1.1 — Free for non-commercial use. Commercial use requires a paid license. Change Date: 2030-03-01 → Apache License 2.0.

Contributing

See CONTRIBUTING.md.

Contact