Shipkit features are available as installable shadcn registry blocks. Add auth, payments, blog, docs, CMS, analytics, or any feature to a Next.js project with a single command.
The goal: start from bones (the upstream boilerplate) and install blocks until you reach full Shipkit parity.
In your project's components.json, add the Shipkit registry:
{
"registries": {
"@shipkit": "https://shipkit.io/r/{name}.json"
}
}
npx shadcn add @shipkit/auth
npx shadcn add @shipkit/payments
npx shadcn add @shipkit/blog
npx shadcn add @shipkit/analytics
Or install directly via URL:
npx shadcn add https://shipkit.io/r/auth.json
| Block | Files | Description |
|---|---|---|
auth | 41 | NextAuth.js v5 — OAuth, credentials, magic link, guest access |
payments | 30 | Stripe, Lemon Squeezy, Polar — checkout, webhooks, subscriptions |
dashboard | 46 | User dashboard — projects, teams, API keys, deployments, charts |
blog | 24 | MDX blog with author profiles, categories, feed-style timeline |
docs | 12 | Documentation system — sidebar, search, MDX rendering |
admin | 30 | Role-based admin panel — users, payments, GitHub, integrations |
settings | 12 | User settings — profile, appearance, account management |
rbac | 3 | Role-based access control — permission service, hook, API |
demo | 93 | Showcase pages — dashboard, mail, music, playground, forms, cards |
| Block | Files | Description |
|---|---|---|
faq | 3 | Accordion FAQ page with optional Payload CMS integration |
pricing | 8 | Pricing page with plan cards, features, testimonials content |
legal | 5 | Privacy policy, terms of service, EULA, legal info (MDX) |
changelog | 6 | Auto-generated changelog from GitHub commits and tags |
contact | 4 | Contact form with Resend email and newsletter opt-in |
waitlist | 10 | Pre-launch signup with hero, social proof, FAQ sections |
| Block | Files | Description |
|---|---|---|
builder-io | 11 | Builder.io visual page builder — drag-and-drop components |
cms-pages | 11 | Shared Payload + Builder.io catch-all with automatic fallback |
| Block | Files | Description |
|---|---|---|
email | 6 | Resend email — client, service, subscribe actions, newsletter form |
feedback | 4 | User feedback dialog/popover with database storage |
analytics | 9 | PostHog, Umami, DataFast, Google Analytics, GTM, Statsig |
ai | 15 | SmolLM browser AI (WebGPU) + cloud AI (OpenAI, Anthropic) |
github-connect | 10 | GitHub OAuth, repo creation, collaborators, download service |
vercel-connect | 11 | Vercel OAuth, deploy triggers, webhooks, status tracking |
storage | 6 | AWS S3 presigned uploads, file service, upload components |
caching | 4 | Redis caching and rate limiting via Upstash |
Installed automatically as dependencies of the blocks above.
| Item | Type | Description |
|---|---|---|
cn | registry:lib | Tailwind class merging (clsx + tailwind-merge) |
routes-config | registry:lib | Centralized route definitions |
features-config | registry:lib | Build-time feature flags from env vars |
Standalone components, also installable individually:
| Component | Description |
|---|---|
marquee | Infinite scrolling marquee (horizontal/vertical) |
border-beam | Animated beam tracing a container border |
retro-grid | Perspective grid background |
shimmer-button | Button with rotating shimmer effect |
dock | macOS-style dock with magnification |
use-copy-to-clipboard | Clipboard hook with timeout reset |
use-mobile | Mobile viewport detection hook |
| Block | Description |
|---|---|
onboarding | Multi-step setup wizard |
payload-cms | Full Payload CMS collections and admin panel |
The simplest block — good for validating your registry setup.
npx shadcn add @shipkit/faq
Installs to:
app/(app)/faq/page.tsx — Server component with accordion layoutapp/(app)/faq/loading.tsx — Loading skeletoncontent/faq/faq-content.tsx — Static FAQ content (8 questions)Dependencies: accordion (shadcn), cn
The page loads FAQs from Payload CMS when available, falling back to the static content file. Edit faq-content.tsx to customize questions.
Full documentation system powered by MDX.
npx shadcn add @shipkit/docs
Installs to:
app/docs/ — Layout, page, loading, not-found, stylesapp/docs/_components/ — Sidebar, header, search dialogapp/api/docs/search/ — Search API route (optional AI-powered answers)lib/docs.ts — Doc utilities (slug resolution, navigation, search)hooks/use-docs-search.ts — Client-side search hook with debouncingserver/services/docs-search.ts — Server-side search serviceDependencies: next-mdx-remote, remark-gfm, gray-matter, zod
Place .mdx files in a docs/ directory at your project root. The system auto-discovers files and builds sidebar navigation from the directory structure.
MDX-powered blog with author profiles and feed-style timeline.
npx shadcn add @shipkit/blog
Installs to:
app/blog/ — Listing, post pages, categories, author pagescomponents/modules/blog/ — 10 components (hero, post, authors, TOC, skeletons)components/layouts/blog-sidebar.tsx — Sticky sidebar with searchlib/blog.ts — Blog utilities (post loading, category extraction)config/blog-authors.ts — Author configurationconfig/nextjs/with-blog.ts — Next.js config wrapperstyles/blog.css — Timeline and sidebar stylesDependencies: gray-matter, next-mdx-remote, remark-gfm, lucide-react
Place .mdx posts in src/content/blog/. Add withBlog() to your next.config.ts to auto-detect blog content and set the NEXT_PUBLIC_HAS_BLOG flag.
Visual page builder for no-code content editing.
npx shadcn add @shipkit/builder-io
Installs to:
app/builder.io/[...slug]/page.tsx — Standalone catch-all routelib/builder-io/builder-io.tsx — RenderBuilderContent componentbuilder-registry.ts — Component registration (Hero, Stats, CTA)components/modules/builder/ — 5 Builder.io block componentsconfig/nextjs/with-builder.ts — Next.js config wrapperstyles/builder-io.css — Builder.io overridesDependencies: @builder.io/react, @builder.io/sdk, @builder.io/dev-tools
Setup: Sign up at builder.io, set BUILDER_API_KEY in .env. Wrap your Next.js config with withBuilderConfig().
Shared catch-all route for Payload CMS and Builder.io coexistence.
npx shadcn add @shipkit/cms-pages
Installs to:
app/(app)/[...slug]/page.tsx: unified catch-all handler (lives under (app) so the sync root layout can send a real 404)app/(cms)/layout.tsx — Conditional Payload layout (tree-shakes when disabled)app/(cms)/payload-root-layout.tsx — Payload CSS/config loaderapp/(cms)/payload-blocks.tsx — Block renderer (Hero, Content, Features, Testimonials)app/(cms)/ — 4 Payload block componentstypes/blocks.ts — Block type definitionsHow routing works:
Request to /<any-path>
-> (app)/[...slug] catches it
-> Checks Payload CMS database for matching page
-> If not found, falls back to Builder.io API
-> If neither has content, returns 404
Payload is checked first (higher priority). Both CMS systems can be independently enabled/disabled via feature flags. Installing this block automatically pulls in the builder-io block.
Full authentication system with multi-provider support.
npx shadcn add @shipkit/auth
Installs to:
app/(authentication)/ — Sign-in, sign-up, forgot/reset password, error pagesapp/(authentication)/_components/ — Auth form, credentials, magic link, guest, OAuth buttonsapp/api/auth/[...nextauth]/route.ts — NextAuth API routeserver/auth.ts — NextAuth configuration with Drizzle adapterserver/auth-js/ — Provider configs, utilitiesserver/actions/auth.ts — Server actions (sign in, sign up, password reset)server/services/ — Auth service, user serviceserver/db/schema.ts — Drizzle schema (users, accounts, sessions, verification tokens)hooks/ — Auth redirect hookslib/schemas/ — Zod validation schemastypes/ — User types, NextAuth type augmentationcomponents/buttons/ — Sign-in button, GitHub OAuth buttonDependencies: next-auth@5, @auth/drizzle-adapter, bcryptjs, zod, zsa
Setup:
npx auth secret to generate AUTH_SECRETDATABASE_URL for PostgreSQLnpx drizzle-kit generate && npx drizzle-kit migrateAUTH_GITHUB_ID + AUTH_GITHUB_SECRET)ENABLE_AUTH_GUEST=truenpx shadcn add @shipkit/legal
Privacy policy, terms of service, EULA, and legal info as MDX pages with shared layout and header navigation. Customize content in each .mdx file after installation.
npx shadcn add @shipkit/changelog
Auto-generates changelog from your GitHub repo's commits and tags. Set GITHUB_REPO_OWNER and GITHUB_REPO_NAME env vars. Timeline view with individual entry pages. Cached for 1 hour via ISR.
npx shadcn add @shipkit/contact
Contact page with animated background, email card, and React Hook Form. Sends emails via Resend (RESEND_API_KEY). Includes newsletter opt-in.
npx shadcn add @shipkit/waitlist
Pre-launch waitlist with hero, social proof, FAQ, and email signup. Stores entries in the database. Optional Resend email notifications.
npx shadcn add @shipkit/admin
Role-based admin dashboard. Set ADMIN_EMAIL (comma-separated) to grant access. Sections: users, payments, GitHub, integrations, feedback, waitlist, CMS. Requires auth block.
npx shadcn add @shipkit/settings
User settings with profile editing, appearance/theme picker, account deletion, and provider disconnect. Requires auth block.
npx shadcn add @shipkit/email
Resend email integration. Set RESEND_API_KEY to enable. Includes subscribe form, audience management, and email utility functions.
npx shadcn add @shipkit/feedback
User feedback dialog and popover components. Stores in database, optionally emails via Resend.
npx shadcn add @shipkit/analytics
Six providers, all behind feature flags. Set any env var to enable: NEXT_PUBLIC_POSTHOG_KEY, NEXT_PUBLIC_UMAMI_WEBSITE_ID, NEXT_PUBLIC_DATAFAST_ID, NEXT_PUBLIC_GA_ID, NEXT_PUBLIC_GTM_ID, NEXT_PUBLIC_STATSIG_CLIENT_KEY. Add <AnalyticsProvider /> to your root layout.
npx shadcn add @shipkit/pricing
Pricing page with plan cards, features showcase, and testimonials. Customize plans in content/pricing/pricing-content.ts.
npx shadcn add @shipkit/payments
Unified payment system. Each provider auto-enables via env vars:
STRIPE_SECRET_KEY + STRIPE_PUBLISHABLE_KEYLEMONSQUEEZY_API_KEY + LEMONSQUEEZY_STORE_IDPOLAR_ACCESS_TOKENIncludes webhook handlers, checkout flows, subscription management, and buy buttons.
npx shadcn add @shipkit/caching
Redis caching and rate limiting via Upstash. Set UPSTASH_REDIS_REST_URL and UPSTASH_REDIS_REST_TOKEN.
npx shadcn add @shipkit/storage
AWS S3 file uploads with presigned URLs. Set AWS_S3_BUCKET_NAME, AWS_S3_REGION, AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY. Includes file upload components.
npx shadcn add @shipkit/dashboard
Full user dashboard with projects, teams, API keys, deployments, downloads, tools, revenue chart, and stats cards. Includes sidebar, service layer, and server actions. Requires auth block.
npx shadcn add @shipkit/rbac
Role-based access control. Server-side rbacService.hasPermission(userId, resource, action) and client-side usePermission() hook. Includes /api/permissions/check endpoint.
npx shadcn add @shipkit/ai
Browser-based SmolLM via WebGPU (no server, no API key) and cloud AI with OpenAI/Anthropic. Set OPENAI_API_KEY or ANTHROPIC_API_KEY for cloud features. Includes demo components and WebGPU detection.
npx shadcn add @shipkit/github-connect
GitHub integration for repo management. Requires AUTH_GITHUB_ID + AUTH_GITHUB_SECRET. Provides repo creation, collaborator invitations, download service, and repo availability checks.
npx shadcn add @shipkit/vercel-connect
Vercel deployment integration. Set VERCEL_TOKEN and VERCEL_TEAM_ID. OAuth connect flow, deploy triggers, webhook receiver, deployment status tracking, and deploy button components.
npx shadcn add @shipkit/demo
93 files of showcase demos: dashboard, mail client, music player, AI playground, forms, cards, file browser, authentication, pricing, landing page, and tRPC. Great for exploring UI patterns.
All blocks install into the (app) route group by default. This is required for compatibility with Payload CMS, which uses a separate (cms) route group.
app/
├── (app)/ <- Feature blocks install here
│ ├── [...slug]/ <- Shared Payload + Builder.io catch-all
│ ├── faq/
│ ├── docs/
│ ├── blog/
│ ├── builder.io/
│ └── (authentication)/
├── (cms)/ <- Payload admin + REST API only
│ ├── cms/ <- Payload admin panel
│ └── cms-api/ <- Payload REST API
└── layout.tsx
The registry source is registry.json at the project root. Running npx shadcn build reads this file and generates individual JSON files in public/r/.
# Build registry
bun run build:registry # or: npx shadcn build
# Output
public/r/
├── registry.json # Auto-generated index
├── faq.json # Per-block JSON with embedded file contents
├── auth.json
└── ...
registry.json:{
"name": "my-block",
"type": "registry:block",
"title": "My Block",
"description": "What it does.",
"categories": ["shipkit", "my-category"],
"dependencies": ["some-npm-package"],
"registryDependencies": ["cn", "button"],
"files": [
{
"path": "src/app/(app)/my-route/page.tsx",
"type": "registry:page",
"target": "~/app/(app)/my-route/page.tsx"
}
],
"docs": "Setup instructions shown after installation."
}
Run bun run build:registry to generate the output files.
Test locally (see Local Testing below).
To test registry blocks locally before deploying:
Option A: Use the dev server
# Terminal 1
bun dev
# Terminal 2
npx shadcn add http://localhost:3000/r/faq.json
Option B: Quick static server (no full Next.js build needed)
# Terminal 1
npx serve public/r -p 5555
# Terminal 2
npx shadcn add http://localhost:5555/faq.json
Resolving custom registry dependencies locally:
Direct URL installs (http://localhost:.../faq.json) will fail if the block has registryDependencies that reference custom items like cn or routes-config — shadcn tries to resolve those from its default registry at shadcn.com.
To fix this, add a local Shipkit registry to your test project's components.json:
{
"registries": {
"@shipkit": "http://localhost:3000/r/{name}.json"
}
}
Then install via the registry prefix:
npx shadcn add @shipkit/faq
This resolves all internal deps (cn, routes-config, etc.) through the local server. Standard shadcn deps (accordion, button, etc.) still resolve from shadcn.com as normal.
Tip: If you just want to verify file installation and the dependencies already exist in the project, the direct URL approach works fine — dependency resolution is only needed for fresh consumer projects.
| Type | Use for |
|---|---|
registry:page | Route pages (page.tsx) |
registry:component | React components, layouts, loading states |
registry:hook | React hooks |
registry:lib | Utilities, configs, server code, types, API routes |
registry:style | CSS files |
~ resolves to the project root (relative to components.json)(app) for routes: ~/app/(app)/my-route/page.tsx~/lib/my-util.ts, ~/hooks/my-hook.tspath is the source location in Shipkit, target is where it installs in the consumer projectcn, routes-config, features-configaccordion, button, card, input, etc.components.json