Murasaki

Styling

Tailwind CSS + @murasakijs/ui, a shadcn-style component library.

The scaffold ships Tailwind CSS and @murasakijs/ui — a shadcn/ui-style component library built on Radix primitives, styled with the same cn() + class-variance-authority conventions shadcn/ui users already know. Every component it ships is documented, live, in the Components section — this guide only covers how the library is wired into a scaffolded app.

import { Button } from "@murasakijs/ui";export function ButtonDemo() {return <Button>Button</Button>;}

Setup

Import the stylesheet once (the scaffold already does this in the root layout), and extend your Tailwind config with the shared preset:

src/app/layout.tsx
import '@murasakijs/ui/styles.css'
import './globals.css'
tailwind.config.ts
import type { Config } from 'tailwindcss'

export default {
  presets: [require('@murasakijs/ui/tailwind-preset')],
  content: [
    './src/**/*.{ts,tsx}',
    './node_modules/@murasakijs/ui/dist/**/*.js',
  ],
  darkMode: ['selector', '[data-theme="dark"]'],
} satisfies Config

Components

Import components directly from @murasakijs/ui:

import { Button, Card, CardHeader, CardTitle, CardContent } from '@murasakijs/ui'

function Example() {
  return (
    <Card>
      <CardHeader>
        <CardTitle>Try it out</CardTitle>
      </CardHeader>
      <CardContent>
        <Button variant="outline">Click me</Button>
      </CardContent>
    </Card>
  )
}

The package currently ships:

  • Layout & contentCard, Separator, Accordion, Tabs, ScrollArea, Table, Skeleton
  • Forms & inputsButton, Input, Textarea, Label, Checkbox, Switch, RadioGroup, Select
  • OverlaysDialog, Sheet, Popover, Tooltip, DropdownMenu, Command (a command palette)
  • FeedbackAlert, Badge, Progress, Toast / Toaster (+ useToast)
  • MiscAvatar, cn (the clsx + tailwind-merge class helper)

Button supports variant (default / secondary / outline / ghost / destructive / link) and size (default / sm / lg / icon) props, plus asChild to render as a different element (Radix Slot) — the same pattern as the rest of the library.

Every one of these is documented on its own page under Components, with a live, interactive preview and the full prop table — not just the short list above.

@murasakijs/ui is not required — it's Tailwind + Radix under the hood, so you can swap in your own components or another library instead.

Next

Improve this page on GitHub

On this page