← Default view
Coverage inspection itenium-ui · admin console 19 surfaces × 4 kits survey · 41 sources 2026-07-14

The gap
board76 cells. 26 holes.

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.

Cover artwork for the coverage research
Fig. 0 — canonical

Inspection result

One hole

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].

$299–599 / dev / yr

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.

Not two options

Since July 2026 shadcn init defaults to Base UI [13]. shadcn = Base UI + a Tailwind-styled layer + a registry. Raw Base UI is that minus the styling and minus every data component.

Cell states — four, not two

✓ In the box

Ships MIT, free, first-party. Costs nothing and asks nothing.

$ Paywalled

Exists, and is behind MUI X Pro or Premium. Per concurrent developer. Forever.

+ You build it

A recipe, a community registry entry, or DIY over a headless engine. Free, not free of work.

✗ Missing

A hole in the sheet. Forces a second dependency you own, version and theme.

The board — 19 surfaces × 4 kits

Surface
⭐ 99k · MIT core + paid X [36]
⭐ 119k · registry, not a lib [38]
⭐ 31k · all MIT [39]
⭐ 10k · 35 primitives [37]
Block A · The data grid — 6 rows22 of 24 cells are paid, DIY or missing
Sort / filter / paginatethe table itself
DataGrid Community [4]
+A copy-paste guide over TanStack Table, not a component [15]
dumb Table only [18]
no table at all [1]
Row virtualisationthe 5,000-row moment
$ ProFree grid is capped at 100 rows [5]
+DIY with TanStack Virtual
Column pinningfreeze the ID column
$ Proplan badge on the docs page [6]
+DIY
Row grouping + aggregationthe reporting screen
$ Premiumtop tier only [4]
+DIY
CSV exportthe export button
CSV, print and clipboard stay free [7]
+DIY
Excel exportwhat finance asks for
$ Premiumrelies on exceljs [7]
Block B · Everything else — 13 rowsMantine fills all 13
Forms + validationstate, not inputs
inputs only, no form state [11]
RHF / TanStack Form / Formisch wrappers [14]
@mantine/form [18]
Field / Form primitives [1]
Date + time pickerthe everyday one
MUI X Community [4]
Popover + react-day-picker [16]
@mantine/dates [18]
no picker [1]
Date range pickerevery filter bar, ever
$ ProDate Range Picker is a Pro component [10]
range + presets [16]
type="range", free [20]
Comboboxasync + virtualised
Autocomplete [11]
Base UI Combobox / cmdk [14]
Combobox [18]
async + 10k rows via TanStack Virtual [23]
Multi-select / tags inputthe roles field
Autocomplete multiple [11]
+community registry only [17]
MultiSelect / TagsInput [18]
Combobox multiple + Chips [23]
Tree viewpermissions, org charts
$ Pro abovebasic free · DnD, lazy load and virtualisation are Pro [8]
+community registry only [17]
Tree — checkboxes, DnD, lazy, virtualisation helpers [19]
Dialog / Drawer / Sheettable stakes
Dialog + Drawer [11]
Dialog + Sheet + Drawer [14]
+ a modals manager [18]
Dialog, AlertDialog, Drawer [1]
Toastsstacked, imperative
+Snackbar can't stack — MUI's own docs send you to notistack [12]
it is Sonner [14]
@mantine/notifications [18]
Toast primitive [1]
File upload / dropzonethe import screen
nothing ships [11]
+community registry only [17]
@mantine/dropzone [18]
Chartsthe dashboard tab
$ Pro/Prem abovebar/line/pie/scatter/gauge free · heatmap, funnel, sankey, zoom Pro · candlestick, WebGL Premium [9]
Recharts wrapper [14]
@mantine/charts (Recharts) [18]
Rich text editorthe one nobody ships
@mantine/tiptap — a wrapper, but a wrapper you don't write [18]
Command palette⌘K
Command (cmdk) [14]
@mantine/spotlight [18]
Menu / Combobox primitives only [1]
App shellnav rail, breadcrumbs, responsive drawer
AppBar + Drawer + Breadcrumbs [11]
Sidebar + Breadcrumb [14]
AppShell + NavLink + Breadcrumbs [18]
primitives only — Navigation Menu, Toolbar [1]

Read the column, not the row — 19 cells each

MUI

⭐ 99k · the most surface, the most invoice
9 in-box5 paid1 add-on4 missing

