Documentation

Supported browsers

The PivotGrid targets the current versions of the evergreen browsers: Chrome, Edge, Firefox and Safari. Internet Explorer and the original, pre-Chromium Edge are not supported: the packages are compiled to modern JavaScript (ES2022 and later) and ship no polyfills.

This applies to every PivotGrid package: React and plain JavaScript, Community and Enterprise, the npm builds and the <script> tag builds.

Oldest browser versions

BrowserOldest versionSet by
Chrome, Edge112CSS nesting in the stylesheet
Firefox117CSS nesting in the stylesheet
Safari (macOS and iOS)16.5CSS nesting in the stylesheet

Part of the stylesheet is compiled with Tailwind CSS, whose output nests some hover and focus styles inside their rules. Without nesting those styles are dropped; the next limits down are the engine's module worker (Firefox 114) and color-mix() (Chrome and Edge 111, Firefox 113, Safari 16.2).

Import from Clipboard reads the clipboard with navigator.clipboard.readText(), which Firefox has from version 125.

These numbers come from the code, not from a test run on those versions. Each one is the first release of that browser that supports every feature the shipped packages use, according to MDN's browser compatibility data. An older release is missing at least one of them.

What the grid needs from the browser

Required:

FeatureWhat it is for
Modern JavaScript (ES2022 and later)Everything. Without it the script does not load.
Web Worker (module type)The pivot engine. Aggregation always runs in a worker; there is no main-thread fallback, so without a worker the grid cannot compute. Import and export use workers too.
color-mix() in CSSTints: selected and focused cells, total and subtotal rows, field chips and drop zones. Without it those tints are not drawn.
CSS nestingSome hover and focus styles. Without it those styles are dropped.
ResizeObserverMeasuring the grid, and keeping the row and column headers aligned with the body as it resizes.
IntlNumber and date formatting, and locale-aware sorting.

Used when available:

FeatureWhat it is forWhen it is missing
Blob URLsStarting the workers from code embedded in the package, so there is no file to copy.The grid loads the worker file that ships next to the package instead; see Content-Security-Policy.
Clipboard API (navigator.clipboard)Copying selected cells (Ctrl+C or Cmd+C), Copy to Clipboard in the export menu, and Import from Clipboard.Browsers offer it only on secure pages (HTTPS or localhost). On a plain-HTTP page, copying a selection does nothing and the import reports that the clipboard could not be read. The export falls back to the browser's older copy command.
localStorage / sessionStorageRemembering the user's layout between visits.Where storage is unavailable, such as some private browsing modes, the layout is not remembered.
crypto.subtle (Enterprise)Verifying the licence key.Browsers offer it only on secure pages. Elsewhere a bundled JavaScript verifier checks the same signature; see Enterprise & licensing.

Content-Security-Policy

  • The shipped JavaScript has no eval and no new Function — calculated fields included — so a script-src without 'unsafe-eval' works.
  • The workers start from a blob: URL. Allow it with worker-src 'self' blob:. If the policy refuses it, the grid tries the worker file next to the package; where that fails too, pass workerUrl. Installation shows how.
  • The licence check is the shared @kanunilabs/licensing package. Its real-browser test, described below, runs under this policy:
default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline';
img-src 'self' data:; connect-src 'self'; worker-src 'self' blob:

That policy allows inline styles. A policy without 'unsafe-inline' in style-src has not been tested.

What is tested

Unit tests run in Node in continuous integration, on every push and pull request to the main branch. Tests that need a DOM use jsdom, a simulated DOM. jsdom does no layout and no painting, so these tests prove behaviour, not how a particular browser draws the grid.

In a real browser: licence verification. A script drives an installed Google Chrome against the built packages, on a plain-HTTP page (no crypto.subtle, so the bundled JavaScript verifier runs) and on a secure page (WebCrypto), through the npm (ESM) build and the <script> tag (UMD) build, under the policy above. It loads the licence check through the DataGrid Enterprise packages; PivotGrid Enterprise uses the same @kanunilabs/licensing package. This test runs outside continuous integration.

Firefox and Safari are not part of an automated run. If the grid misbehaves in a browser at or above the versions listed here, tell us the browser, its version and what you saw.