Skip to content
Onycx-ui
ESC

Use Onycx UI

Browse 62 React components, try them with your own settings, and add the ones you need to your project.

Requirements

  • Start with a React 19 project that supports TypeScript.
  • Set up Tailwind CSS v4 so it picks up classes in your component files.
  • Check the component’s installation section for extra packages such as GSAP, Motion, or Lenis.

Install a component

Copy a customized component

  1. Open a component and use Customize to try your settings in the preview.
  2. Install any packages listed under Installation.
  3. In Code, open the component’s TSX tab and copy it into your project. The file includes your settings as prop defaults.
  4. Open Usage for an import and JSX example. Adjust the import to match where you saved the file.
example.tsx
import { PillIconButton } from "@/components/onycx/pill-icon-button";​export default function Example() {  return <PillIconButton label="Explore the catalog" href="/catalog" />;}

Install with shadcn

If your project already uses shadcn, run the command from the component’s installation section to add its default source. Here’s the command for Pill Icon Button.

npx shadcn@latest add https://ui.onycx.dev/r/pill-icon-button.json

Find the full list of installable components in /r/registry.json.

Fonts

Components inherit your page font. To match the previews, the optional Next.js example below loads Inter for body text and Bodoni Moda for serif accents.

app/globals.css
@import "tailwindcss";​:root {  /* Onycx components read these with safe fallbacks. */  /* Italic accent words. Swap in any serif you like, e.g. Playfair Display or Fraunces. */  --font-serif-accent: var(--font-bodoni), "Bodoni Moda", Didot, Georgia, serif;}body { font-family: var(--font-inter), system-ui, sans-serif; }
app/layout.tsx
import { Inter, Bodoni_Moda } from "next/font/google";import "./globals.css";​const sans = Inter({ subsets: ["latin"], variable: "--font-inter" });const accent = Bodoni_Moda({ subsets: ["latin"], style: ["normal", "italic"], variable: "--font-bodoni" });​export default function RootLayout({ children }: { children: React.ReactNode }) {  return (    <html lang="en" className={`${sans.variable} ${accent.variable}`}>      <body>{children}</body>    </html>  );}

Smooth scroll

Scroll scenes use GSAP ScrollTrigger and work with native scrolling. If you want inertial wheel scrolling, mount Smooth Scroll once in your layout. It feeds Lenis into the GSAP ticker so every scene reads one clock, keeps native momentum on touch devices and stops entirely for reduced-motion visitors. Never mount two smooth-scroll engines.

Reduced motion

Many animated components check prefers-reduced-motion. Pinned scenes switch to stacked or click-through layouts, scrubs and parallax stop, loaders are skipped and marquees sit still. The catalog and docs are readable without JavaScript. Interactive previews need JavaScript. Pair this with the Motion Toggle to give visitors an on-page switch.

Testing different screen sizes

Type uses clamp(), grids use minmax(0, 1fr), and components that live in unknown widths measure their own container. Pinned and sticky scenes only engage above a minimum width and height, so short laptop screens and phones get a layout that scrolls normally. Use the workbench's desktop, tablet and phone frames to check your tweaks.

Accessibility

Buttons act and links navigate. Toggles use aria-pressed, tab sets support arrow keys, dialogs trap and return focus, carousels announce their position through live regions, and inactive scenes are inert. Aim for touch targets of at least 44px in the finished interface. Automated checks are a first pass; test with a keyboard and a screen reader in your own content.

Add to the catalog

If you’re working on the catalog itself, create a folder for the component in src/registry/items/. Add the component file, demo.tsx for its preview, and meta.ts for its description and controls. Run npm run check to rebuild the index and verify the export.

Images and licenses

Copied files use embedded sample illustrations. Supply your own media URLs for production, including a video source if you use Framed Video Hero. The component source is MIT licensed.