PXLKIT UI KIT

A React component kit built on three promises. Surface system — flip every component between an 8-bit pixel aesthetic and a flat linear one with a single prop, same API either way. Accessibility-first — WAI-ARIA roles, keyboard navigation, focus rings, and reduced-motion fallbacks ship on every interactive, not bolted on later. Batteries-included — DataTable, Stepper, Sidebar, Timeline, Calendar, Charts, OTPInput and 103+ more are already in the box. Use the sidebar to browse all 111 components and the PixelToast guide.

111 componentspixel ↔ linear surfacetypescript-firstWAI-ARIA baselinezero runtime deps

Components

grid

111

Icon Packs

package

6

Design Tokens

sparkle-small

6 tones

Fully Custom

check

100%

GETTING STARTED

Three steps and you're rendering. Install @pxlkit/ui-kit, import its stylesheet alongside Tailwind, and pull components from the same package. Every primitive accepts the shared , size, and surface contract — so what you learn on applies to , , and the other 108.

Quick Starttsx
// 1. Setup your Tailwind CSS file (e.g., index.css)
// @import "tailwindcss";
// @import "@pxlkit/ui-kit/styles.css";
// @source "../node_modules/@pxlkit/ui-kit";
// 2. Import components in your React app
import { PixelButton, PixelCard, PixelInput } from '@pxlkit/ui-kit';
import { PxlKitIcon } from '@pxlkit/core';
import { Trophy } from '@pxlkit/gamification';
import { Search } from '@pxlkit/ui';
// Button with icon
<PixelButton tone="green" iconLeft={<PxlKitIcon icon={Trophy} size={16} />}>
Create Quest
</PixelButton>
// Input with icon
<PixelInput
label="Search"
icon={<PxlKitIcon icon={Search} size={16} />}
placeholder="Find icons..."
/>

Common API Surface

These props are accepted by every UI-kit component where applicable. Each component's individual props table below also lists them inline — so each table is a complete, self-contained reference. This shared block remains as a quick overview.

PropTypeDefaultDescription
tone"green" | "cyan" | "gold" | "red" | "purple" | "pink" | "neutral"variesColor scheme — shared across all components
size"sm" | "md" | "lg""md"Controls height, padding, and font size
surface"pixel" | "linear"inherits from PxlKitSurfaceProvider, falls back to "pixel"Visual aesthetic. Per-component override of the global surface — see Surface System.
disabledbooleanfalseStandard HTML disabled state — applies to every interactive component (buttons, inputs, switches, sliders, segmented, etc.).
iconLeft / iconRightReactNodeIcon slots flanking the label. Accepted by PixelButton; PxlKitButton/PixelSplitButton use the single `icon` slot. Standalone inputs use the `icon` prop instead.
labelstringAccessible label for inputs/controls (PixelInput, PixelSelect, PixelCheckbox, PixelSwitch, PixelSlider, PixelRadioGroup, …). Buttons use `children` for their visible text, not `label`.
childrenReactNodeRequired for container components (PixelCard, PixelModal, PixelTooltip, animations, etc.). Listed here once; not repeated in each table.
classNamestringExtra CSS class names merged onto the outer element.

DESIGN TOKENS

All components use CSS custom properties for theming. Override these variables to customize the entire kit. Dark and light themes are built in via the .dark class. Colors are applied through the tone prop on components like , , and .

Colors

Green

--retro-green

Cyan

--retro-cyan

Gold

--retro-gold

Red

--retro-red

Purple

--retro-purple

Typography

Press Start 2P

Titles & accents — font-pixel

JetBrains Mono

Code & UI labels — font-mono

Inter

Body text — font-body


Surfaces

Background

--retro-bg

Surface

--retro-surface

Card

--retro-card

Border

--retro-border

SURFACE SYSTEM

v1.4.0

Every UI-kit component has two visual surfaces: the retro 8-bit "pixel" aesthetic (default — sharp pixel borders, pressed shadows, mono fonts) and a flatter, more modern "linear" aesthetic (subtle 1px borders, rounded corners, sans fonts). You toggle it globally with <PxlKitSurfaceProvider>, or per-component with the surface prop. Useful for embedding Pxlkit into a non-retro product without rewriting the components.

Side-by-side

surface="pixel" (default)

v1.4

surface="linear"

v1.4
Surface — Setup & overridetsx
import { PxlKitSurfaceProvider, PixelButton, PixelCard } from '@pxlkit/ui-kit';
// === GLOBAL toggle: wrap your whole app once ===
export default function RootLayout({ children }) {
return (
<html>
<body>
<PxlKitSurfaceProvider surface="linear">
{children}
</PxlKitSurfaceProvider>
</body>
</html>
);
}
// === LOCAL override: one component in a different mode ===
<PxlKitSurfaceProvider surface="pixel">
<PixelCard title="Retro card">
{/* This one button breaks the pixel surface */}
<PixelButton tone="green" surface="linear">Modern button</PixelButton>
</PixelCard>
</PxlKitSurfaceProvider>

LOCALE / TURKISH SUPPORT

v1.3.0

