Component registry
67 ejectable components ship in the registry. `cimplify list` shows every component; `cimplify add <name>` copies one's source into your project. After ejection it's yours; you stop receiving SDK updates for that component, in exchange for full control over JSX, state, and behavior.
This is the shadcn pattern: registry-as-source-code, not registry-as-package. You own ejected components; bumping @cimplify/sdk no longer updates them.
List
# All ejectable components
cimplify list
# Filter (pipe to grep)
cimplify list | grep selector
cimplify list | grep cardAdd
# Eject a single component into ./components/
cimplify add cart-summary
# → writes ./components/cart-summary.tsx
cimplify add variant-selector
cimplify add product-customizerThe CLI resolves the registry entry, copies its source (renaming imports as needed), and writes it under components/. Replace the SDK import in the page or layout that used the original component with the local copy.
When to eject
| Eject when… | Don't eject when… |
|---|---|
classNames / render* overrides can't reach the part you need to change. | A class override or a per-element render* slot would do the job. |
| You need merchant-specific logic that isn't generic enough to upstream. | You're tempted to monkey-patch; fork the SDK upstream instead. |
| You're deeply restructuring (e.g. custom cart layout that breaks the SDK's contract). | You want SDK bug-fixes for free. |
Example flow: restyle the cart drawer
cimplify add cart-drawer
# → ./components/cart-drawer.tsx"use client";
import { CimplifyProvider } from "@cimplify/sdk/react";
import { CartDrawerProvider } from "@cimplify/sdk/react";
// import { CartDrawer } from "@cimplify/sdk/react"; // ← was
import { CartDrawer } from "@/components/cart-drawer"; // ← now
// ...// Edit the JSX, swap the close button, change the empty-state copy,
// add a per-merchant "free shipping" banner, etc. The state machine, cart
// hooks, and onCheckout contract still flow through the SDK; you only own
// the rendering.
"use client";
import { useCart, useCartDrawer } from "@cimplify/sdk/react";
// ... (the ejected source)What's in the registry
The registry mirrors the React SDK exports. Pages, customizers, cards, primitives: every non-trivial component has an entry. cimplify list is the source of truth; the table below groups the most-used ones.
| Group | Registry entries |
|---|---|
| Pages | catalogue-page, product-page, cart-page, checkout-page, search-page, collection-page, order-detail-page, order-history-page, deals-page, bookings-page, booking-page, account |
| Cart | cart-drawer, cart-summary |
| Cards | product-card, food-product-card, retail-product-card, wholesale-product-card, digital-product-card, standard-service-card, compact-service-card, schedule-service-card, rental-service-card, accommodation-card, lease-service-card, subscription-card, booking-card, booking-list |
| Layouts | default-product-layout, food-product-layout, wholesale-product-layout, service-product-layout, digital-product-layout |
| Customizers | product-customizer, variant-selector, add-on-selector, bundle-selector, composite-selector, billing-plan-selector, customer-input-fields |
| Filters & grids | product-grid, category-grid, category-filter, search-input, store-nav, recently-viewed, recommendation-carousel, collection-page |
| Scheduling | slot-picker, date-slot-picker, staff-picker, resource-picker, availability-badge |
| Primitives | price, price-range, quantity-selector, deal-banner, sale-badge, discount-input, delivery-estimate, volume-pricing, location-picker, currency-selector, session-message-banner, product-image-gallery, product-sheet, order-summary, order-history, chat-widget |
Ejection golden rules
- Read the ejected file end-to-end before editing.
- Don't change the state shape or the cart payload contract; the customizer / cart pricing math has been iterated on heavily, and the mock will reject mismatched payloads.
- Restyle via Tailwind classes / wrap nodes / add per-merchant copy.
- Run
bun run check:cartandbun run check:contractafter.
Where next
-
Component catalog Real names, props, examples.
-
Hooks reference Drive ejected components from data hooks.
-
CLI overview Full subcommand index.
cimplify mock
Boots an in-process Hono server that mirrors the production Cimplify API (~99% parity) with seeded data. The mock is the oracle for testing and local development; every scaffolded storefront wires `bun dev` to start it alongside Next.js.
MCP server
Cimplify exposes a Model Context Protocol server at api.cimplify.io/mcp. Agents (Claude Code, Cursor, ChatGPT Connectors, Continue, Goose) speak streamable HTTP per the MCP 2025-11-25 spec and drive every CLI workflow as typed tool calls: no shell-out, no help-text parsing, no stdio bridge required.