10.2k

Changelog

Breaking changes, migration guides, and notable updates.

June 11, 2026

Context Menu

@coss/context-menu is a new registry component for right-click and long-press action menus anchored to the pointer. See the Context Menu docs for installation and examples.

Install:

No migration from an existing coss primitive—opt in where you need pointer-triggered menus instead of (or alongside) Menu.

MenuLinkItem and ContextMenuLinkItem are styled wrappers for Base UI LinkItem. They match MenuItem / ContextMenuItem visually and default closeOnClick to true so the menu closes on navigation.

LinkItem renders a native <a> when you pass href. If you were already using render={<Link href="..." />} (or another router link), keep render on the link item — swap the component name only, do not drop render for href alone.

Use href only for plain anchor links with no router Link.

Migration:

Plain anchor (no router Link):

For context menus:

Existing MenuItem render={<Link … />} usage keeps working; migrate when you touch those menus.

Agent migration prompt:

May 29, 2026

Scroll Area

ScrollArea adds an optional fill prop (default false). When fill is enabled, size-full is applied to ScrollArea.Content so inner flex layouts can use the full viewport height (for example, pinning a footer with mt-auto in a sidebar).

Most scroll areas should keep the default. Opt in only when the scroll container must stretch rather than size to its children.

Migration:

No change required for existing ScrollArea usage (lists, dialogs, comboboxes, command menus). For custom sidebars or other flex columns with mt-auto footers inside a scroll area, opt in explicitly:

SidebarContent from @coss/sidebar already passes fill—update your local sidebar.tsx copy if you vendor the component.

Agent migration prompt:

Apr 17, 2026

Form

The Form component (form.tsx) no longer applies default layout classes (flex, flex-col, gap-4, w-full). It is a thin wrapper around Base UI only; pass className wherever you need a vertical field stack, width constraints, or dialog/sheet layout.

Migration:

For a typical stacked-field form, restore the previous default explicitly:

For dialogs, sheets, and drawers, keep DialogHeader (or SheetHeader, DrawerHeader) outside the form. Wrap DialogPanel and DialogFooter (or sheet/drawer equivalents) in <Form className="contents"> or a native <form className="contents">. display: contents keeps header, panel, and footer as the direct flex children of the popup’s column layout so DialogPanel scroll and height constraints work correctly.

Agent migration prompt:

Apr 14, 2026

OTP Field

The input-otp.tsx registry component has been removed in favor of otp-field.tsx (@coss/otp-field), which wraps Base UI OTP Field. See the OTP Field docs and migration guide for API details.

Migration:

Agent migration prompt:

Apr 12, 2026

Table

Table now supports an optional variant prop: "default" (the default) or "card". Omitting it keeps the same appearance as before. Use variant="card" for the card-style grid (separated rows, rounded cells, updated hover/footer treatment)—including tables inside a Frame or CardFrame as shown in the Table docs.

Migration:

No change required for existing tables. Opt in where you want the card-style table:

Agent migration prompt:

Mar 20, 2026

Toggle Group

Toggle was renamed to ToggleGroupItem in toggle-group.tsx to avoid a naming conflict with the standalone Toggle export.

Migration:

Agent migration prompt:

coss.com ui

Built by and for the team of Cal.com, Inc. — the leading commercial open source company (“coss”).