DEV Community

Cover image for Open Source Project #156: shadcn-admin — Vite + shadcn/ui Admin Dashboard Reference Collection, 10+ Pages, RTL Support, Accessibility-First
WonderLab
WonderLab

Posted on

Open Source Project #156: shadcn-admin — Vite + shadcn/ui Admin Dashboard Reference Collection, 10+ Pages, RTL Support, Accessibility-First

Introduction

"I kept rebuilding the same admin UI for every project, so I turned these pages into a reusable reference collection."

This is article #156 in the "One Open Source Project a Day" series. Today's project is shadcn-admin — satnaing's open-source admin dashboard reference collection built on shadcn/ui + Vite + TanStack Router.

13,900 Stars. MIT license.

Positioning upfront: the README explicitly states "This is not a starter project (template) though." This is not an out-of-the-box scaffold — it's a UI reference collection showing how to compose common admin interfaces with shadcn/ui. You can clone it to study the structure, borrow components, and reference layouts. But it has no backend integration, no business logic, and isn't meant to be dropped into production as-is.

That positioning is actually what makes it valuable: clean, UI-focused, zero business coupling.

What You'll Learn

  • Why Vite + TanStack Router instead of Next.js
  • shadcn/ui's underlying philosophy: why it's not a "component library"
  • The 10+ pages and core components included
  • How RTL support is implemented
  • How it differs from Ant Design / MUI admin templates

Prerequisites

  • Basic React familiarity
  • Some experience with Tailwind CSS
  • Awareness of what shadcn/ui is (or willingness to learn)

Understanding shadcn/ui First

shadcn/ui is commonly misunderstood as a component library — install it, import from it, use it. That's not how it works.

shadcn/ui's model: copy component source code directly into your project.

npx shadcn@latest add button
# After running, the full Button source appears at src/components/ui/button.tsx
# That file is yours. Edit it however you want.
Enter fullscreen mode Exit fullscreen mode

The underlying stack is Radix UI (accessibility interaction logic) + Tailwind CSS (styling). What you get is directly editable source code, not an encapsulated black box.

The practical result: complete style control, built-in accessibility, and a bundle that only includes what you actually use.

shadcn-admin builds on this foundation — the entire component layer is transparent and modifiable.


Why Vite Instead of Next.js

The vast majority of admin dashboard templates use Next.js. shadcn-admin chose Vite + TanStack Router, and the reason is straightforward:

Admin systems usually don't need SSR.

Most internal tools and management dashboards are login-gated SPAs — no SEO requirements, no benefit from server-side rendering for first-load performance, but they'd carry Next.js's server-side complexity (API Routes, Server Components, Node.js server deployment requirements).

A Vite-built pure frontend SPA:

  • Fast builds (millisecond HMR)
  • Simple deployment (static files, works on Netlify/Vercel/any CDN)
  • No Node.js server dependency
  • Smaller bundle

TanStack Router provides type-safe routing that's easier to control in TypeScript projects than Next.js App Router's file-based routing.


Page Structure

Authenticated Routes (post-login)

Page Content
Dashboard Data overview, stat cards, charts, recent activity
Tasks Task list with filtering, sorting, status management — DataTable component showcase
Users User management with search, pagination, role listings
Chats Instant messaging UI: conversation list + chat area
Apps Application/integration management page
Settings Multi-tab settings: account, notifications, appearance, display, security, shortcuts
Help Center Documentation/FAQ page

Auth Pages

  • Sign In
  • Sign Up
  • Forgot Password
  • OTP Verification
  • Clerk-integrated versions (under /clerk routes)

Error Pages

  • 401 Unauthorized
  • 403 Forbidden
  • 404 Not Found
  • 500 Server Error
  • 503 Service Unavailable

Core Components

Sidebar Navigation

Uses shadcn/ui's built-in Sidebar component — collapsible, supports nested menus, paired with a top Header to form the complete page frame.

Global Search (Command)

Cmd+K (macOS) / Ctrl+K opens a global command search palette, built on shadcn/ui's <Command> component with keyboard navigation. Common in modern admin systems but frequently overlooked in templates.

DataTable

An advanced data table built on TanStack Table (formerly React Table):

  • Column sorting
  • Multi-condition filtering
  • Pagination controls
  • Row selection
  • Column visibility toggling

Both Tasks and Users pages use this component — it's one of the most frequently needed complex components in admin development.

Theme Toggle

Light/dark mode switching, CSS variable-driven, using the standard shadcn/ui approach.


RTL Support

This is what sets shadcn-admin apart from most comparable projects — full support for right-to-left languages like Arabic, Hebrew, and Persian.

The implementation isn't just adding dir="rtl" to the root element. Several shadcn/ui components required targeted customization:

RTL-customized components:
alert-dialog, calendar, command, dialog, dropdown-menu, select, table, sheet, sidebar, switch

These components have directional UI elements — icon positions, dropdown directions, animation directions — that need specific handling in RTL mode.

Important caveat: running npx shadcn add to update these components will overwrite the RTL modifications. Manual merge required.


Installation

git clone https://github.com/satnaing/shadcn-admin.git
cd shadcn-admin
pnpm install
pnpm run dev
Enter fullscreen mode Exit fullscreen mode

Clerk authentication requires environment variables:

cp .env.example .env
# Fill in Clerk's PUBLISHABLE_KEY and SECRET_KEY
Enter fullscreen mode Exit fullscreen mode

Without Clerk, the project includes non-Clerk auth pages (/sign-in, /sign-up, etc.) that work standalone.


shadcn-admin vs. Common Admin Templates

Dimension shadcn-admin Ant Design Pro AdminLTE
UI base Radix UI + Tailwind (unstyled components) Ant Design (opinionated styling) Bootstrap
Build tool Vite Umi.js Webpack
Router TanStack Router Umi router None (jQuery era)
RTL Deep support Basic support Limited
Accessibility Radix UI native guarantee Partial Basic
Customization Very high (source in your project) Limited (import black box) Limited
TypeScript Full Full None
Positioning UI reference collection Production scaffold Production template
Stars 13.9k 37k+ 11k+

Project Links


Summary

shadcn-admin's value comes from its deliberate positioning: reference collection, not scaffold.

Most admin templates chase "out of the box" — the cost is coupling in everything you don't need: authentication strategy, state management, API layer, permission system. When your requirements diverge from the template's assumptions, the migration cost exceeds starting from scratch.

shadcn-admin gives you only the UI layer: carefully implemented interface structures, component composition patterns, responsive layouts, and detail handling like RTL. Business logic is yours to decide.

Vite + TanStack Router makes it lighter than Next.js templates — appropriate for admin dashboards where SEO doesn't matter and deployment simplicity does. shadcn/ui's "source code is yours" model keeps customization open.

13,900 Stars confirms the direction: developers don't want another everything-bundled admin framework. They want a clean UI reference to decide how to compose themselves.


Explore PrimeSkills — A marketplace for handpicked AI Agents and skills. Each is validated in real enterprise workflows, stripping away hype and keeping only what truly works.

Welcome to my Homepage for more useful insights and interesting products.

Top comments (0)