CLI tool
satnaing/shadcn-admin avatar
satnaing/shadcn-admin

satnaing/shadcn-admin: a Shadcn and Vite admin dashboard UI, not a starter template

Admin Dashboard UI built with Shadcn and Vite.

15,514 stars2,349 forksTypeScriptMIT

At a glance

What is it?
shadcn-admin is a collection of admin dashboard screens built on Shadcn UI components, TailwindCSS and Vite, with TanStack Router and RTL support. It ships as a working dashboard rather than a scaffold, which changes how you adopt it.
Who is it for?
Adopt shadcn-admin if you want a working admin shell with sidebar, tables, forms and RTL behaviour already assembled, and you accept that some components in src/components/ui/ carry local edits you will have to merge by hand. Skip it if you need a clean scaffold with no inherited opinions, or if your stack is not React with Vite.
Can I use it commercially?
Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 21 days ago.
What is it written in?
Mainly TypeScript, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 1, 2026, and from our analysis. They are not legal advice.

Editorial analysis

What shadcn-admin actually is, and the problem it removes

Most admin dashboards are assembled the same way: a sidebar, a header with a user menu, a data table with sorting and pagination, a settings form, a command palette, and a theme toggle. None of that is hard, and all of it is repetitive. shadcn-admin exists because its author kept building those screens at work and in personal projects and wanted a reusable collection instead of starting from an empty directory each time. The README states the motivation directly: "I always wanted to make a reusable collection of dashboard UI for future projects."

The target reader is a React developer who already likes Shadcn UI and wants the screens, not the primitives. The README is explicit that this is "not a starter project (template)", and that distinction matters. A template gives you a blank structure and gets out of the way. shadcn-admin gives you an opinionated, populated dashboard: over ten pages, a built-in sidebar component, a global search command, light and dark mode, and RTL support. You inherit decisions, not just dependencies. If you want to design your own information architecture from zero, that inheritance is friction rather than help.

The stack behind the screens: Vite, TanStack Router and Shadcn

The build tool is Vite, not Next.js, which is the single most consequential choice here. That means no server components, no file-based routing conventions from a framework, and no built-in API layer. Routing comes from TanStack Router, data fetching from TanStack React Query, and tables from TanStack Table. Forms use react-hook-form with the Zod resolver, and HTTP calls use axios. Styling is TailwindCSS with Radix UI primitives underneath, which is what Shadcn UI is.

Authentication is partial. The README labels it "Auth (partial)" and the only environment variable in .env.example is VITE_CLERK_PUBLISHABLE_KEY, with Clerk listed as the current sponsor. So the auth path is wired to Clerk rather than abstracted behind an interface. If you use a different identity provider, you are replacing that integration, not configuring it.

The repository layout reinforces the shape of the project: src/ holds the application, components.json is the Shadcn CLI configuration, and netlify.toml indicates the hosted demo is deployed on Netlify. There is also knip.config.ts and a knip script, so unused exports and dependencies are checked as part of the toolchain. That is a small detail with real consequences: a fork that adds code without running it will accumulate dead exports silently.

Installing shadcn-admin and getting the dashboard running

The README gives a four-step local setup. Clone the repository, enter the directory, install with pnpm, and start the Vite dev server. pnpm is the package manager the lockfile expects; pnpm-lock.yaml is present and there is no package-lock.json or yarn.lock in the top-level listing.

bash
git clone https://github.com/satnaing/shadcn-admin.git
cd shadcn-admin
pnpm install
pnpm run dev

After pnpm run dev, Vite prints a local URL, normally on port 5173. The dashboard shell should render with the sidebar and the theme toggle. If you want to exercise the Clerk-backed auth path, copy .env.example and fill in the publishable key before starting the server.

bash
cp .env.example .env
# then set VITE_CLERK_PUBLISHABLE_KEY in .env

The package.json exposes a wider set of scripts than the README documents. The build runs TypeScript compilation before bundling, tests run through Vitest in headless browser mode, and the browser tests need Playwright's Chromium installed first.

bash
pnpm run build
pnpm run lint
pnpm run test:browser:install
pnpm run test

pnpm run test:browser:install runs playwright install chromium --with-deps, which pulls system dependencies and may need elevated permissions on Linux. That is the step most likely to fail on a locked-down machine, and it is not mentioned in the README's Run Locally section.

The customized components are the real upgrade tax

Shadcn UI is distributed as source you copy into your project, which means updating a component is a merge, not a version bump. shadcn-admin makes that harder by modifying some components locally. The README splits them into two lists. Modified components are scroll-area, sonner and separator. RTL updated components are alert-dialog, calendar, command, dialog, dropdown-menu, select, table, sheet, sidebar and switch.

