Missing features
An honest accounting of what is not yet built, audited against the shipped demo catalog. Most of what used to live here has shipped; the remaining gaps are small and clearly marked. Each entry has a rough effort estimate (S / M / L).
Shipped items are struck through with the demo or API that covers them, so you can see both the trajectory and the (short) list of real gaps.
Columns
| Gap | Status | Effort |
|---|---|---|
getRowId prop |
shipped | ✓ |
cellClass(ctx) / rowClass(ctx) callbacks |
shipped | ✓ |
getColumnWidths() / setColumnWidth() |
shipped | ✓ |
setColumnPinning() / getColumnPinning() |
shipped | ✓ |
shipped - enableColumnReorder; demo 109-column-reorder-engine |
✓ | |
shipped - sortable / filterable on ColumnDef |
✓ | |
shipped - cell merging via MergeSpec + spreadsheetLayout (demo 170), plus declarative value-driven colSpan / rowSpan via spansToMerges |
✓ |
Rows
| Gap | Status | Effort |
|---|---|---|
shipped - pinnedTopRows / pinnedBottomRows; demos 107-pinned-rows, 108-pinned-rows-engine |
✓ | |
shipped as cell merging - rowspan in MergeSpec; demo 170-cell-merging |
✓ | |
shipped - isDetailRow; demo 106-detail-rows |
✓ | |
<SvGrid> |
shipped - rowHeight accepts (rowIndex) => px |
✓ |
shipped - autoRowHeight wraps cell text and measures each row, virtualization included |
✓ | |
api.getDisplayedRows() |
shipped | ✓ |
shipped - treeData nests by parent id, flattenTreeData converts nested children; treegrid role + arrow-key expand; demo 426-tree-data |
✓ | |
shipped - rowDragManaged reorders in-grid and moves rows grid-to-grid via a shared rowDragGroup; onRowDragEnd on the receiver; demos 105-row-reorder (custom) + 180-row-dragging (managed) |
✓ |
Cells
| Gap | Status | Effort |
|---|---|---|
ColumnDef |
shipped - tooltip; demo 85-tooltips-and-notes |
✓ |
shipped - a real module in @svgrid/enterprise/sheet: parser, evaluator, the common functions plus financial, math, statistics, text and date packs (the formulas page lists them), cross-sheet and whole-column refs, short-circuiting IF / IFERROR, a dependency graph for incremental recalc, and translateFormula / fixupReferences. Absolute refs are now absolute (the demo copies stripped $, so anything filled or copied was quietly wrong) |
✓ | |
shipped - <SvFormulaBar> shows the raw text behind the active cell, autocompletes function names closest-match-first with signature hints, and its Name Box jumps to an address or a defined name; createNames defines them. Demo 453 |
✓ | |
shipped - an Excel format-string compiler (compileNumberFormat) plus a store keyed on row id so formatting survives a sort, wired to Ctrl+1, Ctrl+Shift+1..6 and Ctrl+B/I/U. Demo 453 |
✓ | |
| shipped - Alt+= over the run Excel would guess | ✓ | |
| shipped - the sheet shell outlines every cell a formula in progress refers to, each in its own colour, whether the formula is typed in the cell or in the bar | ✓ | |
shipped - Ctrl+F; demo 87-find-in-grid |
✓ | |
shipped - enableSheet() binds Ctrl+Arrow (a run-boundary search, so it hops gaps), Ctrl+Shift+Arrow, Ctrl+A region-then-sheet, Ctrl+Space / Shift+Space, Ctrl+D / Ctrl+R, Ctrl+; and Ctrl+'; demo 452-excel-shortcuts. Bind your own through the free registerGridShortcuts seam |
✓ | |
shipped - enableSheet() wires translateFormula into Ctrl+D / Ctrl+R, so a filled formula shifts its relative refs and keeps its pinned ones |
✓ | |
shipped - values / formulas / formats / transpose / add-subtract-multiply-divide / skip-blanks, plus a text/html clipboard flavour so formats and formulas survive a round trip through Excel. Ctrl+Shift+V |
✓ | |
shipped - match case, whole cell, look in values or formulas, scope to the selection, Replace All as one undo. Ctrl+H |
✓ | |
shipped - textToColumns / splitText / guessDelimiter split a column, quoted fields and doubled quotes included; findDuplicates / removeDuplicates report before they remove, and match case-insensitively as Excel does |
done | |
shipped - the shell's File tab opens an .xlsx, an .ods, an .xls or a .csv into the document (decided by the bytes, not the file name) and saves the document back as any of the first three, formulas, formats, sizes, hidden lines and sheets, panes, merges, validation, conditional formatting, protection, comments and names included as far as each format carries them; documentToXlsx / documentFromXlsx, documentToOds / documentFromOds, documentToXls / documentFromXls and documentFromFile in @svgrid/enterprise/sheet |
done | |
shipped - createWorkbook holds named sheets that read each other, with the dependency graph and structural edits spanning them; <SvSheetTabs> plus Ctrl+PageUp/PageDown and Shift+F11 |
done | |
shipped - goalSeekCell solves for the input that makes a formula hit a target, secant with a bisection fallback, restoring the input cell so a dialog can ask before applying |
done | |
shipped - Orders[Amount], [@Amount], [#Headers] / [#Totals] / [#All], column spans and auto-expansion. Resolved at evaluation, so a total keeps covering rows added after it was typed |
done | |
shipped - renameSheet rewrites every qualified reference and defined name through the parser, so a string literal that happens to hold the old name is untouched and a new name with a space comes out quoted |
✓ | |
shipped - Ctrl+Shift+Plus / Ctrl+Minus rewrite every formula and named range through fixupReferences |
✓ | |
shipped - frozenRows={N} on the grid keeps the first N rows under the header, the grid's own rows still, with the virtual window skipping them; applyFreeze / freezeAtActiveCell set both halves through the api and the shell keeps the panes per sheet |
✓ | |
Alt+Enter, F4 |
shipped - Alt+Enter is a line break in the grid's multiline text editor and turns on Wrap Text in the sheet, whose rows grow to fit; F4 turns the reference at the caret through its anchorings, in the cell and in the formula bar | ✓ |
shipped - notes prop + cell comments; demos 85-tooltips-and-notes, 91-cell-comments |
✓ | |
shipped - cellFlash on ColumnDef |
✓ | |
shipped - moveCells, on by default with cell selection; demo 429-move-cells |
✓ | |
shipped - <sv-grid-shadow> in @svgrid/grid-wc. Open roots only; closed is unsupported, because a null shadowRoot leaves you unable to style, query or test your own grid |
✓ | |
| Eight draggable resize handles on a selection | declined - shift-click, shift-arrow, pointer drag and Ctrl+drag already resize a range four ways. Eight more hit targets per range in the hottest render path buys an interaction users already have. | - |
Export / Print
| Gap | Status | Effort |
|---|---|---|
shipped in @svgrid/enterprise (CSV / TSV / JSON export is free in @svgrid/grid) - demos 21, 56-59, 93, 101, 119, 126, 127 |
✓ |
Filtering
| Gap | Status | Effort |
|---|---|---|
between operator in the column menu |
shipped - demo 64-filter-between-operator |
✓ |
shipped - demo 111-set-filter-advanced |
✓ | |
shipped - demo 110-locale-aware-filter |
✓ | |
clearAllFilters() / getFilters() |
shipped | ✓ |
shipped - filter row honours every operator per column with typed inputs + inline between; demo 179 |
✓ | |
shipped - two conditions per column via the funnel or api.setFilter; demo 178 |
✓ |
Editing
| Gap | Status | Effort |
|---|---|---|
cellEditor slot for custom inline editors |
shipped - demos 84-editor-types, 66-custom-cell-editors |
✓ |
shipped - editorType: 'list' / 'rich-select'; demo 84-editor-types |
✓ | |
shipped - demo 84-editor-types |
✓ | |
validate() |
shipped - demos 24-validation, 103-async-validation |
✓ |
shipped - api.undo() / redo(); demo 86-undo-redo |
✓ | |
shipped - demo 88-staged-editing |
✓ | |
valueParser |
shipped - valueParser on ColumnDef; demo 175 |
✓ |
api.startEditing() / stopEditing() |
shipped - demo 176 |
✓ |
shipped - fullRowEditing; demo 177 |
✓ | |
shipped - editorOptions may return a Promise (per column or per row), with a loading state, caching and api.refreshEditorOptions(); demo 428-async-editor-options |
✓ |
The real remaining gaps (short list)
The previous round shipped declarative col/row spanning, cell flash,
valueParser, programmatic start/stop editing, full-row editing, multi-condition
filters, per-operator floating filters, and managed grid-to-grid row dragging -
all with demos and docs. What is left is a short list of AG-Grid-Enterprise
parity items, mostly UX affordances on top of engines that already exist:
Audited against the code and the 171-demo catalog (four-way inventory, June 2026).
This list is deliberately short - most AG-Grid-Enterprise parity items already
ship (row-group panel 89, status bar 144, tool panel 146, pivot + designer,
server-side row model 148, export with images/styles 56/58, charts,
sparklines, collaboration). The genuine remaining gaps:
| Gap | What exists today | Effort |
|---|---|---|
shipped - Ctrl/Cmd+drag adds ranges; all highlight + copy together; api.selectCells([...]) takes many; demo 118 |
✓ | |
cellDataType) |
shipped - cellDataType on ColumnDef + grid-level inferColumnTypes |
✓ |
shipped - merges option on exportData (single-sheet), lines up with MergeSpec |
✓ | |
shipped - Columns | Filters tabs in the tool panel (146), in sync with the column menu |
✓ | |
shipped - copyHeadersToClipboard + processCellForClipboard hook |
✓ | |
shipped - alignedGridGroup syncs horizontal scroll + column-resize widths; demo 182 |
✓ | |
shipped - columnGroupShow: 'open' | 'closed' + openByDefault; demo 183 |
✓ | |
| shipped - tabbed column menu; demo any filterable grid | ✓ | |
shipped - rowDropZone action (drop rows onto any element); demo 184 |
✓ | |
shipped - isDetailRow + renderDetailRow hosting a child grid; demo 181 |
✓ |
Still open (medium / large)
| Gap | Note | Effort |
|---|---|---|
shipped - a column filter takes a second condition joined by AND / OR, in the menu and via api.setFilter |
✓ | |
| Custom filter / floating-filter component slot | first-class pluggable filter. Needs a MODEL seam as well as a render one: menu filters compile through compileExcelFilter from the closed FilterOperator union, so there is nowhere for a consumer predicate to enter today |
L |
| Custom tool panels | panel is fixed Columns + Filters (toolPanelDefaultTab is a "columns" | "filters" union, with no registry) |
M |
shipped - the localization prop takes { locale, text }, where text is a partial GridMessages; every menu/panel/chrome string is overridable. Note there is no localeText prop, and no translation catalogues ship in the box - you supply the strings. See i18n and RTL |
✓ | |
shipped - groupDisplayMode: 'groupRows' | 'singleColumn' | 'multipleColumns' plus groupFooters and grandTotalRow; demo 427-group-footers |
✓ | |
shipped - enablePivot() registers the engine and the main grid pivots in place |
✓ | |
shipped - crossFilter config plus applyChartCrossFilter / clearChartCrossFilter, wired from chart selection in SvGridChartPanel, with a Clear filter button; the panel toolbar has chart-type switching, export, AI, add-chart, tabs, maximize, dock and pop out. The picker now reaches all 15 types (it offered 4), gated on whether the current columns can feed each one, and --sg-chart-* tokens let a theme recolour the series |
✓ | |
shipped 12 Sep 2026, all free in @svgrid/grid - per-axis config with a numeric x axis and reference bands; histogram, range, lollipop, dumbbell, pareto, stream, sunburst, radial, nightingale, chord and bullet; wheel / pinch / pan zoom, range presets, syncGroup, a context menu, animation, drilldown, point selection, LTTB decimation; eight indicators with SvChartPanes, rowsToOhlcSpec + resampling, a last-price line, flags, drawing tools; PDF and print; the in-panel builder with a type gallery, Format tab and link / unlink; <sv-chart> with React / Vue / Angular wrappers. Demos 434 to 437 |
✓ | |
shipped (Enterprise) - createServerRowModel sends pivotBy + pivotMode, builds the columns from pivotResultFields, and SvPivotDesigner drives it in server mode; see Server pivot |
✓ | |
| Viewport row model (the server pushes the visible window over a socket) | not built; real-time merges deltas into loaded rows instead, and a socket can push a whole level through applyRowData |
M |
What's already there
The stable, built-in feature surface is large. Highlights: sorting (single +
multi), per-column filtering (menu + row + global) with a between range
operator and set/tree/async filters, pagination, grouping + aggregation, tree
data, master/detail + full-width detail rows, row + column virtualization
(100k+ and a 1M-row demo), cell-range selection + copy/paste + Excel-style fill
handle + drag-the-border move/copy, inline editing with 14 editor types plus a custom cellEditor slot,
undo/redo, staged editing, find-in-grid, notes + cell comments, tooltips,
conditional formatting, sparklines, cell merging, column pinning/reorder/resize,
row pinning, a formula engine (+ HyperFormula adapter), a server-side row model (flat paging and infinite scroll free; grouping, tree, pivot, transactions and selection across unloaded rows in Enterprise),
Excel/PDF/CSV/HTML export + print (Enterprise), pivot + charts + AI (Enterprise),
WAI-ARIA + keyboard nav, RTL, i18n, theming via --sg-* tokens, SSR, and a
CSP-clean runtime.
How to contribute
- Pick a gap from The real remaining gaps above.
- Open an issue describing the API you'd want - names, types, the minimal change.
- If you can write the patch, do so, and keep tests with the change.
Related articles
- What's New in SvGrid Enterprise - Export, Pivot, Import, Print, and AI - A practical look at @svgrid/enterprise - pivot tables, Excel and PDF export, data import, printing, and an AI assistant. Covers when each feature earns its place and what to watch out for in production.