Avatar is decorative by default, hidden from assistive technologies. An aria-label may be provided where more meaningful context is needed, or required when interactive.
Match the treatment to the identity data you have.
Image
The most recognisable treatment. When a photo or company logo is available, pass it as imageUrl. This is the strongest treatment and should be preferred over initials whenever you can show a current image.Provide an image at least twice the box size so it stays sharp. Omit imageUrl when the image must not be shown — for example when names are hidden.If the image fails to load, IconImageBroken is shown instead of silently falling back to initials. That makes a broken image obvious so it can be fixed.
When there is a name but no image, Avatar shows the first letter of name. The background colour is derived from that name so the same identity stays consistent wherever they appear.
The first letter of name works across scripts such as Latin, Thai and Chinese, with no extra configuration. Numbers, punctuation and symbols are skipped. If no letter is found, the empty treatment is used instead.
For an organisation with no logo and no name, you may provide an icon, typically IconCompany. Note that passing name and icon together shows initials, not the icon.
Tailor the size to the surrounding layout with the size prop. Use smaller sizes in dense lists and larger sizes in profile headers. When no size is specified, the avatar appears at standard. Size is a fixed value, not a responsive prop — pick a size per breakpoint with layout rather than scaling the box.
Avatar always has a surface-coloured ring so it stays distinct when overlapping or sitting on a coloured background. If you need a coloured ring, wrap Avatar in a Box and keep that radius in sync with the Avatar size.
Pair Avatar with visible text so the name is available to everyone. The easiest way is Columns or Inline, with the Avatar sized to its content and aligned to the text.
When the avatar is the only identifier, wrap Avatar with TooltipRenderer so the name is available on hover and focus. Spread triggerProps last onto Avatar, and pass aria-label because those props make the avatar focusable.Skip a tooltip when the name is already visible beside the avatar. If click opens a MenuRenderer, put the tooltip on the menu trigger, not on Avatar inside it.
Use onClick only when the square itself is the control, such as adding or updating a photo. Provide an icon, aria-label and omit name.Do not add onClick when a parent is already the button — for example a row that opens a profile, or a MenuRenderer trigger. In those cases the avatar should stay decorative.
While identity data is being fetched, set loading to show a skeleton in place of the photo, initials, or icon. This state is not announced. If the avatar is also a control, it remains clickable so someone can add or update a photo before the current image arrives.
Braid components are very explicit about the properties they accept, which makes providing arbitrary data attributes not possible. Instead, a data prop can be provided as a single collection of data attributes.