A lightning-fast starter template combining Astro's performance with Shadcn's beautiful components.
# Clone the repository
git clone https://github.com/agentc-app/astro-shadcn.git
# Navigate to project
cd astro-shadcn
# Install dependencies
npm install
# Start development server
npm run dev
Visit http://localhost:4321
- You're ready to go! π
All Shadcn/UI components are pre-configured for Astro:
---
// Example usage in .astro file
import { Button } from "@/components/ui/button"
import { Card } from "@/components/ui/card"
---
<Button>Click me!</Button>
- β Accordion
- β Alert Dialog
- β Avatar
- β Badge
- β Button
- β Card
- β Dialog
- ... and more!
your-project/
βββ src/
β βββ components/
β β βββ ui/ # All Shadcn components
β βββ layouts/
β β βββ Layout.astro # Base layout
β βββ pages/
β βββ index.astro # Homepage
βββ astro.config.mjs # Astro configuration
βββ tailwind.config.cjs # Tailwind configuration
// astro.config.mjs
import { defineConfig } from 'astro/config';
import tailwind from '@astrojs/tailwind';
import react from '@astrojs/react';
export default defineConfig({
integrations: [
tailwind(),
react(), // Required for Shadcn components
],
// Error suppression
vite: {
build: {
suppressWarnings: true,
}
}
});
---
// src/pages/index.astro
import { Button } from "@/components/ui/button";
import { Card, CardHeader, CardTitle } from "@/components/ui/card";
---
<Card>
<CardHeader>
<CardTitle>Welcome to Astro + Shadcn!</CardTitle>
</CardHeader>
<Button client:load>Interactive Button</Button>
</Card>
-
Start Development
npm run dev
-
Using React Components in Astro
--- // Always add client:load for interactive components import { Dialog } from "@/components/ui/dialog" --- <Dialog client:load> <!-- Dialog content --> </Dialog>
-
Build for Production
npm run build npm run preview # Test the production build
β
Component Hydration: All interactive components use client:load
β
Build Warnings: Suppressed in configuration
β
Path Aliases: Pre-configured for easy imports
β
React Integration: Properly set up for Shadcn
-
Clear Cache
rm -rf dist node_modules .astro npm install
-
Restart Dev Server
# Kill the dev server and restart npm run dev
-
Component Usage in Astro
--- // Always import in the frontmatter import { Button } from "@/components/ui/button" --- <!-- Use in template --> <Button client:load>Click me!</Button>
-
Styling with Tailwind
<div class="dark:bg-slate-800"> <Button class="m-4">Styled Button</Button> </div>
-
Layout Usage
--- import Layout from '../layouts/Layout.astro'; --- <Layout title="Home"> <!-- Your content --> </Layout>
Perfect scores across all metrics:
- π Performance: 100
- βΏ Accessibility: 100
- π§ Best Practices: 100
- π SEO: 100
- Join Astro Discord
- Check Astro Documentation
- File an Issue on GitHub
Built with π Astro and π¨ Shadcn/UI by AgentC