
Installs all 12 components. Without our CLI, run instead.
gamekitui publishes a shadcn registry at gamekitui.com, with 12 components installable through the shadcn CLI.
Copy a prompt for your agent, copy the install command, or open the docs that ship it.
The addictive sliding-tile puzzle. Reach 2048. Swipe or arrow keys.
Bounce the ball, clear the bricks, don't drop. Endless levels.
The offline-dino endless runner. Jump the cacti. Perfect for 404 pages.
Tap to flap through the pipes. A tiny infinite runner for loading screens.
Slice the flying fruit, dodge the bombs, beat the clock. A juicy 60-second arcade run.
Flip cards to find matching pairs in as few moves as possible.
Deterministic 9×9 Minesweeper. Left-click reveals, right-click / long-press flags.
The original. Player vs CPU. First to 7. W/S or arrow keys.
A tiny, themeable Snake game. ≤6KB gzipped, zero external assets.
The one-tap tower builder. Drop the sliding block, keep the overlap, stack as high as you can — every layer a shade of your theme.
Classic 3×3 Tic-Tac-Toe with an unbeatable CPU. Pure DOM, fully themeable.
Tap the moles before they duck. 30-second pointer-only arcade game.
GameKit UI
Drop-in browser games for shadcn. Minimal, themeable React/TSX games installable with the shadcn CLI — perfect for 404 pages, empty states, loading screens, and landing-page easter eggs.
Website · Games · Docs · Contributing · Report a bug
npx shadcn@latest add @gamekitui/snake
No provider. No peer deps. No init step. Each game is a single drop-in file that inherits your shadcn theme automatically — light/dark and any preset. Drop one on a 404 and it plays on the first keypress.
react and your existing cn helper. 2–4 KB minified + gzipped (the raw .tsx is bigger because it inlines its engine and theme hooks), and lazy-loadable so it never weighs down your initial bundle.--primary / --secondary / --accent drive the playfield, not just the chrome. Canvas games read the tokens at runtime; DOM games use Tailwind token classes. Change your theme and the games recolor live.aria-live announcements, and prefers-reduced-motion support in every game.| Game | Surface | Install |
|---|---|---|
| 🐍 Snake | canvas | npx shadcn@latest add @gamekitui/snake |
| ⭕ Tic-Tac-Toe | DOM |
npx shadcn@latest add @gamekitui/tic-tac-toe |
| 🔢 2048 | DOM | npx shadcn@latest add @gamekitui/2048 |
| 🃏 Memory Match | DOM | npx shadcn@latest add @gamekitui/memory-match |
| 🔨 Whack-a-Mole | DOM | npx shadcn@latest add @gamekitui/whack-a-mole |
| 💣 Minesweeper | DOM | npx shadcn@latest add @gamekitui/minesweeper |
| 🏓 Pong | canvas | npx shadcn@latest add @gamekitui/pong |
| 🧱 Breakout | canvas | npx shadcn@latest add @gamekitui/breakout |
| 🦖 Dino Runner | canvas | npx shadcn@latest add @gamekitui/dino-runner |
| 🐦 Flappy | canvas | npx shadcn@latest add @gamekitui/flappy |
Base registry URL:
https://gamekitui.com/r/{name}.json
// app/not-found.tsx
import { Snake } from "@/components/games/snake";
export default function NotFound() {
return (
404
Play a round while you decide where to go.
);
}
That's it — no setup. On a single-game page like this, the game captures keyboard input globally, so it responds the moment a visitor presses a key (no click-to-focus needed).
The installed .tsx looks big (~15–28 KB) because it inlines its own engine and theme hooks to stay a true single-file drop-in — but that's source, not what ships. Built for production each game is 2–4 KB minified + gzipped.
Because every game is a self-contained module, it's trivially code-split — lazy-load it so it never touches your initial bundle and only downloads when the easter egg actually renders:
import dynamic from "next/dynamic";
const Snake = dynamic(() => import("@/components/games/snake").then((m) => m.Snake), {
ssr: false,
loading: () => ,
});
@gamekitui/ installs resolve straight from the official shadcn registry directory — no setup needed. If you'd rather pin the registry in your project config:
npx shadcn@latest registry add @gamekitui
Or add "@gamekitui": "https://gamekitui.com/r/{name}.json" to the registries field of your components.json by hand. You can also install any game by its direct URL: npx shadcn@latest add https://gamekitui.com/r/snake.json.
Every game accepts a common subset of props:
| Prop | Type | Description |
|---|---|---|
className | string | Tailwind classes on the wrapper. |
width / height | number | Logical size in CSS px (canvas games scale via DPR). |
paused | boolean | Externally pause the game. |
autoFocus | boolean | Focus on mount. Defaults to true. |
captureGlobalKeys | boolean | Listen for keys on window so the game works without being focused first. Defaults to true — set false when several games share a page, or the game sits in scrollable content, so it only responds while focused. |
persistHighScore | boolean | string | localStorage key, or a default per game. |
onScoreChange | (score: number) => void | Fires when the score changes. |
onGameOver | (r: { score: number; won: boolean }) => void | Fires on game over. |
apps/web Next.js 16 marketing + docs site; serves /r/*.json
packages/registry The game sources (one self-contained file each)
packages/game-core Shared contract types + reference hooks (zero runtime)
packages/ui shadcn primitives used by the site
scripts/build-registry.ts Emits apps/web/public/r/*.json from the game sources
bun install
bun run dev # builds the registry, then starts the site on :3001
Other scripts:
bun run build # registry build + next build
bun run check-types # typecheck every workspace
cd packages/registry && bun smoke.tsx # render smoke test for every game
Contributions are welcome! See CONTRIBUTING.md for the "add a new game" guide — the engine/wrapper template, the shared props contract, the theme-token mapping, and the size budget. Please also review our Code of Conduct.
Found a bug or have an idea? Open an issue.
GameKit UI is an independent, unaffiliated community project. It is not built, sponsored, or endorsed by the shadcn/ui team. It uses the shadcn registry system. The shadcn- prefix is reserved for official projects, which is why this project is named gamekitui (not shadcn-games).
MIT © GameKit UI contributors
Built with ❤️ for the shadcn community.