PxlKit includes built-in locale support for Turkish (tr) and English (en). Turkish requires special handling because of the dotted/dotless i distinction, and the latin-ext Google Fonts subset for characters like ğ, ş, ı, İ, ç, ö, ü.

Why Turkish Needs Special Handling

InputEnglish UppercaseTurkish UppercaseNote
iIİ (U+0130)Dotted uppercase İ in Turkish
ı (U+0131)IIDotless ı is unique to Turkish
istanbulISTANBULİSTANBULComplete word difference

Live Demo — Turkish vs English

locale="en"

ISTANBUL IŞLEMLERI

IG
JD
locale="tr"

İSTANBUL İŞLEMLERİ

İG
JD

Notice how the section title "istanbul işlemleri" renders differently: English shows ISTANBUL ISLEMLERI while Turkish correctly shows İSTANBUL İŞLEMLERİ. The avatar initials also change — "İG" (Turkish) vs "IG" (English) for "işıl gündüz".

Turkish Characters — Font Preview

Press Start 2P (font-pixel)

Ç Ğ İ Ö Ş Ü

ç ğ ı ö ş ü


JetBrains Mono (font-mono)

Ç Ğ İ Ö Ş Ü

ç ğ ı ö ş ü


Inter (font-body)

Ç Ğ İ Ö Ş Ü

ç ğ ı ö ş ü


Turkish Pangram (font-pixel)

Pijamalı hasta yağız şoföre çabucak güvendi

Turkish Locale — Complete Setup Guidetsx
// === STEP 1: Install & import ===
import { PxlKitLocaleProvider } from '@pxlkit/ui-kit';
// === STEP 2: Wrap your app (React / Next.js) ===
// For a standard React app (Vite, CRA, etc.):
function App() {
return (
<PxlKitLocaleProvider locale="tr">
<MyApp />
</PxlKitLocaleProvider>
);
}
// For Next.js App Router — also set lang on <html>:
// app/layout.tsx
export default function RootLayout({ children }) {
return (
<html lang="tr">
<body>
<PxlKitLocaleProvider locale="tr">
{children}
</PxlKitLocaleProvider>
</body>
</html>
);
}
// === STEP 3: Google Fonts — ensure latin-ext subset ===
// In your CSS file or HTML <head>:
// @import url('https://fonts.googleapis.com/css2?family=Press+Start+2P&family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500;600;700&subset=latin,latin-ext&display=swap');
// Or generate the URL dynamically:
import { buildGoogleFontsUrl } from '@pxlkit/ui-kit';
const fontsUrl = buildGoogleFontsUrl('tr');
// → includes &subset=latin,latin-ext
// === STEP 4: Use locale-aware text in custom components ===
import { usePxlKitLocale, toLocaleUpper } from '@pxlkit/ui-kit';
function MyTitle({ text }: { text: string }) {
const { upper } = usePxlKitLocale();
return <h1 className="font-pixel">{upper(text)}</h1>;
// "istanbul" → "İSTANBUL" when locale is "tr"
}
// Or use the standalone function:
toLocaleUpper('istanbul', 'tr'); // → "İSTANBUL"
toLocaleUpper('istanbul', 'en'); // → "ISTANBUL"

PIXELBUTTON

button
Versatile button with multiple tones, sizes, icon slots, loading spinner, and ghost variant. Supports all native button attributes. Combine with for icon-only actions or for split actions.

TONES

SIZES

VARIANTS & STATES

<PixelButton tone="green" iconLeft={<PxlKitIcon icon={Trophy} size={16} />}>
Primary Action
</PixelButton>
<PixelButton tone="cyan" variant="ghost">
Ghost Button
</PixelButton>
<PixelButton tone="red" loading>
Processing...
</PixelButton>

PXLKITBUTTON

pxlkitbutton
Square icon-only button with accessible label via aria-label and title. Ideal for toolbar actions. For labeled buttons, see .
<PxlKitButton label="Edit" icon={<PxlKitIcon icon={Edit} size={16} />} tone="cyan" />
<PxlKitButton label="Copy" icon={<PxlKitIcon icon={Copy} size={16} />} tone="green" />

PIXELSPLITBUTTON

splitbutton
A compound button with a primary action and a for secondary options. Dropdown closes on click-outside. Powered by the same tone system as .
<PixelSplitButton
label="Deploy"
tone="purple"
options={[
{ value: 'preview', label: 'Preview' },
{ value: 'production', label: 'Production' },
]}
onSelect={(v) => console.log(v)}
/>

PIXELINPUT

input
Text input with optional label, hint, error message, icon slot, and tone-based focus ring. Supports all native input attributes. For passwords, see . For multi-line, see .
<PixelInput
label="Search"
icon={<PxlKitIcon icon={Search} size={16} />}
placeholder="Find components..."
tone="cyan"
/>
<PixelInput label="Email" error="Invalid email address" />

PIXELPASSWORDINPUT

passwordinput
Password field with a custom show/hide toggle button. No native browser password reveal UI. Extends the same field shell as .
<PixelPasswordInput label="Password" placeholder="Enter your password" />

PIXELTEXTAREA

