Documentation

Enterprise & licensing

The Community package is a complete, fast grid: a million rows, sorting, filtering, selection, pagination, themes, twelve languages and CSV export.

@kanunilabs/datagrid-react-enterprise starts where you change the data and where you take it out: the four editing modes, range selection and the fill handle, server-side data, Excel and PDF export, the chart panel, the nested filter builder, and the docked side and status bars.

EnterpriseDataGrid is a drop-in replacement for DataGrid — same props, plus these.

One key opens both products. A KanuniLabs license unlocks the Enterprise edition of DataGrid and PivotGrid. If you already bought for one, you do not buy again for the other.

1. Install from the private registry

The Enterprise package is not on public npm. It comes from our private registry with credentials issued per license — you receive a ready-to-paste .npmrc by email, and can always fetch it again from your dashboard.

@kanunilabs:registry=https://registry.kanunilabs.com/
//registry.kanunilabs.com/:_auth=<value from your email or dashboard>
//registry.kanunilabs.com/:always-auth=true
npm i @kanunilabs/datagrid-react-enterprise

Without React, the same features ship as @kanunilabs/datagrid-enterprise — one createEnterpriseGrid() call, same licence key, same licence terms. The JavaScript guide shows it in use.

npm i @kanunilabs/datagrid-enterprise

CI usage, keeping the token out of git and rotating a leaked password are all covered in the Private registry access guide.

2. Set the license key

Set it once, at startup, before the first grid renders:

import {
  EnterpriseDataGrid,
  LicenseManager,
} from '@kanunilabs/datagrid-react-enterprise';

LicenseManager.setLicenseKey('KLAB1....');

export function OrdersGrid({ rows }) {
  return (
    <EnterpriseDataGrid
      dataSource={rows}
      rowKey="id"
      columns={[
        { field: 'id', headerName: 'ID', dataType: 'number' },
        { field: 'customer', headerName: 'Customer' },
        { field: 'total', headerName: 'Total', dataType: 'number' },
      ]}
      editing={{ mode: 'cell' }}
    />
  );
}

Both stylesheets are needed — the Enterprise one only adds what it introduces:

import '@kanunilabs/datagrid-react/styles.css';
import '@kanunilabs/datagrid-react-enterprise/styles.css';

Without a valid key

The grid keeps working. It is watermarked, not crippled: a badge appears and says what is wrong, in the grid's language — "Unlicensed", "License expired", "License not valid for this domain", "Browser cannot verify the license (HTTPS required)" and so on. A key that was given but did not pass also logs one console notice, in DataGrid's name; with no key at all, the badge is the only notice. This is deliberate — an evaluation, a staging box with a stale key or an expired card should never take your application down.

To act on the reason in your own code, read reasonCode from the licence state (see Reading the reason below).

When a subscription ends

A paid key covers every version released up to the end of the period you paid for, with no time limit. The grid compares its own release date with the key, never today's date, so an application you shipped keeps running without a watermark after the subscription ends. A version released later is not covered; while you are subscribed, each renewal moves the date forward, so take the current key from your dashboard when you upgrade.

Keys are verified offline. The signature is checked inside the grid, against a public key compiled into the package — there is no licence server to reach, so the check works when our site is down and on a network with no internet at all.

On localhost the key is still required — what local development skips is the domain check, so one key works from localhost, 127.0.0.1 and *.local without listing them as domains. The signature is verified everywhere; a grid with no key is watermarked on your machine exactly as it would be in production, which is deliberate: you should see what your users would.

Plain HTTP and intranets

A page served over plain http:// from an intranet host (http://erp.corp/, http://10.0.0.5:8080/) is supported. Browsers only offer their built-in cryptography (crypto.subtle) on HTTPS and localhost; everywhere else the grid verifies the key with a JavaScript implementation of the same algorithm, bundled with the grid and loaded only on such pages. The verdict is the same either way, and the check is just as strict — a key is valid only after its signature is verified, on HTTP too. Only the cost differs: an HTTP page loads that verifier (about 15 KB gzipped) once, on first use — the script-tag builds carry it inside — and the badge does not appear while the check runs.

Reading the reason

The licence state carries a reasonCode next to status, so your code does not have to parse the English reason text:

import { useLicenseGuard } from '@kanunilabs/datagrid-react-enterprise';

function LicenceBanner() {
  const license = useLicenseGuard();
  if (license.reasonCode === 'engine-unavailable') {
    return <p>This browser cannot check the licence. Open the app over HTTPS.</p>;
  }
  return null;
}
reasonCodestatusMeaning
validvalidVerified, in date, this domain
gracevalidPast its date, inside the grace period — still licensed
checkingcheckingVerification has not finished yet
missingmissingNo key, or a key that does not cover this product
invalid-formatinvalid-formatNot a KanuniLabs key — truncated, mistyped or not KLAB1.
invalid-signatureinvalid-signatureThe key was altered, or not issued by KanuniLabs
engine-unavailableinvalid-signatureThis browser could not run any verifier (no crypto.subtle, and the bundled one could not load)
expiredexpiredA subscription key past its date and grace period
release-not-coveredexpiredA paid key, but this version was released after its cover ended
domain-mismatchdomain-mismatchIssued for other domains
revokedrevokedThe key was reported revoked

useLicenseGuard and getLicenseState describe the key, shared by every grid on the page. Two verdicts are made per product, inside the grid, and show on its badge rather than in that shared state: release-not-covered (this build is newer than the key's cover) and missing for a key that does not include DataGrid. For those the shared state still reads valid.

reasonCode is optional in the type, so code written against the older status values keeps compiling; status itself has not changed.

What Enterprise unlocks

Each entry links to the guide that shows it working. Everything not in this list is in Community and needs no license.

Data & performance

  • Server-side dataFiltering, sorting, paging, distinct values and totals run on your server.

Columns

Filtering

Grouping & hierarchy

Totals

Selection & keyboard

Editing

Export & import

  • Excel exportReal .xlsx, with the grid’s formatting carried over.
  • PDF exportPaginated, with repeated headers; streams for large results.
  • Styled exportNumber formats, banded rows, outline levels, totals.
  • Import wizardFile → column mapping → commit.

Presentation

Charts

What happens if you use one without the license

The boundary is enforced in two places, and both explain themselves rather than failing silently:

  • Configuration (grouping depth, group summaries, master-detail, tree data, cell span, notes) is dropped, and the reason is logged when you render with debugMode.
  • Calls (exportToExcel, exportToPdf) throw an error naming the feature.
  • A server-side DataSource throws immediately, because silently dropping it would leave a grid with no data and send you looking in your backend.

Community keeps single-level grouping, footer column totals and CSV export, so a Community grid is never a demo — it is a grid.

What it costs

One key covers both components — DataGrid and PivotGrid — so the list above and PivotGrid's own Enterprise surface come together, not as two purchases.

See Pricing for the tiers, or Private registry access for how the packages are delivered once you have a licence.