witqq spreadsheet is a canvas-based spreadsheet engine for the web. This page maps every capability to its documentation.
| Feature | Description | Docs |
|---|
| Canvas 2D Rendering | Layer-based pipeline, 60 FPS at 100K+ rows | Rendering |
| Data Model | Sparse CellStore, RowStore, ColStore, StylePool | Data Model |
| Event System | Typed EventBus with 25+ events | Events |
| Themes | Light/dark themes, runtime switching, full customization | Themes |
| Architecture | Zero-dependency core, plugin system, framework wrappers | Architecture |
| Feature | Description | Docs |
|---|
| Cell Selection | Click, Shift+click range, Ctrl+click multi-select | Selection |
| Keyboard Navigation | Arrow keys, Tab, Enter, Home/End, PageUp/Down, Ctrl+Home/End | Selection |
| Row/Column Selection | Click row numbers or headers for full row/column selection | Selection |
| Feature | Description | Docs |
|---|
| Inline Editor | Textarea overlay, F2/double-click open, Enter/Escape/Tab | Editing |
| Undo & Redo | 100-step command stack, Ctrl+Z / Ctrl+Y | Undo & Redo |
| Clipboard | Copy/Cut/Paste, TSV + HTML formats, Excel/Sheets interop | Clipboard |
| Drag-to-Fill | Pattern detection (numbers, dates, text), merge-aware | Autofill |
| Validation | Column/cell rules: required, min/max, regex, custom | Validation |
| Change Tracking | Cell status lifecycle: changed → saving → saved, error | Change Tracking |
| Feature | Description | Docs |
|---|
| Sorting | Multi-column stable sort, type-aware, header click toggle | Sorting |
| Filtering | 14 operators, AND logic, FilterPanel UI | Filtering |
| DataView | Logical↔physical row mapping for sort/filter pipeline | DataView |
| Frozen Panes | Freeze rows/columns, 4-region rendering with ImageData caching | Frozen Panes |
| Cell Merging | Spatial index, anchor/hidden cells, merge-aware navigation | Merging |
| Row Grouping | Parent-child tree, expand/collapse, cascading aggregates | Row Grouping |
| Streaming | pushRows/updateRow/deleteRow, throttle batching | Streaming |
| Pivot Tables | Cross-tabulation, 5 aggregate functions, drill-down | Pivot Tables |
| Plugin | Description | Docs |
|---|
| Formula Engine | Custom tokenizer/parser/evaluator, dependency graph, Web Worker mode | Formulas |
| Custom Functions | Register domain-specific functions (e.g. TAX, DISCOUNT) | Custom Functions |
| Conditional Formatting | Value rules, gradient scales, data bars, icon sets | Conditional Format |
| Excel I/O | Import/export via SheetJS (Apache-2.0), lazy-loaded | Excel |
| Collaboration | OT engine, WebSocket transport, remote cursors | Collaboration |
| Progressive Loader | Chunked loading with scheduler.yield, progress overlay | Progressive Loader |
| Plugin System | Install/remove/dependencies, isolated state, PluginAPI | Plugin System |
| Framework | Description | Docs |
|---|
| React | WitTable<TRow> component, callbacks, ref API, prop updates | React |
| Vue 3 | Composition API, props/emits/defineExpose | Vue 3 |
| Angular | Standalone component, Input/Output bindings | Angular |
| Vanilla JS / Widget | IIFE/UMD bundle, WitTable.create(), <36KB gzip | Widget |
| Feature | Description | Docs |
|---|
| Performance | 100K rows default, 1M rows toggle, FPS counter, measureInitTime | Performance |
| Column/Row Resize | Drag headers/row numbers, min/max constraints, undoable | Resize |
| Context Menu | Right-click menu, extensible items, keyboard navigation | Context Menu |
| Accessibility | WCAG 2.1 AA, role=grid, aria-live announcements | Accessibility |
| Print Support | @media print CSS, DOM table generation, maxPrintRows | Print |
| Cell Types | Built-in (string, number, boolean, date) + custom renderers | Cell Types |
| Page | Description |
|---|
| WitEngine API | All public methods on the engine orchestrator |
| Core Types | CellValue, CellData, CellStyle, ColumnDef, CellRange, etc. |
| Cell Types | CellTypeRegistry, built-in and custom type renderers |