textarea
Multi-line text input with label, hint, and error support. Uses the same FieldShell wrapper as .
<PixelTextarea label="Bio" placeholder="Tell us about yourself..." />

PIXELSELECT

select
Fully custom dropdown select — no native <select> element. Features keyboard navigation (Arrow keys, Enter, Escape), click-outside close, and check mark indicator. For a simpler toggle, see . For action menus, see .
<PixelSelect
label="Icon Pack"
value={pack}
onChange={setPack}
options={[
{ value: 'ui', label: 'UI' },
{ value: 'gamification', label: 'Gamification' },
{ value: 'social', label: 'Social' },
]}
/>

PIXELCHECKBOX

checkbox
Custom checkbox with a pixel-art check mark SVG — no native checkbox visible. Fully accessible with role='checkbox' and keyboard support. For toggling, also see .
<PixelCheckbox
label="Enable animations"
checked={enabled}
onChange={setEnabled}
tone="green"
/>

PIXELRADIOGROUP

radiogroup
Fully custom radio group with pixel-art dot indicators. Built with role='radiogroup' and role='radio' for accessibility. For a more compact variant, see .
Framework
<PixelRadioGroup
label="Framework"
value={framework}
onChange={setFramework}
options={[
{ value: 'react', label: 'React' },
{ value: 'vue', label: 'Vue' },
{ value: 'svelte', label: 'Svelte' },
]}
/>

PIXELSWITCH

switch
Toggle switch with smooth transition animation. Uses role='switch' with aria-checked for screen readers. For binary choices with a label, also consider .
<PixelSwitch label="Auto refresh" checked={on} onChange={setOn} />

PIXELSLIDER

slider
Fully custom range slider — no native <input type="range">. Supports pointer events for mouse and touch, keyboard arrows, and pointer capture for smooth dragging. View the current value in real-time via .
Animation speed66
Progress72
Gold range45
Fine step66
<PixelSlider label="Volume" value={vol} onChange={setVol} min={0} max={100} />
<PixelSlider label="Opacity" value={opacity} onChange={setOpacity} tone="gold" />

PIXELSEGMENTED

segmented
Segmented control for toggling between a set of predefined options. Great for view modes and filters. For more choices, see or .

Layout density

<PixelSegmented
label="Density"
value={density}
onChange={setDensity}
options={[
{ value: 'compact', label: 'Compact' },
{ value: 'comfortable', label: 'Comfortable' },
]}
/>

PIXELCARD

card
Content card with icon header, body, and optional footer. Subtle hover border effect. Use with in the footer for card actions. For metric cards, see .
trophy

Gamification Pack

RPG icons, progress bars, rewards, and game UI elements ready to use.
heart

Social Pack

Emotions, interactions, and communication elements for modern apps.
<PixelCard
title="Gamification"
icon={<PxlKitIcon icon={Trophy} size={16} />}
footer={<PixelButton tone="gold" size="sm">Use Pack</PixelButton>}
>
RPG icons, rewards, and game UI elements.
</PixelCard>

PIXELSTATCARD

statcard
Compact metric card for dashboards. Displays a value with label, icon, and optional trend indicator. For content cards, see .

Total Icons

package

204

+12 new

Components

grid

111

100% typed

Downloads

coin

8.2k

+24%

Stars

star

1.4k

trending

<PixelStatCard label="Downloads" value="12.4k" tone="green" trend="+15% this week" />

PIXELTABLE

table
Data table with striped rows, hover highlight, and horizontal scroll on small screens. Accepts ReactNode cell values for rich content like .
ComponentCategoryStatus
PixelButtonActionsStable
PixelSelectInputsStable
PixelTableData DisplayNew
PixelAvatarData DisplayNew
PixelSkeletonFeedbackNew
<PixelTable
columns={[
{ key: 'name', header: 'Component' },
{ key: 'category', header: 'Category' },
{ key: 'status', header: 'Status' },
]}
data={[
{ name: 'PixelButton', category: 'Actions', status: <PixelBadge tone="green">Stable</PixelBadge> },
{ name: 'PixelTable', category: 'Data', status: <PixelBadge tone="gold">New</PixelBadge> },
]}
/>

PIXELAVATAR

avatar
Avatar component that renders initials fallback when no image is provided. Pixel-art aesthetic with border.
JD
AB
P
RT
GU
<PixelAvatar name="Joangel De La Rosa" tone="green" />
<PixelAvatar name="AI Bot" tone="purple" size="lg" />

PIXELBADGE

badge
Read-only status indicator with tone variants. Use inside cells, headers, or alongside any text for contextual labels.
StableBetaDeprecatedv2.0ExperimentalArchived
<PixelBadge tone="green">Stable</PixelBadge>
<PixelBadge tone="gold">Beta</PixelBadge>
<PixelBadge tone="red">Deprecated</PixelBadge>

PIXELCHIP

chip
Interactive tag with optional remove button. Use for filter selections, tag lists, or removable labels. For static labels, see .
reacttypescripttailwindremovabledeprecated
<PixelChip label="react" tone="cyan" />
<PixelChip label="removable" tone="gold" onRemove={() => {}} />