Five hazard cells, and they are exactly the five an admin console hits in month two. The "free grid" holds until row 101.

shadcn/ui

⭐ 119k · nothing paid, plenty to build
9 in-box0 paid8 add-on2 missing

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.

Mantine

⭐ 31k · six holes, one shape
13 in-box0 paid0 add-on6 missing

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.

Base UI

⭐ 10k · 35 primitives, no product
5 in-box0 paid0 add-on14 missing

Fourteen holes. Filling them by hand is, precisely, rebuilding shadcn/ui — which Base UI's own quick-start tells you to go use instead [1].

The paywall, precisely — MUI X is the only paid surface among the four

$299
per developer · per year
MUI X Pro [3]
  • Row virtualisation — the free grid stops at 100 rows [5]
  • Column pinning, tree data, master-detail [6]
  • Date Range Picker [10]
  • Tree View: DnD reorder, lazy children, virtualisation [8]
  • Charts: heatmap, funnel, sankey, zoom/pan, export [9]
$599
per developer · per year
MUI X Premium [3]
  • Row grouping + aggregation [4]
  • Excel export — CSV, print and clipboard stay free [7]
  • Charts: candlestick, WebGL at scale [9]
×N
concurrent front-end devs
The licence unit [4]
  • Priced per concurrent developer contributing changes to front-end code — not per app, not per seat in prod
  • Perpetual use of the version you bought, with 12 months of updates
  • The other three kits: $0, MIT, all rows

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

MUI

5 deps + a licence
+ Pro / Premium the day the grid needs virtualisation, pinning, grouping or Excel [3].

shadcn/ui

3 deps + registry code
Nothing paid. Sonner, cmdk, Recharts, react-day-picker, Sidebar and the RHF Form wrapper are already in the box [14].

Mantine

1 dep — a table
Both wrappers are single-maintainer projects at ~1k stars — price the bus factor in. Everything else ships MIT [18]. Two packages go dead: @mantine/form and @mantine/notifications.

Base UI

the whole data layer
Plus tree view and app shell by hand, plus the entire styling layer. 1.0 shipped 11 Dec 2025; v1.6.0 in June 2026 [2]. This list is shadcn/ui, hand-assembled.

The cells no kit fills — the ones you keep either way

These 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.

Table engine
Powers shadcn's data-table and Mantine React Table. v9 is beta as of June 2026 — start on v8 [24].
Virtualisation
Base UI's own Combobox virtualisation example uses it [23].
Form state
shadcn's Form is an RHF wrapper; MUI, Mantine and Base UI inputs all bind via Controller [14].
Schema validation
Zod ⭐ 43k
No kit ships validation. None. [28]
Toasts
Sonner ⭐ 13k
shadcn's toast is Sonner [14].
Command palette
cmdk ⭐ 13k
Only Mantine has a first-party equivalent (Spotlight) [18].
Rich text
Tiptap ⭐ 38k
Zero kits ship an RTE; @mantine/tiptap is a wrapper around this [18].
Charts
Recharts ⭐ 27k
Both shadcn Charts and @mantine/charts are Recharts skins [32].

Against the house picks — state, forms, table and toasts are already settled

Kit
vs house table — TanStack
vs house forms — RHF + Zod
vs house toasts — Sonner
Conflict

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.

Complement

Inputs bind via Controller.

Duplicate-ish

Snackbar can't stack anyway [12].

Complement

Its data-table is TanStack Table, styled [15].

Complement

Form is the RHF wrapper [14].

Complement

It is Sonner [14].

Complement

No grid to conflict with; MRT is TanStack Table anyway [21].

Duplicate

@mantine/form goes unused [18].

Duplicate

@mantine/notifications goes unused [18].

Complement

Ships nothing to conflict with [1].

Complement

Field / Form are validation-agnostic [1].

Overlap

Its own Toast primitive [1].

If you read one thing

  • 01Adopting MUI while TanStack Table is the house grid means paying for, and not using, the thing MUI sells [3] [4].
  • 02Adopting Mantine means one extra dependency (a table) and two dead packages — @mantine/form, @mantine/notifications. Cheap [18].
  • 03Adopting shadcn/ui means adopting Base UI [13] and building the grid from TanStack Table [15] — which is what the house picks already said you would do.
  • 04Adopting raw Base UI means hand-building tree, dropzone, dates, charts and app shell that shadcn or Mantine would have handed you [1].