Minor changes
- 6a40edf
add 'Delete Resource' block
Clock releases and the inherited Cloudflare Kumo history preserved for provenance.
Versions 2.8.0 and later belong to the Clock release line. Earlier entries and their source links are retained from upstream Cloudflare Kumo.
add 'Delete Resource' block
The first stable release of Kumo, Cloudflare's component library.
Blocks (PageHeader, ResourceListPage) are no longer exported from @cloudflare/kumo. They must now be installed via the CLI:
npx @cloudflare/kumo init # Initialize kumo.json
npx @cloudflare/kumo add PageHeader
Blocks are copied to your project for full customization with imports automatically transformed to @cloudflare/kumo.
HTMLInputElement → HTMLButtonElementInputHTMLAttributes (explicit props only)onChange/onValueChange → onCheckedChange (deprecated handlers still work)The text prop is deprecated in favor of children:
// Before (deprecated)
<Banner text="Your message" />
// After (preferred)
<Banner>Your message</Banner>
render prop for framework routingSub, SubTrigger, SubContent) and radio items (RadioGroup, RadioItem)kumo/no-deprecated-props detects @deprecated JSDoc tagsIf you were using blocks (note: they were never officially exported):
# 1. Initialize configuration
npx @cloudflare/kumo init
# 2. Install blocks
npx @cloudflare/kumo add PageHeader
npx @cloudflare/kumo add ResourceListPage
# 3. Update imports to the local path shown after installation
// Before
<Checkbox onChange={(e) => setValue(e.target.checked)} />;
const ref = useRef<HTMLInputElement>(null);
// After
<Checkbox onCheckedChange={(checked) => setValue(checked)} />;
const ref = useRef<HTMLButtonElement>(null);
// Before (still works, but deprecated)
<Banner text="Your message" />
// After
<Banner>Your message</Banner>
feat(banner): add children prop, deprecate text prop
Banner now supports children for content, which is the preferred API. The text prop is deprecated but still works for backwards compatibility.
// Preferred (new)
<Banner>Your message</Banner>
<Banner icon={<Icon />}>Your message</Banner>
// Deprecated (still works)
<Banner text="Your message" />
The text prop will be removed in a future major version.
feat(cli): blocks are now distributed via CLI instead of npm exports
New CLI commands for block management:
kumo init - Initialize kumo.json configuration filekumo blocks - List all available blocks for CLI installationkumo add <block-name> - Install a block to your project with transformed importsBlocks are copied to your project for full customization, with relative imports automatically converted to @cloudflare/kumo.
Add lint rule to detect usage of deprecated props on Kumo components.
kumo/no-deprecated-props lint rule automatically detects deprecated props from @deprecated JSDoc tagsdeprecated field for props with @deprecated annotations@deprecated badge for deprecated props in API reference tablesTo deprecate a prop, add a JSDoc comment:
interface MyComponentProps {
/** @deprecated Use `newProp` instead */
oldProp?: string;
}
The lint rule will flag usage and show a helpful message:
The `oldProp` prop on <MyComponent> is deprecated. Use `newProp` instead.
Add nested menu (submenu) and RadioGroup/RadioItem support to DropdownMenu
DropdownMenu.Sub, DropdownMenu.SubTrigger, and DropdownMenu.SubContent for nested submenusDropdownMenu.RadioGroup, DropdownMenu.RadioItem, and DropdownMenu.RadioItemIndicator for single-selection menusSubTrigger styling to match Item componentfix(checkbox): make label clickable, add new onCheckedChange API
onCheckedChange callback (preferred over deprecated onChange/onValueChange)HTMLButtonElement (aligns with Base UI implementation)Add Link component with Base UI composition API
Link component for consistent inline text linksrender prop for composition with framework-specific links (e.g., React Router)useRender hook for proper ref/event merginginline (default), current, and plainLink.ExternalIcon subcomponent for external link indicatorsLinkProvider for framework-agnostic routingfeat: theme generator, color token consolidation, component catalog
run component-registry when starting docs site
Fix color contrast issue in Dropdown danger variant by using subtle bg-kumo-danger/5 background instead of bg-kumo-danger-tint, improving readability while maintaining the visual "danger" cue
Add render prop for Tabs component
Fix Combobox dropdown not scrolling when it has many items. The overflow-hidden class was overriding overflow-y-auto, causing content to be clipped instead of scrollable.
fix: improve primary button hover/focus contrast by using bg-hover-selected instead of bg-primary/70
Adds disabled prop for table cell checkboxes
fix(tabs): adjust segmented indicator border radius for proper visual nesting
Ship component registry with @cloudflare/kumo module
feat(popover): Add new Popover component
Adds a new Popover component based on Base UI's popover primitive. The Popover provides an accessible popup anchored to a trigger element, with support for:
Popover, Popover.Trigger, Popover.Content, Popover.Title, Popover.Description, Popover.Closeside (top, bottom, left, right), align (start, center, end), sideOffsetopenOnHover behavioropen and onOpenChange propsMigrate documentation site from React Router (kumo-docs) to Astro (kumo-docs-astro) as the primary docs platform, consolidate CI/CD pipelines, and add version display features.
Bump node to v24.12.0
Add Figma plugin for UI kit generation
packages/figma/ (@cloudflare/figma-plugin)feat(kumo): add command-palette component
semantic color changes and more consolidation for non-text colors
feat(tooltip): Update tooltip to use bg-kumo-base with proper light/dark mode support
Changes the tooltip background from a fixed dark color to a surface-aware background that adapts to light and dark modes. Implements Base UI's 3-path arrow SVG approach for pixel-perfect border alignment across color modes.
fix(kumo): updated version in package.json (unintentionally downgraded)
feat(PageHeader): add optional title and description props
title?: string and description?: string props to PageHeader blockWithout this feature, pages using only PageHeader would lack a semantic page title (h1), requiring developers to manually add titles elsewhere. This creates:
With this feature, PageHeader provides a standardized way to include accessible page titles that:
Breadcrumbs serve navigation purposes and cannot replace semantic page titles. Both should coexist:
Add table component
kumo-docslighter red in light mode
Add Label component with standardized label features for form fields
label prop now accepts ReactNode (not just strings)required={false} shows "(optional)" textlabelTooltip prop for info icon with hover tooltipAdd Radio component for single-selection from a set of options
Radio.Group and Radio.Item compound components built on Base UI primitivescontrolPosition prop for label placement ("start" or "end")Add Storybook preview deployments and MR reporter system
storybook.staging.kumo-ui.com on merge to mainAdd variant prop to Tabs component with 'segmented' (default) and 'underline' options
Fix label not appearing in Combobox unless a description or error given.
fix bug where delete user external links were being treated as internal navigation and appending urls to domain
Fix Base UI nativeButton warning in Switch component by adding nativeButton prop to BaseSwitch.Root
Update deployment configs to enable preview urls
added a next / previous form of pagination
Modernize Active Sessions page with updated Kumo design patterns
Add bg-kumo-base as default background for Surface component
Fix Combobox button styles
Migrate to @base-ui/react V1
Breaking Change: Updated from @base-ui-components/react to the new @base-ui/react V1 package.
@base-ui-components/react → @base-ui/react^1.0.0-rc.0 > ^1.0.0This is a major version bump because the underlying Base UI package has changed. While the Kumo API remains the same, you'll need to:
pnpm install
After merging this PR, run:
# Install the new @base-ui/react package
pnpm install
# Regenerate primitive files with new package references
pnpm --filter @cloudflare/kumo build:primitives
# Rebuild the package
pnpm --filter @cloudflare/kumo build
# Run tests to verify everything works
pnpm --filter @cloudflare/kumo test:run
@base-ui-components/react/* to @base-ui/react/*generate-primitives.ts script to reference new packagevite.config.ts manualChunks to match new package nameAdd built-in Field integration to form components with automatic layout
New Features:
label, description, and error props for built-in Field wrapper support:has() selectorsAccessibility:
Breaking Changes:
Migration:
// Before: Explicit Field wrapper
<Field label="Email" description="...">
<Input placeholder="you@example.com" />
</Field>
// After: Built-in Field API (recommended)
<Input
label="Email"
description="..."
placeholder="you@example.com"
/>
change error color for text component to match field input error colors
secondary-destructive button variant
fix: update changeset validation logic
Complete semantic color tokens migrated from Stratus app
[data-theme] and [data-mode] attributesAdd data-theme and data-mode attributes to your root element:
// React example
<html data-theme="kumo" data-mode={isDark ? "dark" : "light"}>
// Static HTML
<html data-theme="kumo" data-mode="light">
data-theme: Set to "kumo" (default theme) or other theme variants like "fedramp"data-mode: Set to "light" or "dark" to control color schemeIf no data-mode is set, the system defaults to light mode.
tab and text style fixes; storybook theme select always visible
inputs with built-in fields
Bundle Base UI primitives with granular exports and fix critical compatibility issues
Added granular exports for all 37 Base UI primitives alongside the existing barrel export. This enables better tree-shaking and smaller bundle sizes when using individual primitives.
// Barrel export (imports all primitives)
import { Slider, Popover, Tooltip } from "@cloudflare/kumo/primitives";
// Granular exports (tree-shakeable, recommended)
import { Slider } from "@cloudflare/kumo/primitives/slider";
import { Popover } from "@cloudflare/kumo/primitives/popover";
Available primitives: accordion, alert-dialog, autocomplete, avatar, button, checkbox, checkbox-group, collapsible, combobox, context-menu, dialog, direction-provider, field, fieldset, form, input, menu, menubar, meter, navigation-menu, number-field, popover, preview-card, progress, radio, radio-group, scroll-area, select, separator, slider, switch, tabs, toast, toggle, toggle-group, toolbar, tooltip.
Fixed critical compatibility issues with Jest and React Server Components by improving the build configuration.
preserveModules: true, which preserved the pnpm directory structure (node_modules/.pnpm/) in dist. This caused Jest to fail parsing ESM imports because Jest's transformIgnorePatterns blocks nested node_modules by default.rollup-plugin-preserve-directives plugin only works with preserveModules: true. When bundling with preserveModules: false, all "use client" directives were stripped, breaking components in Next.js App Router (RSC).preserveModules: false to eliminate nested node_modules/.pnpm/ pathsoutput.banner to inject the directive into all output chunks (since the plugin doesn't work without preserveModules)manualChunks to split large vendor dependencies for better caching:
vendor-base-ui (598 KB, 152 KB gzipped) - Base UI componentsvendor-styling (74 KB, 13 KB gzipped) - clsx + tailwind-mergevendor-floating-ui (33 KB, 10 KB gzipped) - Floating UI positioningvendor-utils (24 KB, 7 KB gzipped) - tabbable, reselect, etc.kumo cli
semantic text colors - consolidation
Removed label prop from input components. Prefer using Field to compose a label with an input.
consolidate blue text to match banner blue text across: badge, expandable, text components
consolidate on the green text tokens
Update kumo package to use literal depdency versions for better yarn linking/portal support.
improve input group label to be semantic and use htmlFor
Combobox Type Fixes
any type and eslint-disable commentsComboboxBase.Root.Props<Value, Multiple> from base-ui's namespacefix remaining lint errors and increase lint warn -> error
Update reamde documentation
Consolidate AGENTS.md and CLAUDE.md LLM instructions
fix resource-list href lint errors
Improve expandable component semantics
Update Storybook imports from @storybook/react to @storybook/react-vite for Storybook 10 compatibility. Also removes generatedAt timestamp from component registry to prevent merge conflicts during rebases.
improve sensitive input component - semantics, button nesting, labelling, screen reader experience
Fix: Resolve type check errors across components/blocks/layouts Fix: Export Kumo Breadcrumb as Breadcrumbs + Documentation Improvements Fix: MenuBar -Bypass the React 19 type checking issue with IconContext.Provider
improve semantics and labelling for date picker component
docs updates and semantic colors for banner
ship dark-mode color scheme styles from kumo lib instead of setting it at the app
Adds Storybook 10 integration to the Kumo component library for interactive component development, testing, and documentation. Includes stories for 29 components, automated plop generator updates, and documentation.
enforce button background transparency for tabs
Combobox - Adjust multiple select height with standard Kumo component height
Checkbox indeterminate state
Improve development workflow with 10x faster rebuilds and comprehensive documentation
Add development mode with optimized builds, skip minification and enable incremental TypeScript compilation. Update all READMEs and contributing docs with clear guidance on Storybook (recommended) vs watch build workflows. Add story file documentation to scaffolding sections and two-terminal setup instructions for testing components in docs.
Enhance CICD to publish beta releases
Fix: Resolve type check erros across components/blocks/layouts Fix: Export Kumo Breadcrumb as Breadcrumbs + Documentation Improvements Fix: MenuBar -Bypass the React 19 type checking issue with IconContext.Provider