PIXELCODEINLINE

codeinline
Inline code highlight with monospace font and tone border. Use inside paragraphs, descriptions, and props documentation to reference code tokens.

Use useState for local state, PxlKitIcon for icons, green gold red neutral

<PixelCodeInline tone="cyan">useState</PixelCodeInline>
<PixelCodeInline tone="purple">PxlKitIcon</PixelCodeInline>

PIXELKBD

kbd
Keyboard shortcut indicator rendered as a styled key cap. Combine multiple instances for multi-key shortcuts. Pairs well with for shortcut hints.
Ctrl+K·+Shift+P·Esc·Tab·Enter
<PixelKbd>Ctrl</PixelKbd> + <PixelKbd>K</PixelKbd>
<PixelKbd></PixelKbd> + <PixelKbd>Shift</PixelKbd> + <PixelKbd>P</PixelKbd>

PIXELCOLORSWATCH

colorswatch
Color swatch preview for . Renders a color box with name and CSS variable reference. Use in theme documentation or settings panels.

Green

--retro-green

Cyan

--retro-cyan

Gold

--retro-gold

Red

--retro-red

Purple

--retro-purple

<PixelColorSwatch name="Green" cssVar="--retro-green" />
<PixelColorSwatch name="Cyan" cssVar="--retro-cyan" />

PIXELALERT

alert
Alert banner with title, message, optional icon, and action slot. Supports all variants for different severity levels. Pair with in the action slot.
<PixelAlert
tone="green"
icon={<PxlKitIcon icon={CheckCircle} size={16} />}
title="Build Success"
message="Package compiled successfully."
action={<PixelButton tone="green" size="sm">View Logs</PixelButton>}
/>

PIXELPROGRESS

progress
Determinate progress bar with optional label and value display. Smooth animated transitions. Works great alongside to show computed progress.
Build progress72%
Animation speed66%
Storage used45%
CPU load90%
<PixelProgress value={72} tone="green" label="Upload Progress" />

PIXELSKELETON

skeleton
Loading placeholder with pulse animation. Use to indicate content is being fetched. Great for placeholder state in layouts.
<PixelSkeleton width="200px" height="1rem" />
<PixelSkeleton width="40px" height="40px" rounded />

PIXELEMPTYSTATE

emptystate
Placeholder for empty lists, search results, or zero-data views. Supports icon, description, and .

No results found

Adjust your filters or create a new custom component for this kit.

<PixelEmptyState
title="No results"
description="Try adjusting your search or filters."
icon={<PxlKitIcon icon={Search} size={20} />}
action={<PixelButton tone="green">Reset Filters</PixelButton>}
/>

PIXELTOAST

toast
The low-level <PixelToast> component shipped from @pxlkit/core. It renders one toast at a fixed position; you control visibility and lifecycle. For most apps you'll want the useToast() hook below — it stacks multiple toasts and handles timers for you. The old /toast route redirects to this section.
Duration (ms)2500
10006000

Detailed integration docs are also available in /docs#toast-notifications.

import { useToast } from '@/components/ToastProvider';
import { CheckCircle, WarningTriangle } from '@pxlkit/feedback';
import { FireSword } from '@pxlkit/gamification';
function SaveButton() {
const { toast, success, warning } = useToast();
return (
<>
<PixelButton
onClick={() => success('SAVED', 'Changes synced to server', CheckCircle)}
>
Save
</PixelButton>
<PixelButton
onClick={() =>
toast({
tone: 'warning',
title: 'LOW HEALTH',
message: 'Use a potion now',
position: 'bottom-right',
duration: 3500,
animatedIcon: FireSword,
})
}
>
Show Warning Toast
</PixelButton>
</>
);
}

USETOAST()

usetoast()
Application-level hook that manages a stack of <PixelToast> instances. Mount the matching <ToastProvider> once at the root (this site does it in layout.tsx). The hook's methods auto-handle ids, timers, and unmount — you only worry about the message. Returns the API listed below.

Implementation lives at apps/web/src/components/ToastProvider.tsx in this repo. Copy that file (or write your own equivalent) into your project to get the multi-toast stack on top of the low-level <PixelToast> primitive documented above.

// 1. Mount the provider once at the root
import { ToastProvider } from '@/components/ToastProvider';
export default function RootLayout({ children }) {
return (
<html>
<body>
<ToastProvider>
{children}
</ToastProvider>
</body>
</html>
);
}
// 2. Anywhere inside, call useToast() and use it
import { useToast } from '@/components/ToastProvider';
import { CheckCircle, WarningTriangle } from '@pxlkit/feedback';
import { FireSword } from '@pxlkit/gamification';
function SaveButton() {
const { toast, success } = useToast();
return (
<>
<PixelButton onClick={() => success('SAVED', 'Changes synced', CheckCircle)}>
Save
</PixelButton>
<PixelButton
onClick={() =>
toast({
tone: 'warning',
title: 'LOW HEALTH',
message: 'Use a potion now',
position: 'bottom-right',
duration: 3500,
animatedIcon: FireSword,
})
}
>
Show Warning Toast
</PixelButton>
</>
);
}

