Grid.js is a small, easy-to-use vanilla JS table library. It does sorting, pagination, search, and basic styling out of the box and pairs well with content-heavy pages.
simple-table-core covers a different scope: virtualization for hundreds of thousands of rows, column pinning, row grouping with aggregations, inline cell editing, all in TypeScript-first packaging.
This article walks through when Grid.js is enough and when you've outgrown it.
Quick comparison
| Feature | Grid.js | Simple Table for Vanilla JS / TypeScript |
|---|---|---|
| License | MIT | MIT |
| Type of component | Read-first table | Full data grid |
| TypeScript-first | Definitions exist | Yes (strict) |
| Bundle size (gzipped) | ~25 kB | ~50 kB |
| Built-in row virtualization | No | Yes (1M rows) |
| Column pinning | No | Yes |
| Row grouping + aggregations | No | Built-in |
| Inline cell editing | Limited (read-first) | Built-in |
| Sorting / filtering / pagination | Built-in | Built-in |
Stick with Grid.js when…
- You're rendering 100–500 rows and don't need virtualization.
- Reads dominate; writes / inline edits aren't part of the UX.
- You want a tiny dependency for content-style tables.
- Sorting + pagination + search is enough.
Switch to simple-table-core when…
- You need virtualization for 10k+ rows.
- You need column pinning, row grouping with aggregations, or inline editing.
- You want TypeScript-first ergonomics with strict types.
- You may add React / Vue / Angular / Svelte / Solid surfaces later.
Real-world scenarios
Marketing site comparison table
10–50 rows, content-driven, occasional sort.
Stick with Grid.js—it's the right tool.
Internal dashboard with 100k rows
Virtualization, pinned columns, sort + filter.
Switch to simple-table-core—data grid territory.
Reporting view with grouping + aggregations
Group by region with sum and avg footers.
Switch to simple-table-core—aggregations are first-class.
Frequently asked questions
- Is Grid.js bad?
- Not at all—it's a fine read-first table for content pages. It's the wrong tool for a data grid with virtualization, grouping, or inline editing.
- How big is the migration?
- Hours per table. Map columns to HeaderObjects; replace formatters with cellRenderers; convert search/sort/paginate options to Simple Table's pagination + sorting + filtering options.
- Does simple-table-core have search?
- Yes. Column filters are first-class; combine across columns for global-search-like behavior.
The verdict
Grid.js and simple-table-core aren't really competitors—they cover different scopes. Grid.js for read-first content tables; simple-table-core for data grids.
If you've outgrown Grid.js, simple-table-core is the natural next step—same vanilla JS spirit, full data grid feature set.