packages/codemod/docs/AVATAR_MIGRATION.md
This document outlines the migration from Chakra UI v2 Avatar components to v3.
| v2 Component | v3 Component | Notes |
|---|---|---|
Avatar | Avatar.Root | Container with declarative parts |
| N/A | Avatar.Image | Image element (props moved from Avatar) |
| N/A | Avatar.Fallback | Fallback content (name/icon moved here) |
AvatarBadge | Float + Circle | Requires manual migration, see badge doc |
AvatarGroup | AvatarGroup | No namespace, but max prop removed |
v2:
import { Avatar, AvatarBadge, AvatarGroup } from "@chakra-ui/react"
v3:
import { Avatar, AvatarGroup } from "@chakra-ui/react"
// For badge functionality, also import:
import { Circle, Float } from "@chakra-ui/react"
Props that remain on Avatar.Root:
size - Size variantcolorPalette - Color schemeProps removed (no longer supported):
ignoreFallback - No longer needed in v3showBorder - Use styling props instead (e.g., border="2px solid",
borderColor="bg")Props moved from Avatar to Avatar.Image:
src - Image source URLsrcSet - Responsive image sourcessizes - Image sizes for responsive imagesalt - Alt textloading - Loading strategy (lazy, eager)referrerPolicy - Referrer policycrossOrigin - CORS settingsProps moved from Avatar to Avatar.Fallback:
name - Name for generating initialsicon - Custom fallback icon (moved as children)iconLabel → aria-label - Accessibility label for the fallbackgetInitials - Custom initials function (requires manual migration)Prop transformations:
spacing → spaceX - Horizontal spacing between avatarsmax prop removed (no longer supported in v3)v2:
import { Avatar } from "@chakra-ui/react"
;<Avatar name="Dan Abrahmov" src="https://bit.ly/dan-abramov" />
v3:
import { Avatar } from "@chakra-ui/react"
;<Avatar.Root>
<Avatar.Fallback name="Dan Abrahmov" />
<Avatar.Image src="https://bit.ly/dan-abramov" />
</Avatar.Root>
v2:
import { Avatar } from "@chakra-ui/react"
;<Avatar
size="xs"
name="Kola Tioluwani"
src="https://bit.ly/tioluwani-kolawole"
/>
v3:
import { Avatar } from "@chakra-ui/react"
;<Avatar.Root size="xs">
<Avatar.Fallback name="Kola Tioluwani" />
<Avatar.Image src="https://bit.ly/tioluwani-kolawole" />
</Avatar.Root>
v2:
import { Avatar } from "@chakra-ui/react"
import { AiOutlineUser } from "react-icons/ai"
;<Avatar bg="red.500" icon={<AiOutlineUser fontSize="1.5rem" />} />
v3:
import { Avatar } from "@chakra-ui/react"
import { AiOutlineUser } from "react-icons/ai"
;<Avatar.Root bg="red.500">
<Avatar.Fallback>
<AiOutlineUser fontSize="1.5rem" />
</Avatar.Fallback>
</Avatar.Root>
v2:
import { Avatar } from "@chakra-ui/react"
import { AiOutlineUser } from "react-icons/ai"
;<Avatar name="Dan Abrahmov" icon={<AiOutlineUser />} />
v3:
import { Avatar } from "@chakra-ui/react"
import { AiOutlineUser } from "react-icons/ai"
;<Avatar.Root>
<Avatar.Fallback name="Dan Abrahmov">
<AiOutlineUser />
</Avatar.Fallback>
</Avatar.Root>
v2:
import { Avatar } from "@chakra-ui/react"
;<Avatar
src="https://bit.ly/dan-abramov"
loading="lazy"
referrerPolicy="no-referrer"
crossOrigin="anonymous"
/>
v3:
import { Avatar } from "@chakra-ui/react"
;<Avatar.Root>
<Avatar.Image
src="https://bit.ly/dan-abramov"
loading="lazy"
referrerPolicy="no-referrer"
crossOrigin="anonymous"
/>
</Avatar.Root>
v2:
import { Avatar } from "@chakra-ui/react"
import { AiOutlineUser } from "react-icons/ai"
;<Avatar icon={<AiOutlineUser />} iconLabel="User Avatar" />
v3:
import { Avatar } from "@chakra-ui/react"
import { AiOutlineUser } from "react-icons/ai"
;<Avatar.Root>
<Avatar.Fallback aria-label="User Avatar">
<AiOutlineUser />
</Avatar.Fallback>
</Avatar.Root>
v2:
import { Avatar, AvatarGroup } from "@chakra-ui/react"
;<AvatarGroup size="md" max={2} spacing="1rem">
<Avatar name="Ryan Florence" src="https://bit.ly/ryan-florence" />
<Avatar name="Segun Adebayo" src="https://bit.ly/sage-adebayo" />
<Avatar name="Kent Dodds" src="https://bit.ly/kent-c-dodds" />
<Avatar name="Prosper Otemuyiwa" src="https://bit.ly/prosper-baba" />
<Avatar name="Christian Nwamba" src="https://bit.ly/code-beast" />
</AvatarGroup>
v3:
import { Avatar, AvatarGroup } from "@chakra-ui/react"
;<AvatarGroup size="md" spaceX="1rem">
<Avatar.Root>
<Avatar.Fallback name="Ryan Florence" />
<Avatar.Image src="https://bit.ly/ryan-florence" />
</Avatar.Root>
<Avatar.Root>
<Avatar.Fallback name="Segun Adebayo" />
<Avatar.Image src="https://bit.ly/sage-adebayo" />
</Avatar.Root>
<Avatar.Root>
<Avatar.Fallback name="Kent Dodds" />
<Avatar.Image src="https://bit.ly/kent-c-dodds" />
</Avatar.Root>
<Avatar.Root>
<Avatar.Fallback name="Prosper Otemuyiwa" />
<Avatar.Image src="https://bit.ly/prosper-baba" />
</Avatar.Root>
<Avatar.Root>
<Avatar.Fallback name="Christian Nwamba" />
<Avatar.Image src="https://bit.ly/code-beast" />
</Avatar.Root>
</AvatarGroup>
v2:
import { Avatar, AvatarBadge } from "@chakra-ui/react"
;<Avatar>
<AvatarBadge boxSize="1.25em" bg="green.500" />
</Avatar>
v3:
import { Avatar, Circle, Float } from "@chakra-ui/react"
;<Avatar.Root>
<Avatar.Image src="https://bit.ly/dan-abramov" />
<Float placement="bottom-end" offsetX="1" offsetY="1">
<Circle bg="green.500" size="8px" outline="0.2em solid" outlineColor="bg" />
</Float>
</Avatar.Root>
For more details on badge migration, see: https://chakra-ui.com/docs/components/avatar#badge
To automatically migrate your Avatar components, run:
npx @chakra-ui/codemod transform avatar <path>
--dry - Do a dry-run without making changes--print - Print the changed output for comparison# Transform all files in src directory
npx @chakra-ui/codemod transform avatar ./src
# Dry run to preview changes
npx @chakra-ui/codemod transform avatar ./src --dry
# Print changes for comparison
npx @chakra-ui/codemod transform avatar ./src --print
If you prefer to migrate manually:
Avatar import (no changes needed)<Avatar> → <Avatar.Root><Avatar.Image> for src/image props<Avatar.Fallback> for name/icon propsAvatar.Imagename prop → Avatar.Fallbackicon prop → Avatar.Fallback childrenmax prop (no longer supported)Float + Circle patternAvatar.Imagename prop must be on Avatar.Fallbacksrc, srcSet, sizes, alt, loading, referrerPolicy, crossOrigin →
moved to Avatar.Imagename → moved to Avatar.Fallbackicon → moved to Avatar.Fallback childreniconLabel → renamed to aria-label on Avatar.FallbackgetInitials → requires manual migration (no direct equivalent)ignoreFallback → removed (no longer needed in v3)showBorder → removed (use styling props like border and borderColor
instead)spacing → renamed to spaceXmax prop → removed (no longer supported)Float + Circle compositionThe codemod will:
The v3 Avatar component provides:
name prop on Avatar.Fallback generates initials automaticallymax prop for limiting visible avatarsgetInitials prop requires manual migration as it involves custom logic