PIXELTABS

tabs
Tab navigation with optional icon support per tab. Uses proper ARIA tablist and tabpanel roles. For collapsible panels, see .
Quick start guide and component summary for the Pxlkit UI Kit.
<PixelTabs items={[
{ id: 'overview', label: 'Overview', content: '...' },
{ id: 'api', label: 'API', content: '...' },
{ id: 'tokens', label: 'Tokens', content: '...' },
]} />

PIXELACCORDION

accordion
Collapsible content sections with pixel-art chevron indicator. Supports single or multiple open panels. For tabbed navigation, see .
Pass any PxlKitIcon or AnimatedPxlKitIcon as a ReactNode through iconLeft, iconRight, or icon props. All Pxlkit icon packs are supported.
<PixelAccordion items={[
{ id: '1', title: 'How to use icons', content: '...' },
{ id: '2', title: 'Custom themes', content: '...' },
]} />

PIXELCOLLAPSIBLE

collapsible
Simple toggle panel with chevron indicator. Use for optional detail sections, prop references, or progressive disclosure. For multi-panel groups, see .

This panel starts expanded. Click the label to collapse it.

<PixelCollapsible label="Show details">
<p>Hidden content revealed on toggle.</p>
</PixelCollapsible>
<PixelCollapsible label="Open by default" defaultOpen tone="green">
<p>Visible from the start.</p>
</PixelCollapsible>

PIXELBREADCRUMB

breadcrumb
Navigation breadcrumb with pixel-art chevron separators. Items can be links, buttons, or plain text. Used at the top of this page and in headers.
<PixelBreadcrumb items={[
{ label: 'Home', href: '/' },
{ label: 'Docs', href: '/docs' },
{ label: 'UI Kit', active: true },
]} />

PIXELPAGINATION

pagination
Page navigation with prev/next buttons and numbered pages. Disables prev/next at boundaries. Pairs well with for paginated data.
<PixelPagination page={page} total={5} onChange={setPage} />

PIXELMODAL

modal
Modal dialog with backdrop blur, Escape key close, backdrop click close, and body scroll lock. Rendered with proper ARIA dialog attributes. Great with for confirm/cancel actions.
const [open, setOpen] = useState(false);
<PixelButton onClick={() => setOpen(true)}>Open Modal</PixelButton>
<PixelModal open={open} title="Confirm Action" onClose={() => setOpen(false)}>
<p>Are you sure you want to proceed?</p>
<PixelButton tone="green" onClick={() => setOpen(false)}>Confirm</PixelButton>
</PixelModal>

PIXELTOOLTIP

tooltip
Informational tooltip that appears on hover and focus. Supports four positions. Wrap any element — works perfectly with .
<PixelTooltip content="Edit this item" position="top">
<PxlKitButton label="Edit" icon={<PxlKitIcon icon={Edit} size={16} />} />
</PixelTooltip>

PIXELDROPDOWN

dropdown
Action menu dropdown with click-outside close. Ideal for contextual actions and quick navigation. For form selection, see . For split actions, see .
<PixelDropdown
label="Actions"
items={[
{ value: 'copy', label: 'Copy snippet' },
{ value: 'preview', label: 'Open preview' },
{ value: 'delete', label: 'Delete item' },
]}
onSelect={(v) => console.log(v)}
/>

PIXELSECTION

section
Content section wrapper with title and optional subtitle. Provides consistent spacing and border styling. Used internally to group components on this page. Combine with for visual separation.

EXAMPLE SECTION

This is a wrapped content area with border and padding.

<PixelSection title="Actions" subtitle="Interactive button components.">
{children}
</PixelSection>

PIXELDIVIDER

divider
Horizontal divider with optional centered label. Great for separating content sections. Used throughout this page between categories. Pair with .

<PixelDivider />
<PixelDivider label="Section" tone="green" spacing="lg" />

PIXELBAREBUTTON

barebutton
Unstyled <button> wrapper with forwardRef support and type="button" default. Use as the base for custom styled buttons.

Renders an unstyled <button type="button"> element. Apply your own classes to build custom interactions without inheriting Pxlkit button styles.

<PixelBareButton onClick={() => alert('click')} className="px-3 py-1 bg-retro-green/20 rounded">
Custom Button
</PixelBareButton>

PIXELBAREINPUT

bareinput
Unstyled <input> wrapper with forwardRef support. Use as the base for custom text fields or form controls.

Renders an unstyled <input> element. For styled text fields with labels, hints, and errors, use .

<PixelBareInput type="text" placeholder="Unstyled input..." className="border px-2 py-1" />

PIXELBARETEXTAREA

baretextarea
Unstyled <textarea> wrapper with forwardRef support. Use for custom multi-line inputs.

Renders an unstyled <textarea> element. For styled multi-line input with labels and errors, use .

<PixelBareTextarea rows={3} placeholder="Unstyled textarea..." className="border px-2 py-1 w-full" />

TRIGGER MODES

all animations

Every animation component accepts a trigger prop that controls when it plays. The default "mount" mode preserves backward compatibility — the animation fires on render.

