You have eight tabs open and four candidates. Each one costs the same: clone it, install it, start the dev server, click around for two minutes, delete the folder. Call it forty minutes a template.
By the time you are done with the third one you have forgotten what the first one's sidebar looked like.
The expensive part is not the install. It is that you never get to see them next to each other. You compare a template you are looking at now against your memory of one you looked at on Tuesday, and memory of a UI is mostly the dashboard page, because the dashboard page is the screenshot in the README.
Open four tabs instead
Four links, four tabs, nothing installed:
One per camp: antd, MUI, Mantine, and shadcn — which is not a component library at all, it is source you copy into your own repo.
The files come from one commit, read into a sandbox copy in your browser. Nothing lands on your disk. (If the one you want is not in this list, you can paste any GitHub repo in — I wrote about that last week, and there is a link at the end of this post.)
That is the whole setup. The rest of this is the part nobody writes down: what to actually look at.
What to look at
Four checks. Each one is a thing you do, not an adjective.
1. Go past the dashboard
Every admin template's dashboard is good. That is the page the author polished, and it is the one in every comparison article including the ones with screenshots.
So open the pages nobody screenshots: settings, the basic profile, an empty state, a form with validation. That is where you find out whether someone kept going after the demo.
The address keeps going after the project name, so you can land straight on a file:
https://studio.crossui.com/app/sandbox/ant-design-pro/src/pages/profile/basic/index.tsx https://studio.crossui.com/app/sandbox/shadcn-admin/src/features/settings/account/account-form.tsx https://studio.crossui.com/app/sandbox/mantine-admin/src/app/(dashboard)/dashboard/settings/page.tsx Open those three and you already know something the README did not tell you.
2. Drill into a card and count the layers
Pick any card on the dashboard. Ctrl-click into it, then into what it is made of.
You are answering one question: when I change this, how many files do I open? A card that is three small components is three files. A card that is three hundred lines inline is one file, and every change to it is a merge conflict waiting for the second person on your team.
Neither answer is wrong. They are different bets, and you are the one who has to live in the file.
3. Change one theme colour and watch where it goes
This is the fastest architecture check I know, and it is where these four differ most.
- shadcn-admin keeps its colours as CSS variables in
src/styles/theme.css. One file, light and dark in the same place. - mantine-admin has one
src/styles/theme.ts. - material-dashboard-react has two parallel trees:
src/assets/theme/base/colors.jsandsrc/assets/theme-dark/base/colors.js. Light and dark are maintained as twins, so every colour decision is made twice. - ant-design-pro does not have a theme folder at all. The look comes from antd's own token system, configured in
config/defaultSettings.ts.
Four reasonable designs. But "change the brand colour" is a different afternoon in each of them, and that is the kind of thing you want to know before you commit, not after.
4. Look at what it drags in
Open package.json. Count.
ant-design-pro 17 dependencies material-dashboard-react 18 mantine-admin 25 shadcn-admin 43 Then look at what the numbers are made of, because the count alone lies. Eighteen of shadcn-admin's forty-three are @radix-ui/* — one package per primitive, which is how that model works: you own the component source, you depend on the unstyled behaviour underneath. Seven of mantine-admin's twenty-five are @mantine/*. ant-design-pro's seventeen are mostly @ant-design/* and antd itself, which is one big library counted once.
So: one heavy dependency, or twenty small ones. Again, not a ranking — but if your company has a review process for new packages, those two numbers mean very different amounts of paperwork.
While you are there, look at the whole file tree. These four are 311, 316, 107 and 257 files. The 107 is Mantine. If "small enough to read in an afternoon" matters to you, that is a real difference and nobody puts it in a comparison table.
If the one you want is not here
Paste the owner and repo name into Community Templates and you get a link in the same shape. Public repos work without an account, yours or anyone's.
That is how you run these four checks against the template a colleague keeps recommending.
Two limits, and they matter
These four have been set up by us. React version, path aliases, which CDN serves what, a shim here and there. A repo you paste in gets none of that. It might open with no work at all, and it might not — the difference between these four and an arbitrary repo is real and it is our doing, not the template's.
I would rather you knew that now than discover it on the first repo you bring yourself and conclude the tool is flaky.
Not every repo renders. Some open blank, some open with an error card naming the file and line it stopped on. The usual reasons are dull and specific: a package that only ships CommonJS, a Create React App project calling require() on an image, a router from a different generation than the code around it. The note at the bottom of the Community Templates page lists what currently gets through.
No ranking here
I am not going to tell you which of the four is best. We show all of them, so we are the last people whose ranking you should take.
What I will say is that the ranking was never the hard part. You already know whether your team writes Tailwind or imports a component library. The hard part is the thing you could not do cheaply before: see the settings page of four candidates in four tabs, in ten minutes, before anyone has typed npm install.
Look first. Install the one that survives looking.


