Built on shadcn/ui

YouTube Player
Components

Copy-paste YouTube IFrame player components. Zero branding. Full control. Built for shadcn.

npx shadcn@latest add https://ytcn.dev/r/ytcn

Zero YouTube Branding

Thumbnail-first loading, iframe offset, and cover div eliminate all YouTube chrome before a single frame plays.

Copy, Don't Install

One CLI command copies components into your project. You own every line. Modify anything without forking.

shadcn/ui Native

Built on Button, Slider, and Popover. Uses your existing design tokens. Zero new dependencies.

Autoplay Without Flicker

Thumbnail shown instantly while iframe loads in background. Seamless fade when video is ready. No black screen.

Fully Typed

Strict TypeScript throughout. Every prop, state field, and control method has explicit types and JSDoc.

SSR Compatible

All components are "use client". Safe to import from Server Components. No window access at module level.

Simple to use. Powerful to extend.

Drop in a one-liner or go fully headless with the hook API.

page.tsx
import { YtcnPlayer } from "@/components/ytcn/ytcn-player"

export default function VideoPage() {
  return (
    <YtcnPlayer videoId="dQw4w9WgXcQ" />
  )
}

Everything you need

Each component is independently copyable.

ytcn-player

Full composed player

ytcn-controls

Controls bar

ytcn-progress

Timeline scrub bar

ytcn-volume

Volume + mute

ytcn-speed

Speed picker

ytcn-fullscreen

Fullscreen toggle

ytcn-overlay

Click-to-play

ytcn-loader

Loading state

Ready to build?

Get started with ytcn in under 2 minutes. Read the docs or jump straight into the code.