mount

Plays immediately on render (default).

hover

Plays while the pointer is over the element.

click

Plays once per click. Re-click to replay.

focus

Plays while the element has focus-within.

inView

Plays when scrolled into the viewport (IntersectionObserver).

boolean

Controlled mode — true = playing, false = idle.

// Plays on hover
<PixelBounce trigger="hover">
<PxlKitIcon icon={Star} size={20} />
</PixelBounce>
// Plays once per click
<PixelShake trigger="click" repeat={2}>
<PixelBadge tone="red">Error</PixelBadge>
</PixelShake>
// Controlled by parent state
const [active, setActive] = useState(false);
<PixelPulse trigger={active}>
<PixelBadge tone="green">Live</PixelBadge>
</PixelPulse>
// Fade in when scrolled into view
<PixelFadeIn trigger="inView" duration={600}>
<PixelCard title="Hello">Visible!</PixelCard>
</PixelFadeIn>
// Callback when animation completes
<PixelFadeIn trigger="click" onComplete={() => console.log('done!')}>
<p>Click me</p>
</PixelFadeIn>

HOVER

star

CLICK

Shake me

HOVER

gear

PIXELFADEIN

fadein
Fades in children on mount. Use trigger to control when it fires — e.g. "inView" for scroll-triggered reveals. Combines well with for staggered entrances.
sparkle-small

Faded In

This card fades in from opacity 0. Click replay to restart.
<PixelFadeIn duration={400} delay={0} easing="ease-out">
<PixelCard title="Hello World">Faded in!</PixelCard>
</PixelFadeIn>
// Scroll-triggered fade
<PixelFadeIn trigger="inView" duration={600}>
<p>I appear when scrolled into view</p>
</PixelFadeIn>

PIXELSLIDEIN

slidein
Slides in children from a direction with a fade. You can fine tune travel using distance and pacing using easing. Complements .
v DOWN
^ UP
< LEFT
> RIGHT
<PixelSlideIn from="down" duration={350} distance={14} easing="ease-out">
<PixelButton tone="green">Slid In</PixelButton>
</PixelSlideIn>
// Staggered list
{items.map((item, i) => (
<PixelSlideIn key={item} from="right" delay={i * 80}>
<PixelCard title={item} />
</PixelSlideIn>
))}

PIXELPULSE

pulse
Continuously pulses opacity and scale to draw attention. Ideal for notifications, loading states, or status indicators. Disable by removing the component when not needed.
Live
Online

CPU

87%

<PixelPulse duration={2000}>
<PixelBadge tone="red">Live</PixelBadge>
</PixelPulse>

PIXELBOUNCE

bounce
Applies a pixel-art vertical bounce to any element. Great for icons, badges, and call-to-actions. Control bounce speed with duration and stop it with repeat=1.
trophy
+100 XP
crown
<PixelBounce duration={800}>
<PxlKitIcon icon={Trophy} size={24} />
</PixelBounce>
// Finite bounce
<PixelBounce duration={600} repeat={3}>
<PixelBadge tone="gold">+100 XP</PixelBadge>
</PixelBounce>

PIXELFLOAT

float
Creates a smooth hovering motion for icons, badges, and decorative cards. Use it as a soft ambient animation and combine with for status signals.
star
Hover
heart
<PixelFloat distance={8} duration={2400}>
<PxlKitIcon icon={Star} size={20} />
</PixelFloat>

PIXELSHAKE

shake
Adds a quick horizontal shake for validation errors or critical alerts. Keep repeat low to avoid visual fatigue. Often paired with .
Invalid
warning-triangle
Low HP
<PixelShake duration={450} repeat={2} distance={3}>
<PixelBadge tone="red">Invalid Input</PixelBadge>
</PixelShake>

PIXELROTATE

rotate
Rotates children continuously or in finite loops. Use direction to reverse or alternate spin behavior for loading indicators and decorative accents.
gear
lightning
Sync
<PixelRotate duration={1800} direction="normal" repeat="infinite">
<PxlKitIcon icon={Gear} size={22} />
</PixelRotate>

PIXELZOOMIN

zoomin
Scales and fades elements into view for punchy entrances. Works great for cards, badges, and modal content. Combine with for polished appear transitions.
package

Pack Ready

UI pack bundled
New Anim
<PixelZoomIn duration={320} startScale={0.9}>
<PixelCard title="Quick Reveal">Zoomed entrance</PixelCard>
</PixelZoomIn>

PIXELFLICKER

flicker
Creates a retro monitor/electric flicker effect. Ideal for alert labels, neon headings, and ambient status text. Pair with for cyberpunk-style UI accents.

SIGNAL LOCKED

NEON
lightning
<PixelFlicker duration={2200}>
<p className="font-pixel text-retro-cyan">SIGNAL LOCKED</p>
</PixelFlicker>

PIXELTYPEWRITER

typewriter
Reveals text character by character at a configurable speed. Supports a blinking cursor and start delay. Inherits the system for color theming.
<PixelTypewriter text="Hello, World!" speed={60} tone="green" />
<PixelTypewriter text="// loading system..." speed={40} delay={800} tone="cyan" cursor />

