Changelog
Release notes and version history.
v1.2.0
PivotGridThree configuration props that did nothing now work, and Enterprise export is properly gated.
- @kanunilabs/pivotgrid-core@1.2.0
- @kanunilabs/pivotgrid-react@1.1.0
- @kanunilabs/pivotgrid-react-enterprise@1.1.1
- `stateStoring` accepted four members and read none of them. `enabled: false` still wrote to localStorage, `type: 'sessionStorage'` still wrote to localStorage, and the `type: 'custom'` pair of `onSave`/`onLoad` — documented as the way to persist to your own backend — was a hook nothing ever called. Only `storageKey` was read, and only as a grid-id fallback. All four work now. Passing no `stateStoring` at all keeps the previous behaviour, so an upgrade does not lose anyone’s saved layout.
- The `toolbar` prop was declared and never destructured, so every switch inside it was inert and the footer always rendered its default set. It is honoured now.
- `onError` never reached the grid. It was pulled out of the props for the error boundary and not passed on, which also meant `PivotControllerOptions.onError` had never fired in React at all.
- The three paid export formats — `excel-list`, `excel-pivot` and `pdf` — now refuse on a Community grid instead of quietly doing nothing. The exporter registers itself into a module-level slot when the Enterprise package is imported, and that slot cannot tell which grid is asking, so one Enterprise import anywhere in a bundle used to enable styled export for every grid in it. The controller can tell, so the check lives there. It is an EDITION gate, not a licence gate: an unlicensed Enterprise build still exports, watermarked.
- The refusal is a rejected promise carrying the format and the package that provides it, raised before the `exporting` event and routed to your `onError`. Previously it was a console warning and a resolved promise fired AFTER that event — so a spinner started on it span forever with a clean console. If your application registers its own exporter under one of those format ids, yours still wins.
- `PivotGridRef.exportData` returns a promise rather than `void`, so a refusal can be awaited and caught. Existing callers ignore the return value and are unaffected.
- Four guides for the paid features, which previously shared one sentence saying they “light up automatically”: calculated fields, the prefilter and node menu, drill-down and charts, and styled export. Each documents the configuration, the API, and where the feature stops.
- `enterpriseEdition` on `PivotControllerOptions`, for applications that build their own shell out of `usePivotController` and the body/footer components rather than using `EnterprisePivotGrid`.
v1.2.0
DataGridSix config options that were accepted and did nothing now work.
- @kanunilabs/datagrid@1.2.0
- @kanunilabs/datagrid-enterprise@1.2.0
- @kanunilabs/datagrid-core@1.2.0
- @kanunilabs/datagrid-react@1.1.1
- @kanunilabs/datagrid-react-enterprise@1.1.1
- The JavaScript renderer accepted six configuration members and silently did nothing with them. `tooltip: { enabled: false }` did not turn tooltips off — the one spelling anyone writes to disable a feature. `cellMenu` took only a boolean, so the object form was dropped. `cellClassName`, `headerTooltip` and `renderOverlay` were read and discarded, and `autoColumns` ignored its object form as well as `false`. Every one of them is the worst kind of bug to find: the code looks right, the grid renders, and nothing tells you the line you wrote is inert. They all work now, and the warning table that was supposed to catch this had a hint that pointed the wrong way — that is fixed too.
- A sparkline told screen readers the wrong number. The default label read out an internal drawing coordinate rather than the value: a series closing at 31 was announced as "ending at 4", and the number went DOWN as the line went up. It now reads the last plotted value. Pass `ariaLabel` if you want to say something better.
- Per-instance label overrides for the edit form and the chart panel (`editing.formLabels`, `charting.labels`) were accepted and ignored. They now merge into that grid’s dictionary only — two grids on one page keep their own wording.
- Three types that the API reference linked to but the package did not export: `CellMenuOptions`, `RowTemplateContext` and `ExportKind`. TypeScript users could see them in the docs and not import them.
- `SparklineGeometry` now carries `lastValue` — the last plotted reading in data units, next to the existing `last` coordinate. If you draw your own sparkline from the geometry, this is the number to put in the label.
v1.1.0
PivotGridAn English grid no longer shows a Turkish spinner.
- @kanunilabs/pivotgrid-core@1.1.0
- @kanunilabs/pivotgrid-react-enterprise@1.1.0
- @kanunilabs/pivotgrid-react@1.0.7
- @kanunilabs/licensing@1.1.1
- Twelve locales shipped, but any key missing from a translation fell through to TURKISH, because Turkish was the merge floor rather than English. The loading text existed only in the Turkish file, so an English grid displayed “Yükleniyor…”. English is the floor now, and roughly 370 previously-untranslated strings were filled in across the ten non-English, non-Turkish locales.
- Eight footer button tooltips were hardcoded English regardless of locale. They go through the dictionary like everything else.
- The five Enterprise components export their props types (`CalculatedFieldModalProps`, `ChartFactoryProps`, `PivotDrillDownModalProps`, `PivotNodeContextMenuProps`, `PivotPrefilterBuilderProps`). Without them the API reference showed a type name you could read and not import, and the components could not be wrapped in typed application code.
- Every published package now has an API reference, the paid ones included — 507 pages across five surfaces per product, generated from the TypeScript source, plus full-text search across all of it.
- PivotGrid Enterprise had been pinned to older Community packages since 1.0.5, so installing both products could give you two copies of the licensing module — and a licence key set through one product was invisible to the other. Everything is republished together on matching versions; one key covers both, as documented.
v1.1.1
DataGridColumn resizing works again in the JavaScript renderer.
- Dragging a column edge in the JavaScript renderer moved it by one pixel and then stopped, which looked like resizing was simply dead. The first width change repaints the header, and that rebuilds the grip the drag started on — a captured element removed from the document loses its pointer capture, so the browser stopped delivering the move events. The drag now listens on the window and survives the repaint. React was never affected: it reconciles the header and keeps the same node.
- The standalone JavaScript demo page is gone; `/playground/datagrid/javascript` now lands on the gallery with the JavaScript renderer selected. Every demo there already had the React — JavaScript switch, so the separate page was the same claim made once instead of 82 times — and it had drifted, missing the row-count picker the gallery demos have.
v1.1.0
DataGridFooter totals are free, and a column can bring its own editor.
- Footer column totals now work in Community, along with totals-row placement and custom reducers. They were stripped from the config before — while the footer MENU was never gated, so anyone could click a footer cell and pick Sum and get the very total the config had been refused. One capability cannot have two doors with opposite answers; the free side won, because taking the menu away would have removed something people already use. Per-group totals stay Enterprise, since they ride with multi-level grouping.
- A column can replace its cell editor outright in the JavaScript renderer too: `renderEditor` returns a DOM node, with the same `commit()` / `cancel()` handles the built-in editor uses, so undo/redo, batch mode and validation behave identically. It differs from React in one way, by necessity: React re-invokes the renderer on every validation change, which would destroy a DOM node’s caret and any open dropdown — so the editor is built once and subscribes through `onErrorChange`.
- The React packages catch up with everything since 1.0.2: band borders that were invisible against the header, group-panel chip reordering that was off by one, clipboard copy that wrote the stored code instead of the label you could see, and a chart panel that walked itself off screen in fullscreen.
v1.0.0
DataGridDataGrid without React — the JavaScript renderer ships.
- @kanunilabs/datagrid on public npm: the same grid built straight into the DOM. One `createGrid(element, config)` call, no component tree, no JSX, no build step required.
- @kanunilabs/datagrid-enterprise from the private registry, with the editing, range work, charts, master-detail, tree data and styled export the React Enterprise package has. The same licence key covers it — nothing to buy again.
- A UMD build in both packages, so a `<script>` tag is a complete install: `KanuniLabsDataGrid.createGrid(...)` with the engine bundled in, no import map and no bundler configuration.
- The config mirrors the React props by name, so a component reads across nearly unchanged. Where a name genuinely differs (`groupPanel` → `grouping: { panel: true }`), the grid says so in the console with the correct spelling instead of ignoring it.
- Every demo in the playground now has a React ⇄ JavaScript switch: the live grid AND the copyable code sample both follow it, so the JavaScript renderer can be evaluated feature by feature rather than on one showcase page.
- @kanunilabs/datagrid-core moves to 1.1.0. It gained the helpers both renderers now share — cell display text, anchored-layer placement, sparkline geometry, summary labels and theme presets — so the JavaScript and React renderers resolve one engine rather than each carrying a copy.
v1.0.6
PivotGridnpm page and metadata polish — no code changes.
- The npm page opens with an animated demo of the component instead of a static screenshot.
- Package metadata now links the public issue tracker at github.com/kanunilabsdev/support — bugs and feature requests no longer require an account on our site.
v1.0.2
DataGridnpm page and metadata polish — no code changes.
- The npm page opens with an animated demo of the component instead of a static screenshot.
- Package metadata now links the public issue tracker at github.com/kanunilabsdev/support — bugs and feature requests no longer require an account on our site.
v1.0.5
PivotGridThe Web Worker setup step is gone.
- Zero-configuration Web Workers: all three workers (aggregation, export, import) are now compiled into the package and started from a Blob URL. There is no file to copy into `public/`, no bundler recipe and nothing to import — Vite, webpack, Next.js and Parcel work as they are. This is the same change DataGrid shipped in 1.0.0.
- Existing setups keep working: an explicit `workerUrl` still wins, so a CDN-hosted or self-served worker is unaffected. Under a Content-Security-Policy that forbids `blob:` workers, the grid falls back to loading the worker file from the package instead of failing.
- `@kanunilabs/pivotgrid-core` grew by 30 KB (173 KB → 203 KB) as the price of embedding three workers.
v1.0.1
DataGridSame-day patch for Node consumers.
- Importing @kanunilabs/datagrid-core in Node (SSR builds, scripts, test runners) kept the process alive after it finished. A module-scope MessageChannel used for cooperative yielding was unref’d before its message handler was attached — and attaching the handler re-refs the port. The order is now correct, so processes exit normally. Browser behaviour is unchanged.
v1.0.0
DataGridDataGrid is here — the second component, covered by the same licence.
- @kanunilabs/datagrid-core and @kanunilabs/datagrid-react on public npm; @kanunilabs/datagrid-react-enterprise ships from the private registry, like PivotGrid’s.
- One licence key opens both components — an existing PivotGrid key already carries the DataGrid entitlement, with nothing to buy again.
- Community: virtual scrolling to a million rows, Web Worker offload, filter row + header filter popup, grouping with summaries, pinning, selection and keyboard navigation, CSV export, saved views.
- Enterprise: cell and row editing with validation and undo/redo, range selection and fill handle, multi-level grouping, master-detail, tree data, charts, styled Excel/PDF export, import wizard, side bar tool panels, status bar, filter builder.
- Zero-configuration Web Worker: the worker is embedded in the package, so no `workerUrl` and no file copying — the setup step PivotGrid needed is gone.
- Six themes plus a compact density mode, and a chart palette that follows the theme.
v1.0.4
PivotGridKeyboard-first header filters.
- Filter popup: pressing Backspace while a list item has focus jumps back to the search box and deletes the last character — search, navigate (↑/↓), toggle (Space) and apply (Enter) now work entirely from the keyboard.
v1.0.3
npm packaging & documentation polish (covers 1.0.1–1.0.3).
- npm package pages overhauled: product screenshot, feature tour, expanded keywords and contact metadata.
- New bundler guides: Vite worker setup via the `?url` asset import (no manual copying) alongside the Next.js guide.
- Clarified the localhost licensing note: without a key the grid runs watermarked everywhere; localhost only relaxes the domain binding of a valid key.
- API reference README/index URLs now redirect to the API overview instead of returning 404.
v1.0.0
General availability — first stable release on npm.
- @kanunilabs/pivotgrid-core and @kanunilabs/pivotgrid-react published on public npm; the enterprise package ships from the private registry with per-customer credentials.
v1.0.0-beta.1
First public beta of the React packages.
- PivotGrid core engine: Web Worker compute, columnar storage, trie-based grouping.
- React components: BasePivotGrid, field panel, drag & drop, header filters, theming.
- Enterprise: calculated fields, prefilter builder, drill-down, chart integration.
- 12 locales with full RTL support.
- Excel & PDF export (streamed off the main thread).
- Offline license verification with online revocation and a customer dashboard.
v0.9.0
Engine hardening and framework-agnostic core split.
- Split the engine into a framework-agnostic core consumed by the React layer.
- Reworked the aggregation pipeline for large datasets (50k+ rows stay responsive).
- Next.js Web Worker resolution via the new `workerUrl` prop.
- Chart panel layout and stable chart sync (no more re-render loops).