# cursedbelt

> The React design system of the cursedbelt split — components, styles, theme. cursedbelt-core below it; server tier in cursedbelt-server.

Latest version **5.7.3** (published 2026-09-24) · ISC license · 0 weekly downloads

## Install

```sh
npm install cursedbelt
pnpm add cursedbelt
yarn add cursedbelt
bun add cursedbelt
```

## Health

**Score 60/100 (C)** — status: active.

Positive: esm support; no vulnerabilities; recently updated; high maintenance score.

Warnings: low downloads; no types; large bundle.

## Facts

| | |
|---|---|
| Version | 5.7.3 |
| Published | 2026-09-24 |
| First published | 2026-06-27 |
| Weekly downloads | 0 |
| License | ISC |
| TypeScript types | none |
| Module format | ESM |
| Dependencies | 35 |
| Unpacked size | 11.7 MB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Maintainers | curtwphillips |

## Links

- npm: https://www.npmjs.com/package/cursedbelt
- Repository: https://github.com/curtwphillips/cursedbelt
- Homepage: https://github.com/curtwphillips/cursedbelt#readme
- Issues: https://github.com/curtwphillips/cursedbelt/issues
- npm.io page: https://npm.io/package/cursedbelt

## Dependencies (35)

- [clsx](https://npm.io/package/clsx.md) ^2.1.1
- [cmdk](https://npm.io/package/cmdk.md) ^1.1.1
- [cwip](https://npm.io/package/cwip.md) ^4.6.0
- [sonner](https://npm.io/package/sonner.md) ^2.0.7
- [zustand](https://npm.io/package/zustand.md) ^5.0.14
- [lucide-react](https://npm.io/package/lucide-react.md) ^1.21.0
- [@base-ui/react](https://npm.io/package/@base-ui/react.md) ^1.6.0
- [tailwind-merge](https://npm.io/package/tailwind-merge.md) ^3.6.0
- [tw-animate-css](https://npm.io/package/tw-animate-css.md) ^1.4.0
- [cursedbelt-core](https://npm.io/package/cursedbelt-core.md) ^2.6.0
- [react-hook-form](https://npm.io/package/react-hook-form.md) ^7.80.0
- [@daypicker/react](https://npm.io/package/@daypicker/react.md) ^10.0.1
- [@floating-ui/react](https://npm.io/package/@floating-ui/react.md) ^0.27.19
- [@radix-ui/react-slot](https://npm.io/package/@radix-ui/react-slot.md) ^1.3.0
- [@radix-ui/react-tabs](https://npm.io/package/@radix-ui/react-tabs.md) ^1.1.15
- [@tanstack/react-table](https://npm.io/package/@tanstack/react-table.md) ^8.21.3
- [@radix-ui/react-dialog](https://npm.io/package/@radix-ui/react-dialog.md) ^1.1.17
- [@radix-ui/react-select](https://npm.io/package/@radix-ui/react-select.md) ^2.3.1
- [@radix-ui/react-slider](https://npm.io/package/@radix-ui/react-slider.md) ^1.4.2
- [@radix-ui/react-switch](https://npm.io/package/@radix-ui/react-switch.md) ^1.3.1
- [react-resizable-panels](https://npm.io/package/react-resizable-panels.md) ^4.12.0
- [@radix-ui/react-popover](https://npm.io/package/@radix-ui/react-popover.md) ^1.1.17
- [@radix-ui/react-tooltip](https://npm.io/package/@radix-ui/react-tooltip.md) ^1.2.10
- [@tanstack/react-virtual](https://npm.io/package/@tanstack/react-virtual.md) ^3.14.3
- [@radix-ui/react-checkbox](https://npm.io/package/@radix-ui/react-checkbox.md) ^1.3.5
- [@radix-ui/react-progress](https://npm.io/package/@radix-ui/react-progress.md) ^1.1.10
- [class-variance-authority](https://npm.io/package/class-variance-authority.md) ^0.7.1
- [@radix-ui/react-accordion](https://npm.io/package/@radix-ui/react-accordion.md) ^1.2.14
- [@radix-ui/react-hover-card](https://npm.io/package/@radix-ui/react-hover-card.md) ^1.1.17
- [@radix-ui/react-collapsible](https://npm.io/package/@radix-ui/react-collapsible.md) ^1.1.14
- [@radix-ui/react-radio-group](https://npm.io/package/@radix-ui/react-radio-group.md) ^1.3.9
- [@radix-ui/react-dropdown-menu](https://npm.io/package/@radix-ui/react-dropdown-menu.md) ^2.1.18
- [@atlaskit/pragmatic-drag-and-drop](https://npm.io/package/@atlaskit/pragmatic-drag-and-drop.md) ^2.0.1
- [@atlaskit/pragmatic-drag-and-drop-hitbox](https://npm.io/package/@atlaskit/pragmatic-drag-and-drop-hitbox.md) ^2.0.0
- [@atlaskit/pragmatic-drag-and-drop-auto-scroll](https://npm.io/package/@atlaskit/pragmatic-drag-and-drop-auto-scroll.md) ^3.0.0

## Recent versions

- 5.7.3 (latest) — 2026-09-24
- 5.7.2 — 2026-09-24
- 5.7.1 — 2026-09-24
- 5.7.0 — 2026-09-24
- 5.6.0 — 2026-09-24
- 5.5.0 — 2026-09-24
- 5.4.0 — 2026-09-24
- 5.3.1 — 2026-09-24
- 5.3.0 — 2026-09-23
- 5.2.0 — 2026-09-23
- 5.1.0 — 2026-09-23
- 5.0.1 — 2026-09-23
- 5.0.0 — 2026-09-23
- 4.7.0 — 2026-09-23
- 4.6.0 — 2026-09-23
- … 18 more at https://npm.io/package/cursedbelt/versions

## README

# cursedbelt

The React design system of the cursedbelt split — components, styles, theme. The tiers:

| package | what it is |
| --- | --- |
| `cursedbelt-core` | runtime-free types, schemas and wire shapes both sides share |
| `cursedbelt` (this one) | React components, `styles.css`, `theme.css`, the guardrails scanner |
| `cursedbelt-server` | the server tier — Bun routes, storage, auth, master lock |
| `cursedbelt-cc` | the parked cc platform (verify pipeline, studios) |

The full reference — every subpath, the stylesheet routes, and what each subpath makes you
install — is [`docs/API-REFERENCE.md`](docs/API-REFERENCE.md). The rules a component must keep are
[`docs/STANDARDS.md`](docs/STANDARDS.md).

## Before you import it — the traps that have cost a build

1. **A subpath can need a package you have not installed.** `cursedbelt/react/charts` needs
   `recharts`, `cursedbelt/react/rich-text` the `@tiptap/*` set, and so on: they are *optional*
   peers, so `bun add cursedbelt` does not bring them. Skip one and Vite fails on a module called
   `__vite-optional-peer-dep:recharts:cursedbelt` — the package to add is the middle field. The
   table is "What you install, and what you don't" in `docs/API-REFERENCE.md`, and
   `src/optionalPeersTable.spec.ts` fails this repo's gate when it stops matching the code.
2. **Import the leaf, not a barrel, for one thing.** `cursedbelt/react` is the one barrel that is
   safe whole — `src/barrelsReachNoOptionalPeer.spec.ts` proves it reaches no optional peer. On the
   server tier the rule is the opposite: `cursedbelt-server`'s root export is a barrel, so an app
   takes a leaf such as `cursedbelt-server/login-throttle`. That package's own docs carry which
   leaves exist and what its barrel costs.
3. **`Bun.serve`'s `websocket` option selects an overload** — it is a `cursedbelt-server` seam and
   its note lives there.

## Working on it

`bun run verify` is the gate (typecheck ∥ lint ∥ tests ∥ build ∥ Playwright on the demo), and
`bun run demo` is the kitchen-sink app every browser spec drives. Publishing is
`tools/publish-libs.sh` at the generation root, which runs this gate first.

---
_Source: https://npm.io/package/cursedbelt · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
