Skip to content

IconButton

IconButton provides a compact, icon-only button for actions where visual clarity is more important than text labels. Ideal for toolbars, navigation, and contextual actions.


Outlined button with subtle border.

<IconButton icon="" accessibilityLabel="Menu" />
<IconButton icon="" accessibilityLabel="Settings" />
<IconButton icon="?" accessibilityLabel="Help" />

No background or border, only shows on press.

<IconButton icon="" variant="ghost" accessibilityLabel="Back" />
<IconButton icon="" variant="ghost" accessibilityLabel="Close" />
<IconButton icon="" variant="ghost" accessibilityLabel="More options" />

Solid background for emphasis.

<IconButton icon="+" variant="filled" accessibilityLabel="Add" />
<IconButton icon="" variant="filled" accessibilityLabel="Favorite" />
<IconButton icon="" variant="filled" accessibilityLabel="Download" />

SizeDimensionIcon SizeUsage
sm32px16pxCompact toolbars
md40px20pxDefault
lg48px24pxPrimary actions

Use circular shape for floating actions.

<IconButton icon="+" variant="filled" rounded accessibilityLabel="Add" />
<IconButton icon="" rounded accessibilityLabel="Menu" />
<IconButton icon="" variant="ghost" rounded accessibilityLabel="Close" />

<IconButton icon="" disabled accessibilityLabel="Menu" />

Use any React element as an icon.

import { Feather } from '@expo/vector-icons';
<IconButton
icon={<Feather name="menu" size={20} color={colors['text-secondary']} />}
accessibilityLabel="Menu"
/>
<IconButton
icon={<Feather name="settings" size={20} color={colors['text-secondary']} />}
variant="ghost"
accessibilityLabel="Settings"
/>

PropTypeDefaultDescription
iconReactNodeRequiredIcon content
variant'default' | 'ghost' | 'filled''default'Visual variant
size'sm' | 'md' | 'lg''md'Button size
disabledbooleanfalseDisabled state
roundedbooleanfalseCircular shape
accessibilityLabelstringRequiredA11y label
onPress() => void-Press handler
styleViewStyle-Custom styles

import { IconButton } from '@synchronicity/react-native';
import { View } from 'react-native';
function Header({ onMenuPress, onSettingsPress }) {
return (
<View style={styles.header}>
<IconButton
icon=""
variant="ghost"
accessibilityLabel="Open navigation menu"
onPress={onMenuPress}
/>
<View style={styles.spacer} />
<IconButton
icon=""
variant="ghost"
accessibilityLabel="Open settings"
onPress={onSettingsPress}
/>
</View>
);
}