Browser & runtime support

The shipping target matrix. If your environment isn't listed, assume unsupported until you've validated the linked feature surfaces below.

Browsers

Browser Version Status Notes
Chrome / Chromium 100+ Supported Primary development target. Tested every release.
Edge 100+ Supported Same Chromium base as Chrome.
Firefox 100+ Supported Tested every release. The custom scrollbar paints natively.
Safari (macOS) 15.4+ Supported Pointer Events shim landed in 15.4 - older Safari hits edge cases.
Safari (iOS) 15.4+ Supported Touch UX known limitations - see "Mobile" below.
Opera 86+ Supported Chromium-based.
IE 11 n/a Unsupported Not feasible: Svelte 5 itself requires modern JS.
Old WebViews varies Best-effort Anything with ResizeObserver + ES2020 syntax should work.

The lower bound is the oldest version with native ResizeObserver, IntersectionObserver, Pointer Events, and Object.hasOwn. SvGrid uses these directly; we don't polyfill in the package.

JavaScript baseline

SvGrid is built and shipped as ESM only with ES2020 syntax. The published bundle assumes:

If you need to ship to a baseline lower than ES2020, transpile sv-grid-community in your own build (Vite, Rollup, esbuild). The package source contains no syntax above ES2022.

DOM APIs

The grid uses these browser APIs directly:

API Where Polyfillable?
ResizeObserver Auto-resizing the grid container + column widths Yes (resize-observer-polyfill)
IntersectionObserver Virtualization viewport check Yes
Pointer Events (pointerdown/-up) Selection, fill handle, column resize Yes
Element.scrollTo({ behavior }) Programmatic row scroll, smooth-scroll API Yes
URL.createObjectURL Export (xlsx, pdf, csv, tsv, html) Required
Blob, File Export + import Required
document.execCommand('copy') or Clipboard API Copy/paste cell selection (graceful fallback) Either

If you're shipping to a sandboxed environment where some of these are locked down, see the CSP guidance section on the security page.

Node / SSR

SvGrid is SSR-compatible. The render component does nothing on the server beyond emitting the wrapper markup with an aria-busy shell - the data + interactions hydrate on the client. Demo 19. Server-side rendering shows a sandboxed pre-hydration snapshot.

Tested SSR runtimes

Runtime Version Status
Node.js 18 LTS+ Supported
Bun 1.0+ Supported
Deno 1.40+ Supported
SvelteKit 2.x Supported
Astro 4.x+ Supported
Cloudflare Workers (with SvelteKit adapter) latest Supported (no FS access from the grid)

What the grid does NOT do on the server

If you see a "lifecycle_function_unavailable" error from Svelte during SSR, that's coming from a custom cell snippet of yours - not from the grid. Guard document / window reads inside an onMount or $effect.

Build tools

Tool Version Status
Vite 5+ Recommended. Tested with vite 5, 6, and 7.
Rollup 4+ Supported. SvGrid is published as ESM and is tree-shakeable.
esbuild 0.20+ Supported.
Webpack 5+ Supported with experiments.outputModule or a CJS-compatible Svelte loader.
Turbopack n/a Untested. Should work given ESM compatibility.

Tree-shaking works at the named-export granularity - import { SvGrid, tableFeatures } from 'sv-grid-community' pulls in only the surfaces you reference. Each feature module (sorting, filtering, etc.) is its own export.

Mobile

Mobile browsers render the grid correctly but the UX makes the following compromises:

For a mobile-first workflow, prefer a card list view at smaller viewports and switch to the grid above an md breakpoint.

See also