Icon draws one icon by name. The native package ships the same icon data as the web package and draws it with react-native-svg, so the names match and no icon font or extra icon library is needed. react-native-svg 15 is a peer dependency, and Expo includes it. See the web Icon page.
size takes xs to xl: 16, 20, 24, 32 or 40 points. m is the default. The colour is neutral-strong unless you set onBackground or onSolid.
name is typed as IconName, so a misspelled name is a type error. The built-in names include arrowLeft, arrowRight, bell, calendar, check, chevronDown, chevronLeft, chevronRight, chevronUp, close, copy, danger, edit, eye, eyeOff, heart, home, info, link, lock, mail, minus, person, plus, refresh, search, settings, star, trash and warning. Your editor's autocomplete on name lists all of them.
Components that take prefixIcon or suffixIcon, such as Button, take the same names.
Icons are decorative by default and hidden from screen readers. When an icon carries meaning on its own, pass decorative={false} and an ariaLabel.
IconProvider adds icons by name, or replaces built-in ones. An icon is either core's SVG data ({ tag, attr, child }) or a component that takes size in points and color. That makes a set like @expo/vector-icons easy to plug in. Declare the new names on IconLibraryOverrides so name accepts them.
useIcons() returns the merged set of icons in scope, for your own components.
- No tooltip. There is no hover on a touch screen, so tooltip and tooltipPosition are not supported. Use ariaLabel for the name.
- color. Native Icon also takes a plain colour string in color, which wins over onBackground. Components use it to colour icons inside their labels.
- Custom icons. The web's IconProvider takes React components. The native one also takes core's SVG data, and its components receive size and color instead of styling through CSS.