Fourteen surfaces a CRUD admin console reaches for, broken into nineteen testable rows. Every cell a kit does not fill is a second dependency you own, version and theme — or a licence you buy. The ticks are the boring part. Read the black.
The only kit with exactly one gap — no data grid. Dates + range, tree, multi-select, dropzone, Tiptap RTE, charts, command palette, notifications and AppShell all ship MIT, in the box [18].
Covers the most surface — but every grid feature you reach for on day two (virtualisation, pinning, grouping, Excel) is behind MUI X Pro or Premium [3], and its DataGrid is a head-on duplicate of the TanStack Table this team already picked.
Cell states — four, not two
Ships MIT, free, first-party. Costs nothing and asks nothing.
Exists, and is behind MUI X Pro or Premium. Per concurrent developer. Forever.
A recipe, a community registry entry, or DIY over a headless engine. Free, not free of work.
A hole in the sheet. Forces a second dependency you own, version and theme.
The board — 19 surfaces × 4 kits
Table only [18]@mantine/form [18]Field / Form primitives [1]@mantine/dates [18]type="range", free [20]multiple [11]multiple + Chips [23]Tree — checkboxes, DnD, lazy, virtualisation helpers [19]@mantine/notifications [18]@mantine/dropzone [18]@mantine/charts (Recharts) [18]@mantine/tiptap — a wrapper, but a wrapper you don't write [18]@mantine/spotlight [18]Read the column, not the row — 19 cells each
Five hazard cells, and they are exactly the five an admin console hits in month two. The "free grid" holds until row 101.
Zero hazard tape. Eight of nineteen cells are "here is a guide" — six of them the grid, which the house picks already said you'd build on TanStack Table anyway.
The six black cells are all Block A. It is not six gaps — it is one gap, the data grid, counted six ways. Everything else is MIT.
The paywall, precisely — MUI X is the only paid surface among the four
Read the virtualisation row twice. A free MUI DataGrid renders fine at 100 rows and degrades past that [5]. The moment an admin console hits a 5,000-row table, the free-grid argument evaporates → Pro, for every dev on the team, forever. And this team already chose TanStack Table as the house grid — so the invoice buys a DataGrid that gets deleted.
The bill of materials — what each choice forces you to additionally adopt
Table yourself ⭐ 28kThese are the de-facto answers no kit displaces. Which is exactly why the house-level dependency picks (state, forms, table, toasts) matter more than the kit choice does.
Against the house picks — state, forms, table and toasts are already settled
DataGrid is MUI X's whole commercial value and a full replacement for TanStack Table [4]. Paying $299–599/dev/yr for a grid you have already chosen not to use is the single worst outcome in this decision.
Inputs bind via Controller.
Snackbar can't stack anyway [12].
Its data-table is TanStack Table, styled [15].
Form is the RHF wrapper [14].
It is Sonner [14].
No grid to conflict with; MRT is TanStack Table anyway [21].
@mantine/form goes unused [18].
@mantine/notifications goes unused [18].
Ships nothing to conflict with [1].
Field / Form are validation-agnostic [1].
Its own Toast primitive [1].
If you read one thing
@mantine/form, @mantine/notifications. Cheap [18].The other five angles
@source tax underneath all four.@theme; MUI and Mantine keep a JS theme object as source of truth.@source globs.41 sources — all primary docs