# fulldev/ui
fulldev/ui is a shadcn-compatible component library built specifically for Astro, designed for content-driven websites. It provides over 100 pure vanilla Astro components and pre-built page blocks without framework dependencies, styled with Tailwind CSS v4 and featuring full TypeScript support. The library leverages the shadcn CLI and registry system for seamless component installation.
The library focuses on content-first components such as sections, tiles, and items that are optimized for building marketing pages, landing pages, and content-heavy websites. Components are distributed through a namespaced registry (`@fulldev`) and can be installed individually or in bulk using the shadcn CLI, making it easy to incrementally adopt components as needed.
## Installation
Initialize shadcn in your Astro project and add the fulldev/ui registry to install components via the CLI.
```bash
# Create a new Astro project (if needed)
npx create-astro@latest my-project --template with-tailwindcss --install --git
cd my-project
# Initialize shadcn
npx shadcn@latest init
# Add fulldev/ui registry to components.json
# Edit components.json:
{
"registries": {
"@fulldev": "https://ui.full.dev/r/{name}.json"
}
}
# Configure TypeScript paths in tsconfig.json:
{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"@/*": ["./src/*"]
}
}
}
# Install individual components
npx shadcn@latest add @fulldev/button
npx shadcn@latest add @fulldev/button @fulldev/item @fulldev/list
# Or install all components and blocks at once
npx shadcn@latest add @fulldev/components
npx shadcn@latest add @fulldev/blocks
```
## Button Component
Displays a button or link element with multiple variants including default, outline, secondary, ghost, destructive, and link styles. Supports icons, loading states, and can render as an anchor tag using the `href` attribute.
```astro
---
import { Button } from "@/components/ui/button"
import { Icon } from "@/components/ui/icon"
import { Spinner } from "@/components/ui/spinner"
---
```
## Section Component
A layout component for organizing page content into distinct sections with support for content, actions, prose, media, and grid layouts. Perfect for building hero sections, feature sections, and content blocks.
```astro
---
import image from "@/assets/image-placeholder.webp"
import { Button } from "@/components/ui/button"
import { Image } from "@/components/ui/image"
import {
Section,
SectionActions,
SectionContent,
SectionProse,
} from "@/components/ui/section"
---
Section heading
This is a section component for organizing page content.
Floating Section
This section has a floating card-like appearance.
```
## Tile Component
A card-like container component for displaying content tiles with support for media, split layouts, and interactive hover states. Ideal for product cards, feature showcases, and navigation items.
```astro
---
import image from "@/assets/image-placeholder.webp"
import { Button } from "@/components/ui/button"
import { Icon } from "@/components/ui/icon"
import { Image } from "@/components/ui/image"
import {
Tile,
TileActions,
TileContent,
TileDescription,
TileMedia,
TileSplit,
TileSpread,
TileTitle,
} from "@/components/ui/tile"
---
Feature TitleDescription for this featureProduct NameBeautiful product with amazing featuresSide-by-Side LayoutImage on the left, content on the right
Featured
Premium FeatureGet access to exclusive features
```
## Item Component
A flexible container for displaying content items with media, titles, and descriptions. Available in default, outline, and muted variants for different visual contexts.
```astro
---
import { Icon } from "@/components/ui/icon"
import {
Item,
ItemDescription,
ItemMedia,
ItemTitle,
} from "@/components/ui/item"
---
Item TitleItem description goes here
Outline VariantThis item has an outline variant
Muted VariantThis item has a muted variant
```
## Accordion Component
A vertically stacked set of interactive headings that each reveal a section of content. Uses native HTML `details` and `summary` elements for accessibility.
```astro
---
import {
Accordion,
AccordionContent,
AccordionItem,
AccordionTrigger,
} from "@/components/ui/accordion"
---
Product Information
Our flagship product combines cutting-edge technology with sleek design.
Built with premium materials, it offers unparalleled performance.
Key features include advanced processing capabilities and an intuitive
user interface designed for both beginners and experts.
Shipping Details
We offer worldwide shipping through trusted courier partners. Standard
delivery takes 3-5 business days, while express shipping ensures
delivery within 1-2 business days.
Return Policy
We stand behind our products with a comprehensive 30-day return policy.
Our hassle-free return process includes free return shipping.
```
## Tabs Component
A set of layered sections of content that display one panel at a time. Provides a clean way to organize related content into switchable views.
```astro
---
import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"
---
AccountPassword
Account
Make changes to your account here. Click save when you're done.
Password
Change your password here. You will be logged out after changing.
```
## Icon Component
A component for displaying scalable vector icons from lucide-icons and simple-icons libraries. Utilizes Astro's rendering for optimal performance.
```astro
---
import { Icon } from "@/components/ui/icon"
---
```
## Image Component
A minimal wrapper around the Astro Image component with lazy loading support and optimized image handling.
```astro
---
import image from "@/assets/image-placeholder.webp"
import { Image } from "@/components/ui/image"
---
```
## Avatar Component
An image element with a fallback for representing users. Supports custom shapes and can be stacked for group displays.
```astro
---
import avatar from "@/assets/avatar.webp"
import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar"
---
JDJD
U1U2U3
```
## Badge Component
Displays a badge with support for multiple variants and can render as a link element using the `href` attribute.
```astro
---
import { Badge } from "@/components/ui/badge"
import { Icon } from "@/components/ui/icon"
---
DefaultSecondaryDestructiveOutline
Verified
8Category
```
## Alert Component
Displays a callout for user attention with optional icon, title, and description. Available in default and destructive variants.
```astro
---
import { Alert, AlertDescription, AlertTitle } from "@/components/ui/alert"
import { Icon } from "@/components/ui/icon"
---
Success! Your changes have been saved
This is an alert with icon, title and description.
Unable to process your payment.
Please verify your billing information and try again.
Check your card details
Ensure sufficient funds
Verify billing address
```
## Input Component
Displays a form input field with support for various input types and disabled state.
```astro
---
import { Input } from "@/components/ui/input"
---
```
## Checkbox Component
A control that allows users to toggle between checked and not checked states. Works with Label component for accessible forms.
```astro
---
import { Checkbox } from "@/components/ui/checkbox"
import { Label } from "@/components/ui/label"
---
By clicking this checkbox, you agree to the terms and conditions.
```
## AutoForm Component
A form component that automatically generates form fields based on a configuration array. Simplifies form creation for common use cases.
```astro
---
import { AutoForm } from "@/components/ui/auto-form"
---
```
## Table Component
A data table component that displays information in rows and columns with support for headers, body, footer, and captions.
```astro
---
import {
Table,
TableBody,
TableCaption,
TableCell,
TableFooter,
TableHead,
TableHeader,
TableRow,
} from "@/components/ui/table"
---
A list of your recent invoices.InvoiceStatusMethodAmountINV-001PaidCredit Card$250.00INV-002PendingPayPal$150.00Total$400.00
```
## Navigation Menu Component
A collection of links for navigating websites with dropdown menus and content panels.
```astro
---
import {
NavigationMenu,
NavigationMenuContent,
NavigationMenuItem,
NavigationMenuLink,
NavigationMenuList,
NavigationMenuTrigger,
} from "@/components/ui/navigation-menu"
---
Home
Introduction
Get started with our library.
Documentation
Learn how to use components.
Components
All Components
```
## Sheet Component
A sliding panel component that appears from the edge of the screen. Useful for mobile navigation menus and side panels.
```astro
---
import { Button } from "@/components/ui/button"
import {
Sheet,
SheetClose,
SheetContent,
SheetDescription,
SheetFooter,
SheetHeader,
SheetTitle,
SheetTrigger,
} from "@/components/ui/sheet"
---
Open SheetSheet Title
This is a description of the sheet. You can add any content here.
```
## Header Component
A layout component for the top section of a page with logo, navigation, and action buttons.
```astro
---
import { Button } from "@/components/ui/button"
import { Header, HeaderActions, HeaderContent } from "@/components/ui/header"
import { Logo, LogoText } from "@/components/ui/logo"
---
fulldev/uiBrand
```
## Logo Component
A component for displaying brand logos with optional image and text elements.
```astro
---
import logo from "@/assets/logo.svg"
import { Logo, LogoImage, LogoText } from "@/components/ui/logo"
---
fulldev/ui
```
## Rating Component
A star rating component for displaying ratings visually with support for fractional values and custom sizes.
```astro
---
import { Rating } from "@/components/ui/rating"
---
```
## Price Component
A flexible price display component for showing pricing information with currency and unit support.
```astro
---
import { Price, PriceUnit, PriceValue } from "@/components/ui/price"
---
monthmonth
```
## List Component
A container for displaying a series of items in a list format with icon support.
```astro
---
import { Icon } from "@/components/ui/icon"
import { List, ListItem } from "@/components/ui/list"
---
First item with feature
Second item included
Third item benefit
```
## Marquee Component
A continuous scrolling animation component for displaying content in a loop with direction and pause-on-hover controls.
```astro
---
import { Marquee, MarqueeContent } from "@/components/ui/marquee"
const items = ["React", "Vue", "Angular", "Svelte", "Astro", "Next.js"]
---
```
## Native Carousel Component
A carousel component using native HTML scroll behavior for seamless slide navigation without JavaScript dependencies.
```astro
---
import {
NativeCarousel,
NativeCarouselContent,
NativeCarouselItem,
NativeCarouselNext,
NativeCarouselPrevious,
} from "@/components/ui/native-carousel"
---
Slide 1
Slide 2
Slide 3
```
## Theme Toggle Component
A button component that toggles between light and dark theme modes. Requires ThemeProvider in the document head to prevent flash of unstyled content.
```astro
---
// In your layout file
import { ThemeProvider, ThemeToggle } from "@/components/ui/theme-toggle"
---
```
## Collapsible Component
An interactive component which expands and collapses a panel of content.
```astro
---
import {
Collapsible,
CollapsibleContent,
CollapsibleTrigger,
} from "@/components/ui/collapsible"
---
Can I use this in my project?
Yes. Free to use for personal and commercial projects.
No attribution required.
```
## Summary
fulldev/ui is ideal for building content-driven websites such as marketing pages, landing pages, SaaS websites, portfolios, and documentation sites. The component library excels at rapid page construction using pre-built blocks like hero sections, feature grids, pricing tables, testimonial carousels, and contact forms. The shadcn CLI integration enables teams to selectively install only needed components while maintaining full customization control through Tailwind CSS.
Integration patterns typically involve installing base UI components (button, icon, image) first, then progressively adding layout components (section, tile, header, footer) and specialized blocks. The content-first approach means components are designed to accept dynamic content from CMS systems, markdown files, or Astro's content collections. For theming, fulldev/ui follows shadcn/ui conventions using CSS variables, making it easy to customize colors and apply consistent design tokens across all components.