2026-04-18 · Vanilla JS / TypeScript · Pillar guide

Vanilla TypeScript Data Grid: simple-table-core Without a Framework

Best for Vanilla TS100% Free, MITFramework AgnosticWeb Components Ready

Use SimpleTableVanilla from simple-table-core for framework-free UIs: npm package, CSS import, minimal bootstrap, and when to reach for adapters instead.

The vanilla JavaScript / TypeScript data grid landscape in 2026

Not every project lives inside a React, Vue, Angular, Svelte, or Solid tree. Plenty of teams ship admin tools, embedded dashboards, internal microsites, and side-rendered widgets in plain HTML/TypeScript or as web components. The free vanilla data grid options today are familiar—Tabulator, Grid.js, jSpreadsheet, Handsontable Community—and each makes its own trade-off between bundle size, license, and feature surface.

simple-table-core is the headless engine behind every Simple Table framework adapter. It also ships a vanilla constructor (SimpleTableVanilla) you can drop into any HTML page or web component. Full sorting, filtering, virtualization, column pinning, row grouping, nested headers, and inline editing—free under MIT for individuals and zero-revenue companies, with simple per-product pricing for revenue-generating teams.

This pillar guide covers when simple-table-core is the right vanilla data grid, how it compares with Tabulator, jSpreadsheet, Grid.js, and Handsontable, and exactly how to wire it up in a vanilla TypeScript project or a web component.

What You'll Learn
  • How simple-table-core compares with Tabulator, jSpreadsheet, Grid.js, and Handsontable Community
  • Bundle size, performance, and licensing trade-offs for vanilla JS/TS data grids
  • Step-by-step install for a vanilla TypeScript / Vite app
  • When to pick simple-table-core over an embeddable spreadsheet vs another DOM grid

Why vanilla TypeScript teams pick simple-table-core

simple-table-core is the engine—not a wrapper. Drop it into vanilla HTML, a web component, or a custom framework, and you get the full grid feature set without React, Vue, or Angular in your bundle.

Framework agnostic by design

No React. No Vue. No Angular. simple-table-core is plain TypeScript that mounts to any HTMLElement. Wire it into vanilla apps, web components, micro-frontends, or custom frameworks.

Same engine that powers six adapters

If you ever ship a React, Vue, Angular, Svelte, or Solid version of the same UI later, the data, headers, and behaviors carry over—no rewrite, no second mental model.

Imperative API

Use the TableAPI to set sort columns, filters, pagination, selection, and export imperatively. Subscribe to events, push row updates, or replay state—your code, your control flow.

MIT for free, simple licensing for revenue

Free for individuals and zero-revenue projects under MIT. Per-product Pro/Enterprise licensing for revenue-generating teams—no per-developer fees and no per-row pricing.

How simple-table-core stacks up against vanilla incumbents

Below is how simple-table-core compares with the vanilla JS data grid libraries most teams evaluate. Feature support reflects what's available out-of-the-box at install time.

FeatureSimple TableTabulatorGrid.jsjSpreadsheet (CE)Handsontable (CE)
Built-in UI (no styling required)
Row + column virtualizationPartial
Inline cell editing
Column pinning
Row grouping + aggregationPartialPartial
Framework-agnostic (no jQuery/legacy deps)Partial
TypeScript-first typesPartialPartialPartial
LicenseMIT / ProMITMITMIT (Pro paid)Non-commercial CE
The Bottom Line

simple-table-core sits in a sweet spot: full grid features and TypeScript-first types under MIT, without the spreadsheet-style baggage of jSpreadsheet/Handsontable or the basic-table feel of Grid.js. Tabulator is the closest comparable—simple-table-core wins on TypeScript ergonomics and a cross-framework story (same engine in React/Vue/Angular/Svelte/Solid).

Performance built for embedded dashboards and web components

Internal benchmarks rendering 100,000 rows and 30 columns in a vanilla TypeScript / Vite app on a mid-range laptop:

