Shipped/Regular release update January 22nd, 2025

January 22, 2025

Regular release update January 22nd, 2025
  • Loading large compositions and patterns into the editor is now significantly faster

The project map has had visual design updates and some flow changes around editing a project map node.

  • The currently selected project map node is now automatically scrolled to in long lists (i.e. link fields, moving nodes, redirects, etc)
  • You can now manage the attached project map node of a composition directly from the composition editor for tasks such as updating or translating path segments.
  • Improved the redirect detection method so we only show the redirect checkbox if the node is truly being moved.
  • You can now move a project map node when in the edit drawer
  • Reordering project map nodes is more consistent
  • Fix associated with duplicating a project map node several times in a row
  • Locales and query string forms have now been moved to a nested drawer
  • Adding multiple links within a rich text field to the same dynamic project map node works correctly
  • Various bug fixes

  • The @uniformdev/canvas package is now compatible with Node 22.
  • Next.js 15.1 is now supported for App Router.
    ⚠️ Older versions of Next.js are not compatible with Uniform v20 when using App Router.

We’ve released a new major version of our SDK v20.0.0, with the following breaking changes:

  • canvas: the localize() function's deprecated legacy props format has been removed. The LocalizeModernOptions type was also renamed to LocalizeOptions.
  • canvas: the walkComponentTree() function has been removed. Use walkNodeTree() instead.
  • canvas: the ComponentLocationReferenceV2 type has been renamed to ComponentLocationReference.
  • canvas: conditional visibility related functions are no longer marked deprecated [now considered stable]
  • canvas: the CompositionGetOrderBy type was removed. This was no longer used.
  • canvas: the CompositionIssue type was removed. Use DataResolutionIssue instead.
  • canvas: the CompositionPatternIssue type was removed. Use PatternIssue instead.
  • canvas: the CompositionDiagnostics type was removed. Use EdgehancersDiagnostics instead.
  • canvas: the CompositionDataDiagnostic type was removed. Use DataDiagnostic instead.
  • canvas: the ProjectMapLinkComponentParameterValue type was removed. Use ProjectMapLinkParamValue instead.
  • canvas: the LinkComponentParameterValue type was removed. Use LinkParamValue instead.
  • canvas: the getPropertyValue() function was removed.
  • canvas: the following legacy preview related functions have been removed: createEventBus(), getChannelName(), and subscribeToComposition()
  • canvas-react: the children property was removed from UniformPlaygroundProps. It had no effect already.
  • canvas-react: the UniformSlot component no longer accepts children. Use the wrapperComponent prop instead. See migration guide below.
    note: this does not affect app router.
  • canvas-react: the useCompositionEventEffect() hook has been removed.
  • canvas-vue: the useCompositionEventEffect() hook has been removed.
  • cli: the pattern command, as well as using pattern in the sync config, no longer exists. Use componentPattern, compositionPattern, and entryPattern instead.
  • cli: we no longer consider legacy file sync location when doing a pull/sync (last used in packages older than v19.88.0). You can re-pull your project if you have old backups.
  • cli: The legacy CLI file hashing was removed. This will only affect apps using a CLI version older than v19.88.0.
  • context-devtools: the <ToggleEmbeddedContextDevTools /> component has been removed. Use the Context Chrome extension instead.
  • mesh-sdk-react: The following deprecated components have been removed:
    • ProductPreviewList
    • ProductQuery
    • ProductSearch
    • ProductSearchRow
    • ProductSelectedItem
    • SelectionField
    • DamSelectedItem
    • DefaultSearchRow
    • DefaultSelectedItem
    • EntrySearch
    • ResolvableLoadingValue
    • These components are replaced with ObjectSearch* components
  • mesh-sdk-react: the countValue prop has been removed from the QueryFilterProps type
  • mesh-sdk-react: the label property has been removed from the ObjectSearchFilterContainer component
  • mesh-sdk-react: the id and name have been removed from the ObjectSearchFilter's selectOptions prop. Use label and value instead.
  • mesh-sdk-react: the name and subtitle props have been removed from the SelectedItemProps type. Use title instead.
  • mesh-sdk-react: the image prop has been removed from ObjectSearchListItem - use imageUrl instead.
  • mesh-sdk-react: the isMulti prop has been removed from ObjectSearchListItem - use the isMulti prop on ObjectSearchProvider instead.
  • mesh-sdk-react: Search & Filtering-related types are no longer in beta.
  • mesh-sdk-react: The disableReset prop has been removed from InputVariables - the computation is now automatic. The showMenuPosition prop is no longer deprecated as it is shipped.
  • mesh-sdk-react: the hasReferencedVariables() function is removed. Use the same function from @uniformdev/canvas instead.
  • project-map: Editions-related types are no longer marked deprecated as the feature has shipped.
  • design-system: The <Badge/> component has been removed. <Chip /> can be used instead.
  • design-system: The withoutPortal prop has been removed from <ButtonWithMenu />. Use portal instead.
  • design-system: The isIndented and isCompact props on <Details /> are no longer beta/deprecated
  • design-system: The MediaCard component is removed. Use the <GridListItem /> component instead.
  • design-system: The IntegrationHeaderSection component has been removed.
  • design-system: The menuLabel prop is removed from <Menu />. Place a label on the menu trigger instead.
  • design-system: The forceVisible prop is removed from <Menu />. Use the open prop instead.
  • design-system: The <MenuItemHeading/> component is removed. Use <MenuGroup /> instead.
  • design-system: The wrapperClassName prop is removed from <Modal />
  • design-system: The isBound prop is removed from <LabelLeadingIcon /> - use isActive instead.
  • design-system: The ConnectToDataElementButton component is removed. Use <LabelLeadingIcon /> instead.
  • design-system: The ParameterDataResource component is removed.
  • design-system: The baseId prop on <Popover /> is removed.
  • design-system: Props related to parameter overriding are no longer marked deprecated, they are stable.
  • design-system: The <ProgressBar /> component is no longer marked beta
  • design-system: The <ShortcutRevealer /> and <ShortcutContext /> components are removed. Use useShortcut instead.
  • design-system: The asSpan prop has been removed from the Heading component. Use as=span instead.
  • design-system : The <AnimationFile /> component has been removed. Use <LoaderOverlay /> or <Spinner />
  • design-system: Removed reakit completely in favour of ariakit
  • design-system: Refactor <Button /> component to use ariakit
  • design-system: Refactor <ButtonWithMenu /> component to use ariakit
  • design-system: Refactor <DateTimePicker /> component to use ariakit popover
  • design-system: Update broken props after refactor on <IconButton />
  • design-system: Remove unused capture prop which was only present for reakit fix on <Input /> and <Textarea /> components
  • design-system: Refactor <Tooltip /> from using reakit to ariakit
  • design-system: Remove reakitfrom package.json
  • storybook: Remove red styling on boolean inputs
  • context-ui: Remove reakit dependency
  • context-devtools: Remove reakit dependency

