Grid logic that stays out of your way.
GridKit separates grid logic from rendering. Column resolution, resizing, reordering, and selection live in framework-agnostic TypeScript — React binds it to real components today, with more framework adapters planned — so you're never fighting a component to get the behavior your data needs.
Everything the grid does today
Six real capabilities, built on a framework-agnostic core — React is the first adapter, with more on the way.
Columns that infer themselves
Infer columns and their types straight from your data, or declare them by hand — custom header and cell templates take over whenever you need more control.
Resize, your way
Drag a column's edge to resize it, double-click to auto-fit its content, or drive the whole thing from the keyboard.
Reorder without fighting state
Drag a header into place or reorder with the keyboard — GridKit computes the new order and tells you once, on drop.
Selection for rows, columns, and cells
Select any combination of rows, columns, and cells, single or multiple, fully controlled or left to sensible defaults.
Keyboard-first and accessible
A single roving tab stop, full arrow-key navigation, and ARIA roles with live announcements — built in, not bolted on.
A theme you can swap
@gridkitjs/react renders semantic class names and carries no styles of its own. @gridkitjs/theme-tailwind ships a ready-made palette with dark mode, or bring your own stylesheet.
Three packages, one grid
Install just the layer you need — the core has no framework or styling dependency.
@gridkitjs/core
Framework-agnostic grid logic: column resolution, resizing, reordering, and selection, fully tested on its own.
@gridkitjs/react
Binds the core to real React components — hooks and a DataGridComponent, no virtual-DOM fighting.
@gridkitjs/theme-tailwind
A ready-made palette with dark mode support, or use it as a reference for your own stylesheet.
Why another grid?
TL;DR: I got tired of fighting my tools.
I've spent 2+ years building grids and tables inside SaaS ERP products — the kind where a single view needs sorting, filtering, inline editing, and a few thousand rows to not fall over. Along the way I've reached for more than one big commercial grid library (won't name names), and the pattern was always the same: the library wasn't actually built for React, it was ported to it.
That shows up in specific ways. Conditional rendering or a prop change in the wrong order would crash the whole grid. Instability that only appeared under React's StrictMode or concurrent rendering. Internals reaching into the DOM with brittle selectors and zero guard rails, so a version bump could silently break your app. And TypeScript support that felt bolted on after the fact (if even) — types that lied about what the API actually accepted, instead of types that were the API.
GridKit is my attempt at doing it the other way around: write the grid for the framework, not around it. The core logic is framework-agnostic TypeScript so it's testable and predictable on its own, but the React package is a first-class citizen built with React's rendering model in mind from day one — not a jQuery-era widget wearing a component wrapper.
Long term, I want this to be the grid people reach for without bracing for a fight — something that gets out of your way, doesn't need a support contract to debug, and actually gets the max potential out of the framework it's built on. Everything I learned about what a robust grid needs to do in production ERP software is going into GridKit.
Start with the docs
Every example on the docs site runs the real, published packages — nothing simplified for the demo.
Explore the docs