
Interactive 3D Globe
A 3D Earth lit day and night from the real sun position, wrapped in a soft atmosphere, with smooth drag-to-orbit controls.
A ceramic and graphite split-flap device that ripples each flap into your message.
Split-Flap Display is a React and Tailwind CSS split flap board, the Solari style departure display from airports and train stations, in Next.js or any React app, with no dependencies. Each module steps through its character drum one flap at a time under a gravity curve, like the hardware, and neighbouring modules start in a stagger so messages ripple into place. Cycle a list of messages or show one, pick a ceramic or graphite shell, and onSettle fires when every flap lands. Reduced motion jumps straight to each message. Text is uppercased, and characters missing from charset show as blanks.
Run the following command
pnpm dlx wensity@latest add split-flap-display
npx wensity@latest add split-flap-display
yarn dlx wensity@latest add split-flap-display
bunx wensity@latest add split-flap-display
Import SplitFlapDisplay from @/components/wensity/split-flap-display and render it anywhere in your React or Next.js app. The source lands in your own repo, so every prop, class and animation below is yours to edit.
import { SplitFlapDisplay } from "@/components/wensity/split-flap-display";export default function Example() {return (<SplitFlapDisplaymessages={["HELLO\nWORLD", "GATE B12\nNOW\nBOARDING", "SHIP IT\nON TIME"]}rows={3}columns={10}flapMs={70}/>);}
| Prop | Type | Default | Description |
|---|---|---|---|
messages | string[] | - | Messages to cycle through. Each one advances after it has fully settled. |
text | string | "HELLO" | A single static message. Ignored when messages is set. Use \n for a line break. |
columns | number | 10 | Flap modules per row, clamped to 3 to 24. |
rows | number | 3 | Rows of modules, clamped to 1 to 4. |
size | "sm" | "md" | "lg" | "md" | Maximum module size. Modules also shrink to fit their container. |
flapMs | number | 70 | Time between flap releases in milliseconds. The drum eases in and out around it, and several flaps fall at once. |
holdMs | number | 2800 | How long a settled message stays up before advancing. |
staggerMs | number | 45 | Delay between neighbouring modules starting to flip. |
charset | string | A to Z, 0 to 9, punctuation | Characters on each drum, in flip order. A blank is always first. |
theme | "auto" | "light" | "dark" | "auto" | Ceramic or graphite shell. Auto follows the .dark class. |
paused | boolean | false | Stop auto-advancing. The current message still finishes flipping. |
onSettle | (message: string, index: number) => void | - | Fires each time every module lands on the current message. |

A 3D Earth lit day and night from the real sun position, wrapped in a soft atmosphere, with smooth drag-to-orbit controls.

Inline or toggled code diffs rendered inside the same polished code block frame, flipping between before and after.

A terminal UI with self-typing commands, CRT phosphor glow and scanlines, streaming output that never re-renders a line.

Tinder-style swipe cards where the top card flicks off under your thumb and the one underneath rises in real time.
Featured in React 3D components.