Before:

import { UniformSlot } from '@uniformdev/canvas-react'; export const Carousel = () => { return ( <div className="carousel"> <UniformSlot name="slides"> {({ child, component, key }) => ( <div className="carousel-item" key={key}> {child} </div> )} </UniformSlot> </div> ); };

After:

import { UniformSlot, UniformSlotWrapperComponentProps } from '@uniformdev/canvas-react'; export const Carousel = () => { return ( <div className="carousel"> <UniformSlot name="slides" wrapperComponent={CarouselItemsWrapper} /> </div> ); }; export const CarouselItemsWrapper = ({ items }: UniformSlotWrapperComponentProps) => { return <div className="carousel-items">{items}</div>; };

The React Server Components packages have been updated to target Next.js 15.1. This update introduces several breaking changes, including the conversion of certain synchronous functions to asynchronous. As a result, these functions must now be awaited before use.

To facilitate a smooth transition, refer to the official Next.js 15.1 upgrade guide provided by Vercel. The guide includes helpful codemods to streamline the upgrade process.

Key Highlights of Next.js 15.1

  • React 19 Support
    Next.js 15.1 now supports React 19, which has reached stable status. You can continue using React 18 or integrate with 19 into your projects confidently.
  • Turbopack Enhancements
    The uniform.server.config.js configuration file now supports Turbopack. Additionally, TypeScript can be used to define your configuration.
  • Fetch Caching Updates
    Changes to fetch caching behavior in Next.js 15 impact how cache strategies are applied. By default, fetch calls without a specified cache strategy will no longer be cached. For more details, refer to the caching semantics documentation.
    If you are using Uniform’s exported functions and pre-configured clients to retrieve data from our APIs, rest assured that caching behavior will remain consistent with previous versions. This is because Uniform explicitly defines a cache strategy for every request.

For additional details about the changes in Next.js 15 and 15.1, consult the resources below:

Bug FixesBreaking ChangesImprovements