PIXELGLITCH

glitch
Cyberpunk-style scanline glitch with RGB channel split. Three rendered layers shift independently — two ghost layers offset in opposite directions create chromatic aberration. Control with trigger, tune speed and intensity.

ERROR

2500ms / 4px

CORRUPT

1800ms / 5px

GLITCH

badge / 3px

PXLKIT

2200ms / 6px

<PixelGlitch trigger="hover" duration={3000} intensity={4}>
<h1 className="font-pixel text-retro-green">SYSTEM ERROR</h1>
</PixelGlitch>

Real live demos for every component that ships in @pxlkit/ui-kit. Each preview is the Default example function authored alongside the component in <Component>.examples.tsx (single source of truth).

PIXELCOMBOBOX

combobox
Shipped in @pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.
import { PixelCombobox } from '@pxlkit/ui-kit';

PIXELMULTISELECT

multiselect
Shipped in @pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.
import { PixelMultiSelect } from '@pxlkit/ui-kit';

PIXELDATEPICKER

datepicker
Shipped in @pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.
import { PixelDatePicker } from '@pxlkit/ui-kit';

PIXELNUMBERINPUT

numberinput
Shipped in @pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.
import { PixelNumberInput } from '@pxlkit/ui-kit';

PIXELOTPINPUT

otpinput
Shipped in @pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.
import { PixelOTPInput } from '@pxlkit/ui-kit';

PIXELFILEUPLOAD

fileupload
Shipped in @pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.
import { PixelFileUpload } from '@pxlkit/ui-kit';

PIXELFORM

form
Shipped in @pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.

Your retro alias.

import { PixelForm } from '@pxlkit/ui-kit';

PIXELINPUTGROUP

inputgroup
Shipped in @pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.
import { PixelInputGroup } from '@pxlkit/ui-kit';

PIXELTOGGLEGROUP

togglegroup
Shipped in @pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.
import { PixelToggleGroup } from '@pxlkit/ui-kit';

PIXELTOGGLE

toggle
Shipped in @pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.
import { PixelToggle } from '@pxlkit/ui-kit';

PIXELDATERANGEPICKER

daterangepicker
Shipped in @pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.
import { PixelDateRangePicker } from '@pxlkit/ui-kit';

PIXELCALENDARGRID

calendargrid
Shipped in @pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.
June 2026
Su
Mo
Tu
We
Th
Fr
Sa
import { PixelCalendarGrid } from '@pxlkit/ui-kit';

PIXELCOLORINPUT

colorinput
Shipped in @pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.
import { PixelColorInput } from '@pxlkit/ui-kit';

PIXELRIBBON

ribbon
Shipped in @pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.
Card content
New
import { PixelRibbon } from '@pxlkit/ui-kit';

PIXELSTARRATING

starrating
Shipped in @pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.
import { PixelStarRating } from '@pxlkit/ui-kit';

PIXELICONFRAME

iconframe
Shipped in @pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.
import { PixelIconFrame } from '@pxlkit/ui-kit';

PIXELDATATABLE

datatable
Shipped in @pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.
AliceEngineeractive
BobDesigneridle
CarolPMactive
DanEngineeractive
EveDesigneridle
import { PixelDataTable } from '@pxlkit/ui-kit';

PIXELTIMELINE

timeline
Shipped in @pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.
  1. Order placed09:00
    Confirmation email sent.
  2. Packed11:20
    At the warehouse.
  3. Shipped
    Awaiting carrier pickup.
import { PixelTimeline } from '@pxlkit/ui-kit';

PIXELSTATGROUP

statgroup
Shipped in @pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.

Users

1,284

Revenue

$12.4k

Active

312

import { PixelStatGroup } from '@pxlkit/ui-kit';

PIXELAVATARGROUP

avatargroup
Shipped in @pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.
JD
AL
CD
import { PixelAvatarGroup } from '@pxlkit/ui-kit';

PIXELBADGEGROUP

badgegroup
Shipped in @pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.
reacttypescriptdesign
import { PixelBadgeGroup } from '@pxlkit/ui-kit';

PIXELCHIPGROUP

chipgroup
Shipped in @pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.
import { PixelChipGroup } from '@pxlkit/ui-kit';

PIXELSPARKLINE

sparkline
Shipped in @pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.
import { PixelSparkline } from '@pxlkit/ui-kit';

PIXELBARCHART

barchart
Shipped in @pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.
import { PixelBarChart } from '@pxlkit/ui-kit';

PIXELAREACHART

areachart
Shipped in @pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.
import { PixelAreaChart } from '@pxlkit/ui-kit';

PIXELFEATURECARD

featurecard
Shipped in @pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.

Realtime sync

Push every keystroke to peers via WebSockets — under 50ms p95.

import { PixelFeatureCard } from '@pxlkit/ui-kit';

PIXELPRICINGCARD

pricingcard
Shipped in @pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.

Starter

Everything you need to ship your first project.

$19/mo
  • Included: 10 projects
  • Included: Basic analytics
  • Included: Email support
  • Not included: Priority support