~140ms
simple-table-core (vanilla)
Initial render
~350ms
Tabulator
Initial render
~2.4s
Grid.js
Without virtualization
Performance highlights
  • Row + column virtualization out-of-the-box—no plugins, no v-scroll setup
  • 60fps scrolling with 1M+ rows, including grouped and pinned configurations
  • Memory profile stays flat as the dataset grows (only visible rows mounted)
  • Tree-shakable: import only what you use; styles ship as a single CSS file

Get up and running in vanilla TypeScript

Install the package, import the stylesheet from your entry (or via <link rel="stylesheet">), and instantiate SimpleTableVanilla against an HTMLElement. Works in any bundler (Vite, esbuild, Webpack, Rollup) and inside a web component.

Install:

npm install simple-table-core

Follow the Quick Start guide or open the StackBlitz sandbox below for a full, runnable Vanilla JS / TypeScript example.

When simple-table-core is the right vanilla grid

Pick simple-table-core if any of these apply:

  • You're shipping a vanilla TypeScript app or a web component
  • You need row + column virtualization, pinning, grouping, or inline editing
  • You want strict TypeScript types out-of-the-box
  • You may later wrap the same engine in React/Vue/Angular/Svelte/Solid
  • You want MIT-clean licensing for individuals and zero-revenue projects

Pick something else if:

  • You need true spreadsheet semantics (formulas, named ranges)—jSpreadsheet is a better fit.
  • You're rendering <100 read-only rows—Grid.js or a plain <table> is enough.

Frequently asked questions

Can I use simple-table-core inside a web component?

Yes. SimpleTableVanilla mounts to any HTMLElement. Pass a slotted host or shadow-root container and the grid renders inside it. Styles import works either as a side-effect or via a <link> in the shadow root.

How does it compare with Tabulator?

Tabulator is the closest comparable—both ship full UIs, virtualization, editing, and grouping. simple-table-core wins on TypeScript ergonomics (TS-first types and APIs) and the cross-framework story (same engine across React/Vue/Angular/Svelte/Solid).

How does it compare with Handsontable?

Handsontable Community is licensed for non-commercial use only; Handsontable Pro is paid. simple-table-core is MIT for individuals and zero-revenue projects, with simple per-product pricing for revenue-generating teams.

How does it compare with jSpreadsheet?

jSpreadsheet leans into spreadsheet-style editing (formulas, copy/paste from Excel). simple-table-core is a data grid first; if you need true spreadsheet semantics (formulas, named ranges), jSpreadsheet may be a better fit.

How does it compare with Grid.js?

Grid.js is small and friendly for read-only tables, but doesn't ship virtualization, editing, pinning, or grouping. If your dataset is small and you need a basic table, Grid.js is great. For anything beyond that, simple-table-core is a stronger fit.

The verdict for vanilla TypeScript teams

If you're building a vanilla TypeScript app, an embeddable widget, a web component, or a custom-framework UI that needs more than a basic table—simple-table-core is the strongest free choice in the vanilla JS/TS data grid space in 2026. It ships the same feature surface as Tabulator with stronger TypeScript ergonomics, and unlike Handsontable Community, the MIT terms are unambiguous for individuals and zero-revenue projects.

Better still, simple-table-core is the engine behind every framework adapter Simple Table publishes. If you later ship a React, Vue, Angular, Svelte, or Solid version of the same UI, the data, headers, and behavior carry over—no rewrite, no second mental model.

Continue building with Vanilla JS / TypeScript

Simple Table pairs a shared core (simple-table-core) with official adapters for React, Vue, Angular, Svelte, Solid, and vanilla TypeScript.

Ready to ship the vanilla TypeScript data grid users love?

Install simple-table-core, mount SimpleTableVanilla against any HTMLElement, and ship sorting, filtering, virtualization, pinning, grouping, and editing in your next vanilla release.