The README's guidance is that running npx shadcn@latest add <component> is "generally safe for non-customized components", and that for the listed ones you may need to manually merge changes to preserve the project's modifications. It also notes that if you do not need RTL support, the RTL updated components can be updated through the CLI safely, because those changes are primarily for RTL compatibility. The modified three are the ones to treat carefully, since the README says they may carry other customizations.

This is the honest trade-off of the project. You get RTL support that most Shadcn dashboards do not have, and you pay for it with a permanent divergence from upstream in ten files. Before adopting, look at src/components/ui/ and decide whether that divergence is acceptable for your team's update cadence.

Where shadcn-admin is the wrong choice

The clearest mismatch is framework. If your application is Next.js, this project does not give you the routing or rendering model you are building on, and the RELATED searches show people looking for a Next.js variant precisely because the Vite choice is the first thing they hit. Porting the screens is possible since they are React components, but you are redoing the routing layer and any framework-specific data patterns yourself.

The second mismatch is Vue. The project is TypeScript and React throughout, with Radix UI primitives that have no Vue equivalent in this codebase. Anyone searching for a Vue version is looking at a different project.

The third is the template expectation. Because the README says this is not a starter template, teams that want a thin scaffold with no pages will spend their first week deleting screens instead of writing them. And because auth is partial and tied to Clerk, a team with an existing session layer inherits a dependency it did not ask for.

One more limit worth stating plainly: the README does not document a rollback or migration path for the customized components. There is no stated strategy for reconciling upstream Shadcn changes beyond manual merging.

How it compares with building on Shadcn UI directly

The alternative is not another dashboard product so much as starting from Shadcn UI itself. With the Shadcn CLI you add only the primitives you need, and every file in your repository is one you wrote or generated once, with no local divergence. You own the update path completely.

The difference in approach is the direction of the work. Shadcn UI gives you components and expects you to compose pages. shadcn-admin gives you composed pages and expects you to accept its component edits. The first costs you the assembly time for sidebar, tables, command palette and settings screens. The second costs you a merge whenever upstream components change, concentrated in the thirteen files the README lists.

There is also a middle path the README implicitly supports: take the pages and layout, and re-add the customized components from the CLI if you do not need RTL. That keeps the modified three under your control while still saving the page-level work.

Maintenance, licence and what to check before you commit

The repository is not archived and the last push was on 2026-09-10, which is recent relative to the 2026-09-21 date. Releases are tagged and versioned in package.json, currently 2.2.1, with v2.2.0 and v2.1.0 before it. The CHANGELOG.md file at the repository root is where release notes live, so upgrade cost between tags can be read there rather than inferred.

The licence is MIT. That permits commercial use, modification and redistribution provided the copyright notice and permission notice are retained. It offers no patent grant and no warranty, and it says nothing about the licences of the dependencies you pull in, which you should review separately. None of this is legal advice.

Maintenance cost inside your fork is concentrated in the customized components. Every time you run the Shadcn CLI on scroll-area, sonner or separator, you risk overwriting local changes. The README points you to src/components/ui/ for implementation details, which is the right place to look before any update. The knip script is also worth keeping in CI, since it catches the dead exports that accumulate when a fork diverges.

Editorial conclusion

Adopt shadcn-admin if you want a working admin shell with sidebar, tables, forms and RTL behaviour already assembled, and you accept that some components in src/components/ui/ carry local edits you will have to merge by hand. Skip it if you need a clean scaffold with no inherited opinions, or if your stack is not React with Vite. Before committing, run pnpm install and pnpm run dev, then diff the components listed as modified or RTL updated against the Shadcn CLI output, because that diff is the real cost of this project.

Frequently asked questions

What is the purpose of an admin dashboard?

In this project's terms, it is the set of screens an operator uses to read and change application data: a sidebar for navigation, data tables, settings forms, and a global search command. shadcn-admin packages those screens as Shadcn UI components over Vite.

What is the best admin dashboard template?

The README does not make a comparative claim, and it states that shadcn-admin is not a starter template at all. It is a reusable collection of dashboard UI, so the question of which template is best is not one this repository answers.

What is the admin panel used for?

shadcn-admin provides over ten pages plus a built-in sidebar component and a global search command, which are the parts of an admin panel an operator navigates. Authentication is only partial and wired to Clerk.

Can you provide some examples of shadcn themes?

This repository ships light and dark mode rather than a theme gallery, and it does not document named themes. The components live in src/components/ui/ and are built on TailwindCSS and Radix UI, so theming happens through those layers.

Official sources

  1. License: MIT
  2. Project website
  3. README
  4. Releases
  5. satnaing/shadcn-admin on GitHub
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/satnaing-shadcn-admin.svg)](https://hysenlabs.com/projects/satnaing-shadcn-admin)