npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@carefully-built/saas-kit

v0.1.13

Published

One-install Carefully Built SaaS Kit package for React, Next.js, Convex, WorkOS, and editable SaaS components.

Readme

@carefully-built/saas-kit

One install for Carefully Built SaaS components, product surfaces, and helpers.

Carefully Built SaaS Kit exists so every new B2B product does not have to reinvent the same tables, forms, filters, sheets, settings, files, notifications, calendars, and dashboard patterns from scratch.

Use this package when you want managed npm imports and shared upgrades across apps. Use @carefully-built/cli when you want to eject editable component source into an app.

Component Previews

Install

bun add @carefully-built/saas-kit
import { Button, SmartTable, TableToolbar, ResponsiveSheet } from "@carefully-built/saas-kit";

The package includes the modular Carefully Built packages as dependencies. Your app should still install the framework peer dependencies it actually uses, such as React, Next.js, Convex, WorkOS, Radix primitives, React Hook Form, TipTap, FullCalendar, and Recharts.

Package Modules

Import from the root for shared UI primitives, or from a subpath for a product area.

| Module | Use for | |---|---| | @carefully-built/saas-kit | Shared UI primitives, table tools, overlays, empty states, error pages, hooks, and utilities | | @carefully-built/saas-kit/agenda | Calendar and agenda surfaces | | @carefully-built/saas-kit/app-shell | Dashboard shell, top route loader, responsive navigation, page layouts, and mobile bottom navigation | | @carefully-built/saas-kit/association-picker | Searchable association selection | | @carefully-built/saas-kit/auth-pages | Auth forms, controllers, pages, social login, organizations, and WorkOS auth UI | | @carefully-built/saas-kit/automations | Automation builder state, canvas, options, and draft helpers | | @carefully-built/saas-kit/charts | Dashboard chart widgets | | @carefully-built/saas-kit/convex-crud | Convex CRUD helpers | | @carefully-built/saas-kit/convex-multitenant | Convex multitenancy helpers | | @carefully-built/saas-kit/convex-platform | Convex platform association helpers | | @carefully-built/saas-kit/convex-workos | Convex WorkOS integration helpers | | @carefully-built/saas-kit/crud | CRUD table/page state and URL filters | | @carefully-built/saas-kit/custom-fields | Custom field definitions and inputs | | @carefully-built/saas-kit/files | Document cards, grids, uploads, and file filtering | | @carefully-built/saas-kit/forms | Schema/custom forms and user picker fields | | @carefully-built/saas-kit/import-export | CSV import/export helpers and sheets | | @carefully-built/saas-kit/kanban | Kanban board and pipeline helpers | | @carefully-built/saas-kit/legal-ui | Legal document renderer and default legal text | | @carefully-built/saas-kit/maps-ui | Google Maps Places loader helpers | | @carefully-built/saas-kit/notes | Notes CRUD page and note list types | | @carefully-built/saas-kit/notifications | Notification lists, buttons, and visual metadata | | @carefully-built/saas-kit/resource-kit | Resource pages, entity detail shells, associated tabs, and toast helpers | | @carefully-built/saas-kit/rich-text | Rich text editor and renderer | | @carefully-built/saas-kit/search | Search and command palette modules | | @carefully-built/saas-kit/settings-ui | Settings cards and settings tab surfaces | | @carefully-built/saas-kit/superadmin | Superadmin UI, server helpers, and Next.js page factory | | @carefully-built/saas-kit/theme-ui | Theme selector components | | @carefully-built/saas-kit/ui | Direct access to the UI package barrel | | @carefully-built/saas-kit/user-picker | User picker package barrel | | @carefully-built/saas-kit/widgets | Dashboard widget wrappers | | @carefully-built/saas-kit/workos | WorkOS organization UI and server helpers | | @carefully-built/saas-kit/server | Server-only helpers | | @carefully-built/saas-kit/next | Next.js helpers |

Example subpath imports:

import { AppTopLoader, DashboardPageLayout } from "@carefully-built/saas-kit/app-shell";
import { AuthLoginPage } from "@carefully-built/saas-kit/auth-pages/pages";
import { createWorkOSWidgetTokenResponse } from "@carefully-built/saas-kit/server";
import { createSuperAdminPage } from "@carefully-built/saas-kit/next";

