Prezzi
Licenza per sviluppatore, con addebito mensile o annuale — copre sia PivotGrid sia DataGrid. Utilizzabile in un numero illimitato di applicazioni. Tasse e fatturazione gestite da Paddle.
Prezzi indicati al mese per facilitare il confronto. I piani annuali vengono addebitati una sola volta, in anticipo, e si rinnovano ogni anno — puoi disdire quando vuoi.
Community
Tabella pivot e griglia dati, gratis
- Gestisce milioni di righe senza rallentare
- Creazione di report con trascina e rilascia
- Ordina, filtra e raggruppa i dati
- Colora le celle e mostra le percentuali sul totale
- Viste salvate, temi e 12 lingue
- Importa file; esporta in CSV, JSON o stampa
- Anche DataGrid — righe virtualizzate, colonne fisse, export CSV
- Supporto della community su GitHub
Developer
Per uno sviluppatore singolo
Addebito di $185 una volta all'anno
Con l'annuale risparmi $43 all'anno (19%)
- Tutto di Community, più:
- PivotGrid: campi calcolati personalizzati
- PivotGrid: costruttore di filtri visuale e drill-down
- PivotGrid: grafici interattivi
- PivotGrid: export Excel e PDF formattato
- DataGrid: modifica in linea con validazione e lookup
- DataGrid: selezione di intervalli, maniglia di riempimento e incolla
- DataGrid: raggruppamento multilivello e master-detail
- DataGrid: export Excel e PDF formattato
- 1 sviluppatore, app illimitate
- 1 anno di aggiornamenti
Team
Per piccoli team
Addebito di $699 una volta all'anno
Con l'annuale risparmi $249 all'anno (26%)
- Tutto di Developer, più:
- Fino a 5 sviluppatori
- Supporto e-mail prioritario
- Risposta prima delle richieste Developer
- 1 anno di aggiornamenti
Enterprise
Per grandi organizzazioni
- Tutto di Team, più:
- Sviluppatori illimitati
- Condizioni di supporto definite nel contratto
- Richieste di funzionalità su misura
- Fatturazione e ordini di acquisto
Tutti i piani a pagamento includono il pacchetto proprietario @kanunilabs/pivotgrid-react-enterprise + @kanunilabs/pivotgrid-enterprise + @kanunilabs/datagrid-react-enterprise + @kanunilabs/datagrid-enterprise , distribuiti dal nostro registro privato con un token per cliente.
Licence questions
Who counts as a developer?
Every person who writes or modifies code that uses the library needs a seat. Designers, testers, product managers and CI machines do not. A contractor writing code for you counts as one of your seats for the duration of the work.
One licence, two components — really?
Yes. A paid key unlocks the Enterprise features of BOTH DataGrid and PivotGrid. There is no separate purchase and no second key to install.
What happens when my subscription ends?
You keep the last version you paid for, and applications already shipped with it stay licensed. You stop receiving new versions and support. Nothing you have deployed stops working or starts showing a watermark.
Can I ship the library inside a product I sell?
Yes, compiled into your application. What you may not do is redistribute the package itself, your registry token or your licence key — see the Terms of Service for the exact wording.
What exactly is free?
The Community edition of both components: no key, no watermark, no expiry, and commercial use is allowed. The table above lists every feature and which edition it needs.
How is the paid package delivered?
From our private registry with per-customer credentials that arrive with your purchase. Public packages are proxied through the same registry, so one line in your .npmrc covers everything.
Who do we buy from, and who invoices us?
Our order process is conducted by our online reseller Paddle.com, the Merchant of Record for all our orders. Paddle issues the invoice, charges and remits sales tax or VAT, takes the payment and handles refunds. The licence itself is granted under our Terms of Service. If your company needs a purchase order, a vendor form or a signed agreement, write to us before you buy.
Do you offer refunds?
Yes. Within 14 days of your purchase you get a full refund for any reason, and we do not ask why. The Refund Policy page explains how to ask and what happens to the licence.
What if we are more than five developers?
The Team tier covers up to five. Beyond that, use Contact sales above and we will quote for your team size.
Every feature, and which edition it needs
Generated from the same inventories the products themselves read — 122 of 185 features across both components need no licence key.
DataGrid
All 118 DataGrid features — 70 free
Data & performance
- Virtual scrollingCommunityA million rows, with only the visible window in the DOM.
- Web Worker offloadCommunityFiltering and sorting move off the main thread above ~20,000 rows.
- Columnar encodingCommunityTyped arrays instead of objects — the reason sort and filter stay fast.
- Server-side dataCommunityRows load from your server as the user scrolls; filtering, sorting, search, distinct values and totals run there, with Retry and refresh.
- Server-side grouping & exportEnterpriseYour server groups and totals, opens groups and tree levels on demand, and an export pages through the whole result.
- Rows pushed by the serverEnterpriseThe grid says which rows are on screen; your server pushes them and every change — a price feed, an order book.
- PaginationCommunityClassic pager with page size control.
- Numbered page buttonsCommunityJump straight to a page — 1 2 3 … 40, keyboard accessible.
- Infinite scrollCommunityAppend rows as the user reaches the end.
- TransactionsCommunityAdd, update and remove rows without rebuilding the grid.
- Async transactionsCommunityBatch a burst of live updates into one pass.
Columns
- SortingCommunitySingle and multi-column, with a custom comparator escape hatch.
- ResizingCommunityDrag the edge; double-click for best fit.
- ReorderingCommunityDrag a header to move the column.
- PinningCommunityFreeze columns to either edge.
- Visibility & chooserCommunityHide columns and bring them back from a picker.
- Rename columns in the gridEnterpriseUsers rename a header in place — the name follows into exports and saved views.
- Bands (multi-level headers)CommunityGroup headers over related columns, collapsible.
- Auto-size, fit & flexCommunitySize to content, fill the grid exactly, or share its width with flex columns.
- Automatic columnsCommunityInfer columns from the first row when you have not declared any.
- Custom sort orderCommunitySort by your own rule — "Critical > High > Normal".
- Sort by magnitudeCommunityOrder a variance column by size — −50 beside +50.
- Click cycle per columnCommunityChoose the steps a header click goes through — largest first, or never unsorted.
- Large integers (BigInt)CommunityExact sorting and filtering of 64-bit ids and amounts, held as bigint or as digits from JSON.
- Row animationCommunityRows glide to their new place after a sort, a filter or a data change, so a reader keeps track of them.
- Reorder after sortingCommunityHave the last word after every sort — keep cancelled orders or a total row at the bottom.
- Cell span / mergeEnterpriseMerge repeating cells down a column.
- Column spanCommunityDraw a cell across the columns after it, decided per row — a section heading across the grid.
- Wrapped header textCommunityLong captions wrap onto several lines, and the header grows to the tallest one.
- Calculated columnsCommunityA spreadsheet formula per column — [Price] * [Qty], IF, ROUND — that sorts, filters, groups and totals like data.
- Columns your users calculateEnterpriseUsers add, edit and remove calculated columns from the column menu, with a live preview; kept in the saved view.
Filtering
- Filter rowCommunityA per-column input under the header.
- Header filter popupCommunityCheckbox list of every distinct value, virtualized and unlimited.
- Quick searchCommunityOne box across every column, with match highlighting.
- Filter panel barCommunityShows the active filter as text, with one-click clear.
- Relative date filtersCommunityFilter a date column by "this month" or "the last 30 days" — typed into the filter row in the grid’s language, kept meaning the same tomorrow.
- External filterCommunityAND your own row predicate into the grid filter.
- Your own filter operatorsCommunityAdd operators of your own to a column — “starts with any of”, “within 10 km” — offered in the filter row and the filter builder.
- Your own filter UICommunityReplace a column’s filter cell or filter popup with a component of your own; it sets the same filter the built-in one would.
- Multi filterCommunityThe filter row and the popup coexist instead of overwriting each other.
- Find without filteringEnterpriseCtrl+F inside the grid marks every matching cell and steps through them — no row is hidden.
- Filter builderEnterpriseNested AND/OR conditions, built visually.
Grouping & hierarchy
- Grouping (one level)CommunityGroup by a column; drag it to the group panel.
- Group panelCommunityDrag columns in and out to regroup.
- Group columnCommunityThe group names, counts and toggles in a column of their own at the start, with its own header, width and sort.
- Sticky group headersCommunityThe headers of the groups you are scrolling through stay under the column header; the next group pushes them out.
- Multi-level groupingEnterpriseNest groups as deep as the data goes.
- Group summariesEnterprisePer-group totals in the group footer.
- Edit a group totalEnterpriseType a new subtotal and it is shared out over the group’s rows — proportionally or evenly, one undo step.
- Master-detailEnterpriseExpand a row into your own detail panel, and write the details into Excel and PDF exports.
- Tree dataEnterpriseHierarchies from a parent key, a path or nested children, with expand/collapse.
Totals
- Footer column totalsCommunityColumn-aligned totals over the whole filtered result.
- Totals row placementCommunityPin the totals row to the top or the bottom.
- Custom aggregationCommunityYour own reducer beside sum/avg/min/max/count.
- Selection statisticsEnterpriseSum, average, min, max and count of the selected range.
Selection & keyboard
- Row selectionCommunitySingle, multiple, and checkbox selection.
- Cell focus & keyboardCommunityArrow keys, Tab, Home/End, Page Up/Down.
- Focused rowCommunityA highlighted current row, independent of selection.
- Deferred selectionCommunityApply the selection when the user confirms it.
- Unselectable rowsCommunityRows your rule refuses cannot be ticked, clicked or picked up by select-all.
- CopyCommunityCtrl+C, with or without headers.
- Range selectionEnterpriseDrag a rectangle across cells; Ctrl/Cmd adds more.
- Column selection from the headerEnterpriseClick a header to select its whole column; Shift widens, Ctrl adds.
- Fill handleEnterpriseDrag the corner to fill a range, spreadsheet-style.
- Clipboard callbacksEnterpriseDecide what a copy writes and how a paste is read — raw values, cleaned pastes, your own clipboard.
- Cut & pasteEnterprisePaste a block from Excel straight into a range.
Editing
- Cell editingCommunityEdit one cell at a time, committed on blur or Enter.
- Parse and write valuesCommunityTurn what the user typed into your value (“1,5” → 1.5), and write it your own way — nested objects, immutable stores.
- Cell formulasEnterpriseType =A1*B2 into a cell: references stay on their cells through sorting and filtering, and the fill handle moves them.
- Batch editingEnterpriseCollect changes and save them together.
- Row editingEnterpriseEdit a whole row with save/cancel controls.
- Form editingEnterpriseEdit the record as a form laid out in the row flow.
- Popup editingEnterpriseEdit the record in a dialog over the grid.
- ValidationEnterprisePer-column rules with inline error reporting.
- CRUD handlersEnterpriseOne call per row — the shape REST and SQL want.
- PermissionsEnterpriseAllow add, update and delete per row, enforced in the engine.
- Custom editors & lookupsEnterpriseYour own editor component, or a lookup bound to another source.
- Undo / redoEnterpriseFull history with a public API and events.
Export & import
- CSV exportCommunityThe whole result or the current selection.
- Excel exportEnterpriseReal .xlsx, with the grid’s formatting carried over.
- Formulas & links in exportsEnterpriseCalculated columns and cell formulas reach Excel as live formulas; a column’s links become hyperlinks in Excel and PDF.
- PDF exportEnterprisePaginated, with repeated headers; streams for large results.
- Styled exportEnterpriseNumber formats, banded rows, outline levels, totals.
- Import wizardEnterpriseFile → column mapping → commit.
Presentation
- Themes & palettesCommunitySix themes, six palettes, light and dark.
- DensityCommunityCompact, normal and comfortable row heights.
- Cards on narrow screensCommunityBelow a width you choose, each row becomes a card — a title, then labelled fields — with a sort control in place of the headers. Same grid underneath: sort, filter, select and scroll a million rows.
- LocalizationCommunityTwelve languages, and your own strings.
- TooltipsCommunityAutomatic on truncated text, or your own rich content; open on hover, on keyboard focus or a tap, and let the pointer rest on them.
- Row numbersCommunityA numbered column that renumbers after sort and filter.
- Print layoutCommunityEvery row on paper, not just the rendered window.
- Aligned gridsCommunityTwo grids sharing one column layout.
- Cell flashCommunityHighlight cells that just changed.
- Loading & empty overlaysCommunityBuilt-in states you can drive yourself.
- Pinned rowsCommunitySticky comparison rows above or below the data.
- Pin rows from the menuCommunityUsers right-click a row to keep it in view above or below the data while they scroll and filter.
- Row drag & dropCommunityReorder rows, or move them between grids.
- SparklinesEnterpriseA small chart inside a cell.
- Cell notesEnterpriseA corner marker with text on hover, editable from the menu.
- Status barEnterpriseDocked counters and range statistics.
- Side bar & tool panelsEnterpriseDocked Columns and Filters panels.
- Your own side bar panelsEnterpriseAdd a tab of your own beside Columns and Filters — a summary, a legend, the selected row.
Charts
- Chart data hookCommunityShapes the grid’s current result for any chart library.
- Chart panelEnterpriseDocked charts driven by the grid’s own columns.
- Chart API, events & saved chartsEnterpriseOpen, update and read the chart from code, hear it open, change and close, and keep it in the saved view.
- Box plotEnterpriseEach category’s spread of a number column: quartiles, median, whiskers and outliers.
- Waterfall, funnel, treemap, heatmap & rangeEnterpriseRunning totals, process stages, part-of-whole areas, a value matrix and low-to-high spans, from the same panel.
- Scatter & bubble chartsEnterpriseOne point per row over two columns, with a size column for bubbles; large sets are sampled evenly and the panel says so.
- Chart titles, labels & legendEnterpriseTitle, axis titles, legend, values on the marks, text size and colour, label angle, grid lines and line styles.
- Stacked & 100% chartsEnterpriseColumn, bar, line and area series side by side, stacked, or as shares of 100%.
- Cross-filter & zoomEnterpriseClick a bar to filter the grid; wheel to zoom the axis.
- Chart exportEnterpriseSave a chart as PNG, JPEG or SVG at a size you choose, or get it back as a data URL.
Integration
- EventsCommunityFifty-nine events covering cells, rows, columns, editing and lifecycle.
- Imperative APICommunityDrive the grid from your own code via the controller.
- Grid state for AI modelsEnterpriseA JSON Schema of the grid’s filters, sort, grouping and columns for your own model, and a checked apply for its answer.
- Saved viewsCommunityPersist and restore columns, filters, sort, grouping and footer totals; selection, focus and scroll when you ask for them.
- Context menusCommunityHeader, row and cell menus you can extend or replace.
- SSR & bundlersCommunityRenders on the server; works with Vite, Next.js and webpack.
PivotGrid
All 67 PivotGrid features — 52 free
Data & performance
- Web Worker offloadCommunityAggregation, grouping and filtering run off the main thread, so the UI never blocks on a recompute.
- No bundler configurationCommunityThe worker is compiled into the package and started from a Blob URL — nothing to wire up in Vite, Webpack or Next.
- Million-row datasetsCommunityColumnar storage and a trie-based grouper; the playground runs 100 to 1,000,000 rows in the browser.
- Live updatesCommunityAdd, update and remove rows with `applyTransaction`: only the changed rows are encoded and regrouped, and the result matches a rebuild. A fast feed can queue its ticks with `applyTransactionAsync` and apply them together.
- Pre-aggregation filterCommunityA predicate applied to the source rows BEFORE the pivot is computed, set through `layout.prefilter`.
- Visual prefilter builderEnterpriseA multi-condition editor for that predicate, with grouped AND/OR nesting.
Aggregation
- Six summary typesCommunitysum, count, avg, min, max and distinct count, per measure.
- Custom summariesCommunity`calculateCustomSummary` with the classic start → calculate → finalize phases, for rollups the built-ins cannot express.
- Summary display modesCommunityEight post-aggregation transforms: % of total, of row, of column, of the parent row or column, running total, difference and % difference.
- Calculated fields in codeCommunityDeclare a measure from an expression — row-level or summary-level — in your field definitions. The expression engine is in the free core.
- Calculated field designerEnterpriseThe no-code modal that lets end users build, edit and delete those formulas from the footer.
Shaping the pivot
- Row, column, data & filter areasCommunityEvery field declares its area and position; changing them re-pivots.
- Drag-and-drop field panelCommunityEnd users reshape rows, columns, measures and filters by dragging — no code.
- Field chooser & settings dialogCommunityA searchable field list plus a per-field settings dialog for summary type, format and sort.
- Date & number groupingCommunityGroup dates by year, quarter, month, ISO week or day, and numbers into buckets.
- SortingCommunityAscending, descending, or your own comparator through `calculateCustomSort`.
- Sort a dimension by a measureCommunityOrder regions by revenue rather than alphabetically, with `sortBySummaryField`.
- Top-NCommunityKeep only the leading values of a dimension, applied after the sort and per level, with an optional Others row for the remainder.
- Value & label filtersCommunityKeep the members whose total or caption passes a condition — regions selling over a million, cities starting with A — from the field menu, or with `valueFilter` and `labelFilter`.
- Quick searchCommunityA search box that narrows the rows to the members you type, accent-insensitive; totals keep counting every row.
- Too many columns guardCommunityA field with thousands of values dropped into the columns shows the first 1,000 and says so, instead of freezing the page.
- Header filtersCommunityInclude/exclude value pickers on every row and column header, fully keyboard-driven.
- Filters set in codeCommunitySeed the same filters from your field definitions with `filterValues` and `filterType`.
- Expand & collapseCommunityPer-node expansion plus expand-all / collapse-all from the footer.
- Range selectionCommunityDrag across data cells or row headers to select a rectangular range.
- Selection statisticsCommunityCount, sum, average, min and max of the selected range, live in the footer.
- Node context menuCommunityRight-click a header node for bulk expand/collapse of that branch or that whole level.
Layout & totals
- Grand totalsCommunityRow and column grand totals, each switched independently.
- SubtotalsCommunityPer-level subtotals on the row axis.
- Totals positionCommunityTotals above or below the rows they summarise.
- Tree or tabular row headersCommunityNest the row dimensions in one indented column, or give each its own.
- Hide empty rows & columnsCommunityDrop combinations that produced no data instead of rendering blank bands.
- Measure caption placementCommunityPut the measure captions on the column axis or the row axis.
Presentation
- Six built-in themesCommunityLight, dark and high-contrast presets, all driven by CSS variables you can override.
- Zebra stripingCommunityOne prop.
- Conditional formattingCommunityExpression rules, colour scales, in-cell data bars and icon sets; several matching rules merge, later ones winning.
- Cell templatesCommunityRender your own node — a React element, or a string or DOM node in JavaScript — in a data cell instead of the formatted value.
- Number & date formattingCommunityPer-measure `Intl` options or a formatter function.
- Twelve localesCommunityEvery label, menu and number format, translated in the box.
- Right-to-leftCommunityArabic flips the whole layout automatically.
Data in and out
- File importCommunityCSV, TSV, TXT, Excel (.xlsx/.xls/.xlsm/.xlsb), XML and JSON, with locale-aware type inference.
- Paste & drag-drop importCommunityDrop a file on the grid or paste delimited text straight into it.
- Import preview & column mappingCommunityAn optional review step before the rows are applied, with progress and cancellation on large files.
- CSV, JSON, XML, print & clipboard exportCommunitySeven of the ten export formats, including three JSON shapes and a full session snapshot. CSV output is sanitised against formula injection.
- Styled Excel exportEnterpriseThe view as a real workbook — merged header spans, total styling and per-measure number formats — or a flat list.
- PDF exportEnterpriseA print-ready document of the current pivot.
State & reports
- Named saved viewsCommunityEnd users save, load, update, delete and set a default report — fields and layout together.
- State persistenceCommunityRestore the grid across reloads from localStorage, sessionStorage, or your own backend through onSave/onLoad.
- Server-side pivotEnterprisePivot data too large for the browser: your server aggregates, the grid lays the totals out — one level at a time.
- Pivot layout for AI modelsEnterpriseA JSON Schema of the pivot’s fields, measures, filters, sorts and totals for your own model, and a checked apply for its answer.
- Controlled fields & layoutCommunityDrive the grid from your own state and observe every change, instead of letting it own its configuration.
Analytics
- Drill-down dataCommunityClicking a cell resolves the source records behind it and hands them to your handler.
- Drill-down modalEnterpriseA ready-made searchable, exportable detail grid for those records.
- Chart synchronisationCommunityA subscription (a hook in React, `createChartSync` in JavaScript) that re-derives chart data on every reshape, expand or filter. You supply the transformer and the chart.
- Chart transformer & rendererEnterpriseThe transformer that turns an engine result into series, and the chart component that draws them.
- Cross-filter from the chartEnterpriseClick a bar, slice or cell to filter the pivot to that category; click again to clear.
- Chart state, events & saved reportsEnterpriseRead and restore the chart from code, hear it change, and keep it — hidden series included — in saved reports.
- Waterfall, funnel, treemap, heatmap, range, sunburst & histogramEnterpriseRunning totals, process stages, part-of-whole areas, the pivot itself as a heatmap, low-to-high spans, the row hierarchy as rings, and how many members fall in each band of a measure.
- Scatter & bubble chartsEnterpriseOne point per category at (measure 1, measure 2), a bubble sized by measure 3.
- Chart titles, labels & legendEnterpriseTitle, axis titles, legend position and data labels; values print with the measure’s own format.
- Row sparklinesEnterpriseEach row’s trend across the columns, drawn small in its grand-total cell beside the total — as a line or bars.
- Stacked & 100% chartsEnterpriseColumn, bar, line and area series side by side, stacked, or as shares of 100% with a percent axis.
Platform
- Headless controllerCommunityBuild your own shell around the controller (`usePivotController` in React, `grid.controller` in JavaScript) and the body/footer components; the grid is not the only entry point.
- Keyboard navigationCommunityMove, select and open menus without the mouse; the filter popup is fully keyboard-driven.
- FullscreenCommunityExpand the grid to fill the viewport from the footer.
- Toolbar configurationCommunityShow or hide each footer control individually.
- Plugin registryCommunityRegister your own export format or expression resolver; a custom exporter takes precedence over the built-in one, paid ids included.