A modern, glassmorphic component library inspired by Apple's design language, built with Next.js 16, React 19, and shadcn-ui registry.
- 50+ Glass Components - Comprehensive collection of beautiful, glassy UI components
- Apple-Inspired Design - Glassmorphism effects following Apple's design standards
- OKLCH tint system - Recolor every glass surface from a hue + chroma pair or a built-in preset
- Theme Support - Built-in light/dark mode with automatic theme switching
- Enhanced Effects - Glow, shimmer, ripple, and gradient animations
- Fully Customizable - Per-component glass effect customization
- Package Manager Support - Install with pnpm, yarn, npm, or bun
- TypeScript - Fully typed components for better developer experience
- Accessible - Built on Radix UI primitives for accessibility
- Tailwind CSS - Utility-first styling with CSS variables
Sistine is a namespaced shadcn registry. Add the @sistine namespace to your project's components.json once:
{
"registries": {
"@sistine": "https://raw.githubusercontent.com/Weekendsuperhero-io/sistine/main/public/r/{name}.json"
}
}Then add any component with the shadcn CLI using your preferred package manager:
pnpm:
pnpm dlx shadcn@latest add @sistine/buttonyarn:
yarn dlx shadcn@latest add @sistine/buttonnpm:
npx shadcn@latest add @sistine/buttonbun:
bunx shadcn@latest add @sistine/buttonAfter installation, import and use components in your project:
import { Button } from "@/components/ui/button"
import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"
export function Example() {
return (
<div>
<Button effect="glow">
Click me
</Button>
<Card material="frosted" border gradient>
<CardHeader>
<CardTitle>Beautiful Card</CardTitle>
</CardHeader>
<CardContent>Your content here</CardContent>
</Card>
</div>
)
}Note: The import path depends on your project's component directory configuration. By default, shadcn CLI installs components to
@/components/ui/.
Visit the full documentation for:
- Complete component reference
- Installation guides
- Customization examples
- Theme configuration
- Glass effect customization
Explore and test components interactively with Storybook:
# Start Storybook
pnpm storybook
# Build Storybook (static)
pnpm build-storybookStorybook provides:
- β¨ Live component previews
- ποΈ Interactive controls for all props
- π Auto-generated documentation
- βΏ Accessibility testing
- π Theme switching
- π± Responsive viewport testing
Visit http://localhost:6006 after starting Storybook.
Every component lives in a single tree β components/ui/[name].tsx (published under registry/ui/) β and draws its surface from the material system in lib/material.ts:
- Four materials β
glass,frosted,crystal,opaqueβ via thematerialprop. Leave it off and the surface is adaptive: it follows the page'sdata-glassstyle; an explicit material pins the element under any page style. - Orthogonal axes β
border,veil,diffuse,gradient,glow,sheenβ layered on top of any material. Booleans with typed refinements:border="rim" | "frame"(2px / 4px),diffuse="stained"(dyed glass),glow="lg". - Hover effects β
effect="glow | shimmer | ripple | lift | scale"fromlib/hover-effects.ts. - Accessibility from Radix UI primitives, fully typed, and themed through CSS tokens.
Components call materialSurface() from lib/material.ts instead of hardcoding recipe class strings, so the material β markup mapping lives in one place.
Every color is authored in oklch in app/theme/ (aggregated by app/globals.css; full reference: docs/color-tokens.md). The whole glass system is driven by the tint variables β change them, or set a preset on <html data-glass-tint="β¦">, to recolor every surface, border, and accent at once:
:root {
--glass-tint-h: 250; /* hue 0β360 */
--glass-tint-c: 0.018; /* chroma β the "how colorful" master (0 = neutral) */
}Built-in presets ship as [data-glass-tint] blocks: jewels (single hue β neutral, rose, carnelian, amber, bone, peridot, emerald, turquoise, aquamarine, sapphire, amethyst, tourmaline) and frescoes (multi-hue β sistine, muse, aurora, gloaming). Switch the surface treatment with data-glass on <html>: glass (default), frosted, crystal, opaque. Components also take a glow axis prop β a tint-tracking colored halo, documented in docs/glow.md.
Presets are turnkey, pure CSS. Set the attribute and toggle .dark (e.g. next-themes) β every preset and fresco carries its own day + night values, the scene backgrounds flip with the mode, and static text baselines keep all four materials legible with no JavaScript. Optionally install and mount <AutoForeground /> (once, in your root layout) to upgrade those baselines to exact APCA-solved foregrounds that re-band live as the tint, mode, or surface knobs change β it refines, it is never required.
Pass CSS-variable overrides through the glassVars helper (the successor to the old glass={{β¦}} prop β it emits --glass-* / --srf-* custom properties that route through the token system):
import { glassVars } from "@/lib/material"
<Card style={glassVars({ tintH: 293, blur: 30, opacity: 0.3 })}>
Content
</Card>- Button, Input, Textarea, Label
- Checkbox, Switch, Radio Group
- Select, Input OTP
- Card, Badge, Avatar, Alert
- Skeleton, Separator, Table
- Dialog, Alert Dialog, Popover
- Tooltip, Hover Card, Sheet
- Drawer, Sidebar
- Tabs, Accordion, Breadcrumb
- Dropdown Menu, Navigation Menu
- Pagination, Scroll Area
- Calendar, Chart, Command
- Slider, Toggle, Toggle Group
And more! See the full component list.
- Node.js 18+
- pnpm, yarn, npm, or bun
# Clone the repository
git clone https://github.com/Weekendsuperhero-io/sistine.git
cd sistine
# Install dependencies
pnpm install
# Start development server
pnpm dev
# Start Storybook (interactive playground)
pnpm storybook
# Build the project
pnpm build
# Build the registry
pnpm registry:buildsistine/
βββ app/ # Next.js app directory
βββ components/ # Shared components
βββ lib/ # Utilities and helpers
βββ public/ # Static assets
βββ registry/
β βββ ui/ # Components (one tree, material system)
βββ stories/ # Storybook stories
βββ registry.json # Component registry
Deploy both the documentation site and Storybook to Vercel:
Quick Start:
- Deploy main site: Import your repo at vercel.com/new
- Deploy Storybook: Import the same repo again with these settings:
- Build Command:
pnpm build-storybook - Output Directory:
storybook-static
- Build Command:
- Set environment variable
NEXT_PUBLIC_STORYBOOK_URLin main site - Redeploy main site
Both deploy from the same repo β the main site (default settings) and Storybook (build command
pnpm build-storybook, outputstorybook-static).
# Build main site
pnpm build
# Build Storybook
pnpm build-storybook
# Test builds locally
pnpm start # Serves main site on http://localhost:3000
npx http-server storybook-static # Serves Storybook on http://localhost:8080We welcome contributions! Please see CONTRIBUTING.md for guidelines.
This project is licensed under the MIT License.
Made with β€οΈ by Weekend Superhero LLC Β· Based on Glass UI by Crenspire Technologies (MIT)