import { PixelPricingCard } from '@pxlkit/ui-kit';

PIXELTESTIMONIALCARD

testimonialcard
Shipped in @pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.
VERIFIED
pxlkit dropped the polish ceiling. Our marketing site felt like a product launch in a week.
Marisol QuinteroHead of Design · Northbeam
import { PixelTestimonialCard } from '@pxlkit/ui-kit';

PIXELHEROSECTION

herosection
Shipped in @pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.
Introducing

Pixel-perfect retro UI for modern web

A component kit that brings cinematic, terminal-grade interfaces to React apps.

import { PixelHeroSection } from '@pxlkit/ui-kit';

PIXELHEROMEDIA

heromedia
Shipped in @pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.
16:10 media
import { PixelHeroMedia } from '@pxlkit/ui-kit';

PIXELSPINNER

spinner
Shipped in @pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.
Loading
import { PixelSpinner } from '@pxlkit/ui-kit';

PIXELSTEPPER

stepper
Shipped in @pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.
AccountCreate your account
ProfileAdd some details
ConfirmReview and submit
import { PixelStepper } from '@pxlkit/ui-kit';

PIXELMENUBAR

menubar
Shipped in @pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.
import { PixelMenubar } from '@pxlkit/ui-kit';

PIXELNAVIGATIONMENU

navigationmenu
Shipped in @pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.
import { PixelNavigationMenu } from '@pxlkit/ui-kit';

PIXELSIDEBAR

sidebar
Shipped in @pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.
import { PixelSidebar } from '@pxlkit/ui-kit';

PIXELPORTAL

portal
Shipped in @pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.
Portaled content (renders into document.body after mount)
import { PixelPortal } from '@pxlkit/ui-kit';

PIXELPOPOVER

popover
Shipped in @pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.
import { PixelPopover } from '@pxlkit/ui-kit';

PIXELDRAWER

drawer
Shipped in @pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.
import { PixelDrawer } from '@pxlkit/ui-kit';

PIXELCOMMAND

command
Shipped in @pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.
import { PixelCommand } from '@pxlkit/ui-kit';

PIXELALERTDIALOG

alertdialog
Shipped in @pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.
import { PixelAlertDialog } from '@pxlkit/ui-kit';

PIXELSHEET

sheet
Shipped in @pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.
import { PixelSheet } from '@pxlkit/ui-kit';

PIXELBOX

box
Shipped in @pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.

Surface-aware container box.

import { PixelBox } from '@pxlkit/ui-kit';

PIXELSTACK

stack
Shipped in @pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.
First item
Second item
Third item
import { PixelStack } from '@pxlkit/ui-kit';

PIXELCLUSTER

cluster
Shipped in @pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.
reacttypescripttailwindnextvite
import { PixelCluster } from '@pxlkit/ui-kit';

PIXELGRID

grid
Shipped in @pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.
One
Two
Three
Four
Five
Six
import { PixelGrid } from '@pxlkit/ui-kit';

PIXELEQUALHEIGHTGRID

equalheightgrid
Shipped in @pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.

One

Short copy.

Footer

Two

A longer body that forces the row to grow taller than the first card.

Footer

Three

Medium length copy here.

Footer
import { PixelEqualHeightGrid } from '@pxlkit/ui-kit';

PIXELCENTER

center
Shipped in @pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.

Centered content with the default max-width and page gutter.

import { PixelCenter } from '@pxlkit/ui-kit';

PIXELCONTAINER

container
Shipped in @pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.

Default container — section landmark, xl max-width, lg rhythm.

import { PixelContainer } from '@pxlkit/ui-kit';

PIXELTWOCOLUMN

twocolumn
Shipped in @pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.
Left column
Right column
import { PixelTwoColumn } from '@pxlkit/ui-kit';

PIXELSECTIONHEADER

sectionheader
Shipped in @pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.

Section: Build pixel-perfect interfaces

A retro-cinematic component kit with surface awareness and rhythm tokens.

import { PixelSectionHeader } from '@pxlkit/ui-kit';

PIXELBENTO

bento
Shipped in @pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.
FeatureSpans 2x2 with a feature layout.
42Stats
Compact
WideSpans 2x1.
import { PixelBento } from '@pxlkit/ui-kit';

PIXELBENTOCELL

bentocell
Shipped in @pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.

Feature cell

Span 2x1 with feature layout.

Active128
Compact
import { PixelBentoCell } from '@pxlkit/ui-kit';

PIXELSCROLLAREA

scrollarea
Shipped in @pxlkit/ui-kit. See the v2.0.1 changelog for full release notes.

Scroll item 1

Scroll item 2

Scroll item 3

Scroll item 4

Scroll item 5

Scroll item 6

Scroll item 7

Scroll item 8

Scroll item 9

Scroll item 10

Scroll item 11

Scroll item 12

import { PixelScrollArea } from '@pxlkit/ui-kit';

ALL COMPONENTS (111) + PIXELTOAST DOCS

v2.0
PxlKitButtonPxlKitToastProviderPxlKitLocaleProviderPxlKitSurfaceProviderPixelOTPInput