App UI Kit v4 to v5 Migration Guide
Version 5 of the App UI Kit includes new design tokens that replace the v4 tokens with a new naming system and improved semantic structure.
This page provides the complete mapping from v4 to v5 design tokens to help you upgrade your app.
For more information about design tokens and when to use them, see the design tokens overview.
There are also some breaking changes in the component library. For the full list of changes, see the changelog .
What's changing?
The App UI Kit v5 introduces a new design token system with:
- Improved semantic naming: Tokens now have clearer, more descriptive names.
- Better organization: Tokens are grouped by purpose (action, content, feedback, and so on).
- Enhanced consistency: More consistent naming patterns across all token types.
Do I need to migrate?
-
If you only use App UI Kit components: You don't need to do anything. The components will automatically use the new v5 tokens.
-
If you use design tokens directly in your CSS or TypeScript: You'll need to update your code to use the new v5 token names.
How to automatically migrate
Run the app-ui-kit-v5
Canva CLI apps migrate command in your app's project directory to use the Canva CLI to automatically migrate your app to use App UI Kit v5:
npx @canva/cli@latest apps migrate app-ui-kit-v5
It automatically runs through the code changes required to install the updated dependencies, migrates design tokens, and changes component properties.
How to manually migrate
- Update your dependencies: Upgrade to the latest version of
@canva/app-ui-kit
. - Find and replace tokens: Use the tables below to map your v4 tokens to v5 tokens.
- Update components: There are some small breaking changes to component properties in v5.
- Test your app: Verify that your app still looks and works correctly.
Migration example
Here's an example of migrating a CSS class from v4 to v5 tokens:
Before (v4 tokens):
.my-component {background-color: var(--ui-kit-color-primary);color: var(--ui-kit-color-typography-primary);padding: var(--ui-kit-space-2);}
After (v5 tokens):
.my-component {background-color: var(--ui-kit-color-action-primary-bg);color: var(--ui-kit-color-content-fg);padding: var(--ui-kit-space-200);}
Migration mappings
The tables below show the complete mapping from v4 to v5 design tokens.
Color tokens
Removed V4 variable | Replacement V5 variable |
---|---|
--ui-kit-color-typography-primary | --ui-kit-color-content-fg |
--ui-kit-color-typography-secondary | --ui-kit-color-content-subtle-fg |
--ui-kit-color-typography-tertiary | --ui-kit-color-content-subtlest-fg |
--ui-kit-color-typography-quaternary | --ui-kit-color-content-placeholder-fg |
--ui-kit-color-typography-placeholder | --ui-kit-color-content-placeholder-fg |
--ui-kit-color-typography-positive | --ui-kit-color-content-positive-fg |
--ui-kit-color-typography-info | --ui-kit-color-content-info-fg |
--ui-kit-color-typography-warn | --ui-kit-color-content-warn-fg |
--ui-kit-color-typography-critical | --ui-kit-color-content-critical-fg |
--ui-kit-color-typography-critical-hover | --ui-kit-color-link-critical-fg-hovered |
--ui-kit-color-typography-critical-active | --ui-kit-color-link-critical-fg-pressed |
--ui-kit-color-typography-link | --ui-kit-color-link-fg |
--ui-kit-color-typography-link-hover | --ui-kit-color-link-fg-hovered |
--ui-kit-color-typography-link-active | --ui-kit-color-link-fg-pressed |
--ui-kit-color-contrast | --ui-kit-color-feedback-overlay-bg |
--ui-kit-color-contrast-fore | --ui-kit-color-feedback-overlay-fg |
--ui-kit-color-neutral-fore-disabled | --ui-kit-color-handle-bg-disabled |
--ui-kit-color-neutral-fore-low | --ui-kit-color-content-fg |
--ui-kit-color-positive-hover | --ui-kit-color-action-secondary-bg-hovered |
--ui-kit-color-positive-active | --ui-kit-color-action-secondary-bg-pressed |
--ui-kit-color-positive-disabled | --ui-kit-color-action-bg-disabled |
--ui-kit-color-info-hover | --ui-kit-color-action-secondary-bg-hovered |
--ui-kit-color-info-active | --ui-kit-color-action-secondary-bg-pressed |
--ui-kit-color-info-disabled | --ui-kit-color-action-bg-disabled |
--ui-kit-color-info-fore-disabled | --ui-kit-color-action-fg-disabled |
--ui-kit-color-warn-hover | --ui-kit-color-action-secondary-bg-hovered |
--ui-kit-color-warn-active | --ui-kit-color-action-secondary-bg-pressed |
--ui-kit-color-warn-disabled | --ui-kit-color-action-bg-disabled |
--ui-kit-color-critical | --ui-kit-color-feedback-critical-bg |
--ui-kit-color-critical-fore | --ui-kit-color-feedback-critical-fg |
--ui-kit-color-border-active | --ui-kit-color-action-selected-border |
--ui-kit-color-primary | --ui-kit-color-action-primary-bg |
--ui-kit-color-primary-hover | --ui-kit-color-action-primary-bg-hovered |
--ui-kit-color-primary-active | --ui-kit-color-action-primary-bg-pressed |
--ui-kit-color-primary-disabled | --ui-kit-color-action-bg-disabled |
--ui-kit-color-primary-fore | --ui-kit-color-action-primary-fg |
--ui-kit-color-primary-fore-disabled | --ui-kit-color-action-fg-disabled |
--ui-kit-color-secondary | --ui-kit-color-action-secondary-bg |
--ui-kit-color-secondary-hover | --ui-kit-color-action-secondary-bg-hovered |
--ui-kit-color-secondary-active | --ui-kit-color-action-secondary-bg-pressed |
--ui-kit-color-secondary-disabled | --ui-kit-color-action-bg-disabled |
--ui-kit-color-secondary-fore | --ui-kit-color-action-secondary-fg |
--ui-kit-color-secondary-fore-disabled | --ui-kit-color-action-fg-disabled |
--ui-kit-color-tertiary | --ui-kit-color-action-tertiary-bg |
--ui-kit-color-tertiary-hover | --ui-kit-color-action-tertiary-bg-hovered |
--ui-kit-color-tertiary-active | --ui-kit-color-action-tertiary-bg-pressed |
--ui-kit-color-tertiary-disabled | --ui-kit-color-action-subtle-bg-disabled |
--ui-kit-color-tertiary-fore | --ui-kit-color-action-tertiary-fg |
--ui-kit-color-tertiary-fore-disabled | --ui-kit-color-action-subtle-fg-disabled |
--ui-kit-color-contrast-hover | --ui-kit-color-action-overlay-bg-hovered |
--ui-kit-color-contrast-active | --ui-kit-color-action-overlay-bg-pressed |
--ui-kit-color-contrast-disabled | --ui-kit-color-action-overlay-bg-disabled |
--ui-kit-color-contrast-fore-disabled | --ui-kit-color-action-overlay-fg-disabled |
--ui-kit-color-neutral | --ui-kit-color-ui-neutral-bg |
--ui-kit-color-neutral-hover | --ui-kit-color-ui-neutral-strong-bg |
--ui-kit-color-neutral-active | --ui-kit-color-ui-neutral-bg |
--ui-kit-color-neutral-disabled | --ui-kit-color-ui-neutral-bg |
--ui-kit-color-neutral-fore | --ui-kit-color-content-fg |
--ui-kit-color-neutral-low | --ui-kit-color-ui-neutral-subtle-bg |
--ui-kit-color-positive | --ui-kit-color-feedback-positive-bg |
--ui-kit-color-positive-low | --ui-kit-color-feedback-positive-subtle-bg |
--ui-kit-color-positive-fore | --ui-kit-color-feedback-positive-fg |
--ui-kit-color-positive-fore-low | --ui-kit-color-feedback-positive-subtle-fg |
--ui-kit-color-positive-fore-disabled | --ui-kit-color-action-fg-disabled |
--ui-kit-color-info | --ui-kit-color-feedback-info-bg |
--ui-kit-color-info-low | --ui-kit-color-feedback-info-subtle-bg |
--ui-kit-color-info-fore | --ui-kit-color-feedback-info-fg |
--ui-kit-color-info-fore-low | --ui-kit-color-feedback-info-subtle-fg |
--ui-kit-color-warn | --ui-kit-color-feedback-warn-bg |
--ui-kit-color-warn-low | --ui-kit-color-feedback-warn-subtle-bg |
--ui-kit-color-warn-fore | --ui-kit-color-feedback-warn-fg |
--ui-kit-color-warn-fore-low | --ui-kit-color-feedback-warn-subtle-fg |
--ui-kit-color-warn-fore-disabled | --ui-kit-color-action-fg-disabled |
--ui-kit-color-critical-hover | --ui-kit-color-action-critical-bg-hovered |
--ui-kit-color-critical-active | --ui-kit-color-action-critical-bg-pressed |
--ui-kit-color-critical-disabled | --ui-kit-color-action-bg-disabled |
--ui-kit-color-critical-low | --ui-kit-color-feedback-critical-subtle-bg |
--ui-kit-color-critical-fore-low | --ui-kit-color-feedback-critical-subtle-fg |
--ui-kit-color-critical-fore-disabled | --ui-kit-color-action-fg-disabled |
--ui-kit-color-border | --ui-kit-color-control-border |
--ui-kit-color-border-hover | --ui-kit-color-control-border-hovered |
--ui-kit-color-border-disabled | --ui-kit-color-control-border-disabled |
--ui-kit-color-border-critical | --ui-kit-color-control-critical-border |
--ui-kit-color-border-low | --ui-kit-color-ui-border |
--ui-kit-color-border-strong | --ui-kit-color-control-strong-border |
--ui-kit-color-overlay | --ui-kit-color-ui-overlay-bg |
Removed V4 variable | Replacement V5 variable |
---|---|
colorTypographyPrimary | colorContentFg |
colorTypographySecondary | colorContentSubtleFg |
colorTypographyTertiary | colorContentSubtlestFg |
colorTypographyQuaternary | colorContentPlaceholderFg |
colorTypographyPlaceholder | colorContentPlaceholderFg |
colorTypographyPositive | colorContentPositiveFg |
colorTypographyInfo | colorContentInfoFg |
colorTypographyWarn | colorContentWarnFg |
colorTypographyCritical | colorContentCriticalFg |
colorTypographyCriticalHover | colorLinkCriticalFgHovered |
colorTypographyCriticalActive | colorLinkCriticalFgPressed |
colorTypographyLink | colorLinkFg |
colorTypographyLinkHover | colorLinkFgHovered |
colorTypographyLinkActive | colorLinkFgPressed |
colorContrast | colorFeedbackOverlayBg |
colorContrastFore | colorFeedbackOverlayFg |
colorNeutralForeDisabled | colorHandleBgDisabled |
colorNeutralForeLow | colorContentFg |
colorPositiveHover | colorActionSecondaryBgHovered |
colorPositiveActive | colorActionSecondaryBgPressed |
colorPositiveDisabled | colorActionBgDisabled |
colorInfoHover | colorActionSecondaryBgHovered |
colorInfoActive | colorActionSecondaryBgPressed |
colorInfoDisabled | colorActionBgDisabled |
colorInfoForeDisabled | colorActionFgDisabled |
colorWarnHover | colorActionSecondaryBgHovered |
colorWarnActive | colorActionSecondaryBgPressed |
colorWarnDisabled | colorActionBgDisabled |
colorCritical | colorFeedbackCriticalBg |
colorCriticalFore | colorFeedbackCriticalFg |
colorBorderActive | colorActionSelectedBorder |
colorPrimary | colorActionPrimaryBg |
colorPrimaryHover | colorActionPrimaryBgHovered |
colorPrimaryActive | colorActionPrimaryBgPressed |
colorPrimaryDisabled | colorActionBgDisabled |
colorPrimaryFore | colorActionPrimaryFg |
colorPrimaryForeDisabled | colorActionFgDisabled |
colorSecondary | colorActionSecondaryBg |
colorSecondaryHover | colorActionSecondaryBgHovered |
colorSecondaryActive | colorActionSecondaryBgPressed |
colorSecondaryDisabled | colorActionBgDisabled |
colorSecondaryFore | colorActionSecondaryFg |
colorSecondaryForeDisabled | colorActionFgDisabled |
colorTertiary | colorActionTertiaryBg |
colorTertiaryHover | colorActionTertiaryBgHovered |
colorTertiaryActive | colorActionTertiaryBgPressed |
colorTertiaryDisabled | colorActionSubtleBgDisabled |
colorTertiaryFore | colorActionTertiaryFg |
colorTertiaryForeDisabled | colorActionSubtleFgDisabled |
colorContrastHover | colorActionOverlayBgHovered |
colorContrastActive | colorActionOverlayBgPressed |
colorContrastDisabled | colorActionOverlayBgDisabled |
colorContrastForeDisabled | colorActionOverlayFgDisabled |
colorNeutral | colorUiNeutralBg |
colorNeutralHover | colorUiNeutralStrongBg |
colorNeutralActive | colorUiNeutralBg |
colorNeutralDisabled | colorUiNeutralBg |
colorNeutralFore | colorContentFg |
colorNeutralLow | colorUiNeutralSubtleBg |
colorPositive | colorFeedbackPositiveBg |
colorPositiveLow | colorFeedbackPositiveSubtleBg |
colorPositiveFore | colorFeedbackPositiveFg |
colorPositiveForeLow | colorFeedbackPositiveSubtleFg |
colorPositiveForeDisabled | colorActionFgDisabled |
colorInfo | colorFeedbackInfoBg |
colorInfoLow | colorFeedbackInfoSubtleBg |
colorInfoFore | colorFeedbackInfoFg |
colorInfoForeLow | colorFeedbackInfoSubtleFg |
colorWarn | colorFeedbackWarnBg |
colorWarnLow | colorFeedbackWarnSubtleBg |
colorWarnFore | colorFeedbackWarnFg |
colorWarnForeLow | colorFeedbackWarnSubtleFg |
colorWarnForeDisabled | colorActionFgDisabled |
colorCriticalHover | colorActionCriticalBgHovered |
colorCriticalActive | colorActionCriticalBgPressed |
colorCriticalDisabled | colorActionBgDisabled |
colorCriticalLow | colorFeedbackCriticalSubtleBg |
colorCriticalForeLow | colorFeedbackCriticalSubtleFg |
colorCriticalForeDisabled | colorActionFgDisabled |
colorBorder | colorControlBorder |
colorBorderHover | colorControlBorderHovered |
colorBorderDisabled | colorControlBorderDisabled |
colorBorderCritical | colorControlCriticalBorder |
colorBorderLow | colorUiBorder |
colorBorderStrong | colorControlStrongBorder |
colorOverlay | colorUiOverlayBg |
Shadow and surface tokens
Removed V4 variable | Replacement V5 variable |
---|---|
--ui-kit-box-shadow-faint | --ui-kit-elevation-surface-raised-shadow |
--ui-kit-box-shadow-medium | --ui-kit-elevation-surface-raised-shadow |
--ui-kit-box-shadow-heavy | --ui-kit-elevation-surface-floating-shadow |
--ui-kit-color-surface | --ui-kit-elevation-surface-raised-bg |
--ui-kit-color-canvas | --ui-kit-elevation-surface-sunken-bg |
--ui-kit-color-tabdock | --ui-kit-elevation-surface-sunken-bg |
--ui-kit-color-page | --ui-kit-elevation-surface-bg |
--ui-kit-shadow-surface | --ui-kit-elevation-surface-raised-shadow |
--ui-kit-box-shadow-faint | --ui-kit-elevation-surface-raised-shadow |
--ui-kit-box-shadow-medium | --ui-kit-elevation-surface-raised-shadow |
--ui-kit-shadow-surface-high | --ui-kit-elevation-surface-floating-shadow |
--ui-kit-box-shadow-heavy | --ui-kit-elevation-surface-floating-shadow |
Removed V4 variable | Replacement V5 variable |
---|---|
boxShadowFaint | elevationSurfaceRaisedShadow |
boxShadowMedium | elevationSurfaceRaisedShadow |
boxShadowHeavy | elevationSurfaceFloatingShadow |
colorSurface | elevationSurfaceRaisedBg |
colorCanvas | elevationSurfaceSunkenBg |
colorTabdock | elevationSurfaceSunkenBg |
colorPage | elevationSurfaceBg |
shadowSurface | elevationSurfaceRaisedShadow |
shadowSurface | elevationSurfaceRaisedShadow |
shadowSurface | elevationSurfaceRaisedShadow |
shadowSurfaceHigh | elevationSurfaceFloatingShadow |
shadowSurfaceHigh | elevationSurfaceFloatingShadow |
Spacing tokens
Removed V4 variable | Replacement V5 variable |
---|---|
--ui-kit-space-1 | --ui-kit-space-100 |
--ui-kit-space-2 | --ui-kit-space-200 |
--ui-kit-space-3 | --ui-kit-space-300 |
--ui-kit-space-4 | --ui-kit-space-400 |
--ui-kit-space-6 | --ui-kit-space-600 |
--ui-kit-space-8 | --ui-kit-space-800 |
--ui-kit-space-12 | --ui-kit-space-1200 |
--ui-kit-border-radius | --ui-kit-radius-element-standard |
Removed V4 variable | Replacement V5 variable |
---|---|
space1 | space100 |
space2 | space200 |
space3 | space300 |
space4 | space400 |
space6 | space600 |
space8 | space800 |
space12 | space1200 |
borderRadius | radiusElementStandard |
Component changes
In addition to design token changes, App UI Kit v5 includes several component updates:
React version requirement
-
Breaking: React 19 is now required and React 18 support was removed.
Migration: Update your project to use React v19.
Link component
-
Breaking: Removed deprecated
title
prop.Migration: Use
tooltipLabel
instead oftitle
.
// Before (v4)<Link title="Click here" href="/example">Link text</Link>// After (v5)<Link tooltipLabel="Click here" href="/example">Link text</Link>
ColorSelector component
-
Breaking: The
source
parameter inonChange
callback is now optional.Migration: Check for
undefined
values in your callback handler.
// Before (v4)<ColorSelector onChange={(color, source) => {// source was always definedconsole.log(source);}} />// After (v5)<ColorSelector onChange={(color, source) => {// source might be undefinedif (source) {console.log(source);}}} />
Column component
-
Breaking: Default
alignY
property changed from implicit tostretch
.Migration: To use the old behavior, explicitly set
alignY="start"
.
// Before (v4) - implicit start alignment<Column>Content</Column>// After (v5) - explicit start alignment needed<Column alignY="start">Content</Column>
Pill and InputPill components
- Breaking: Replaced
truncateText
prop withmaxWidth
prop. - Breaking: Changed
size
values:"small"
is now"xsmall"
. - Breaking: Pill has a rounder appearance for consistency with other Canva elements.
- Breaking: Removed
tone
property.
// Before (v4)<Pill size="small" truncateText>Text</Pill><InputPill truncateText={false}>Text</InputPill>// After (v5)<Pill size="xsmall" maxWidth='25u'>Text</Pill><InputPill maxWidth='100%'>Text</InputPill>
Global styling
-
Breaking: Removed the default
colorSurface
background color from thehtml
tag.A migration isn't be required, the Canva environment has changed to accommodate this.
New components
-
Added:
LinkButton
component for in-app actions that don't open URLs.Use
LinkButton
instead ofButton
when you need link-style interactions without navigation