Full UI Registry

Every public UI module exported by @carefully-built/ui is available through @carefully-built/saas-kit and through the CLI registry.

| Registry entry | Managed import | Editable source | |---|---|---| | avatar | import { Avatar, AvatarFallback, AvatarImage } from "@carefully-built/saas-kit" | bunx @carefully-built/cli add avatar | | button | import { Button, ButtonSize, ButtonVariant, buttonVariants } from "@carefully-built/saas-kit" | bunx @carefully-built/cli add button | | calendar | import { Calendar } from "@carefully-built/saas-kit" | bunx @carefully-built/cli add calendar | | card | import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from "@carefully-built/saas-kit" | bunx @carefully-built/cli add card | | chip | import { Chip, ChipButton } from "@carefully-built/saas-kit" | bunx @carefully-built/cli add chip | | chip-utils | import { CHIP_CLASS_NAMES, ChipSize, getChipClassName } from "@carefully-built/saas-kit" | bunx @carefully-built/cli add chip-utils | | date-display | import { DateDisplayValue, formatAbsoluteDate, formatDisplayDate } from "@carefully-built/saas-kit" | bunx @carefully-built/cli add date-display | | dialog | import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay } from "@carefully-built/saas-kit" | bunx @carefully-built/cli add dialog | | display-date | import { DisplayDate } from "@carefully-built/saas-kit" | bunx @carefully-built/cli add display-date | | drawer | import { Drawer, DrawerContent, DrawerDescription, DrawerHeader, DrawerOverlay, DrawerPortal } from "@carefully-built/saas-kit" | bunx @carefully-built/cli add drawer | | dropdown-menu | import { DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator } from "@carefully-built/saas-kit" | bunx @carefully-built/cli add dropdown-menu | | empty-state | import { CollectionEmptyState, EmptyStateCard, InitialEmptyState, NoResultsState, ResolveCollectionEmptyStateOptions, resolveCollectionEmptyState } from "@carefully-built/saas-kit" | bunx @carefully-built/cli add empty-state | | error-page | import { ErrorCode, ErrorPageContent, ErrorPageKind, PostHogErrorCapturePayload, ResolveErrorPageContentOptions, SaasErrorPage } from "@carefully-built/saas-kit" | bunx @carefully-built/cli add error-page | | field-detail-row | import { FieldDetailRow } from "@carefully-built/saas-kit" | bunx @carefully-built/cli add field-detail-row | | file-dropzone | import { FileDropzone } from "@carefully-built/saas-kit" | bunx @carefully-built/cli add file-dropzone | | help-info-button | import { HelpInfoButton } from "@carefully-built/saas-kit" | bunx @carefully-built/cli add help-info-button | | input | import { Input } from "@carefully-built/saas-kit" | bunx @carefully-built/cli add input | | keyboard-shortcut-hint | import { KeyboardKeycap, ShortcutModifierKeycap } from "@carefully-built/saas-kit" | bunx @carefully-built/cli add keyboard-shortcut-hint | | label | import { Label } from "@carefully-built/saas-kit" | bunx @carefully-built/cli add label | | pagination | import { Pagination } from "@carefully-built/saas-kit" | bunx @carefully-built/cli add pagination | | popover | import { Popover, PopoverContent, PopoverTrigger } from "@carefully-built/saas-kit" | bunx @carefully-built/cli add popover | | responsive-sheet | import { ResponsiveSheet, SheetOutsideInteractionGuard } from "@carefully-built/saas-kit" | bunx @carefully-built/cli add responsive-sheet | | responsive-sheet.footer | import { DesktopConfirmShortcutHint, SheetActionFooter } from "@carefully-built/saas-kit" | bunx @carefully-built/cli add responsive-sheet.footer | | responsive-sheet.shortcuts | import { getDesktopShortcutModifierLabel, isAllowedConfirmShortcutEvent, useDesktopConfirmShortcut, useDesktopShortcutModifierLabel } from "@carefully-built/saas-kit" | bunx @carefully-built/cli add responsive-sheet.shortcuts | | scroll-fade-area | import { ScrollFadeArea } from "@carefully-built/saas-kit" | bunx @carefully-built/cli add scroll-fade-area | | search | import { SearchTextPart, buildSearchText, filterAndRankBySearch, rankBySearch, scoreFuzzyMatch } from "@carefully-built/saas-kit" | bunx @carefully-built/cli add search | | searchable-select | import { AUTO_SEARCHABLE_SELECT_THRESHOLD, SearchableSelect, SearchableSelectOption, getSearchableSelectPortalContainer, isSearchableSelectPointerInside } from "@carefully-built/saas-kit" | bunx @carefully-built/cli add searchable-select | | searchable-select-position | import { SearchableSelectRect, resolveSearchableSelectDropdownPosition } from "@carefully-built/saas-kit" | bunx @carefully-built/cli add searchable-select-position | | segmented-toggle | import { SegmentedToggle, SegmentedToggleOption } from "@carefully-built/saas-kit" | bunx @carefully-built/cli add segmented-toggle | | select | import { Select, SelectContent, SelectItem, SelectScrollDownButton, SelectScrollUpButton, SelectTrigger } from "@carefully-built/saas-kit" | bunx @carefully-built/cli add select | | sheet | import { Sheet, SheetContent, SheetDescription, SheetHeader, SheetTitle } from "@carefully-built/saas-kit" | bunx @carefully-built/cli add sheet | | skeleton | import { Skeleton } from "@carefully-built/saas-kit" | bunx @carefully-built/cli add skeleton | | smart-table | import { ActionHandlers, ActionType, Column, ColumnAlign, PaginationConfig, SmartTable } from "@carefully-built/saas-kit" | bunx @carefully-built/cli add smart-table | | switch | import { Switch } from "@carefully-built/saas-kit" | bunx @carefully-built/cli add switch | | table | import { Table, TableBody, TableCaption, TableCell, TableFooter, TableHead } from "@carefully-built/saas-kit" | bunx @carefully-built/cli add table | | table-toolbar | import { CustomTableToolbarFilter, FilterConfig, FilterDropdown, FilterOption, SearchInput, TableToolbar } from "@carefully-built/saas-kit" | bunx @carefully-built/cli add table-toolbar | | tabs | import { Tabs, TabsContent, TabsList, TabsScrollArea, TabsTrigger, tabsListVariants } from "@carefully-built/saas-kit" | bunx @carefully-built/cli add tabs | | textarea | import { Textarea } from "@carefully-built/saas-kit" | bunx @carefully-built/cli add textarea | | tooltip | import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "@carefully-built/saas-kit" | bunx @carefully-built/cli add tooltip | | use-media-query | import { useIsMobile, useMediaQuery } from "@carefully-built/saas-kit" | bunx @carefully-built/cli add use-media-query | | user-picker | import { UserPicker } from "@carefully-built/saas-kit" | bunx @carefully-built/cli add user-picker | | user-picker-utils | import { UserPickerCopy, UserPickerOption, buildUserInitials, filterSelectableUsers, filterUsersBySearch, formatSelectedUserSummary } from "@carefully-built/saas-kit" | bunx @carefully-built/cli add user-picker-utils |

Some entries export several related components, hooks, helpers, and types from one module. TypeScript autocomplete will show the full API after installing the kit.

Editable Source With The CLI

Use the CLI when a component should become local code that you can edit directly.

bunx @carefully-built/cli list
bunx @carefully-built/cli add button
bunx @carefully-built/cli add smart-table
bunx @carefully-built/cli add responsive-sheet

The CLI copies the component source and its local dependency closure into your app. It reads common shadcn project conventions such as components.json aliases and tsconfig.json paths.

Import vs Eject

Import from @carefully-built/saas-kit when:

  • you want package updates and bug fixes
  • the component should stay shared across apps
  • product-specific differences can be handled with props, slots, className, or classes

Use @carefully-built/cli add when:

  • the component needs local product behavior
  • design needs to diverge from the shared package
  • you want to own and edit every line in the consuming app
  • the component should follow the app's normal source-control workflow

Copy And Localization

SaaS kit defaults are English. Italian or other localized apps should pass app-specific copy through the component label/config props. Components with user-facing copy are designed to expose labels or configuration objects so package defaults do not force one language across all apps.