Checkbox
A Jetpack Compose Checkbox component for selection controls.
For cross-platform usage, see the universalCheckbox— it renders the appropriate native component per platform.
Expo UI Checkbox matches the official Jetpack Compose Checkbox API.

Installation
- npx expo install @expo/uiIf you are installing this in an existing React Native app, make sure to install expo in your project.
Usage
Basic checkbox
import { useState } from 'react'; import { Host, Checkbox } from '@expo/ui/jetpack-compose'; export default function CheckboxExample() { const [checked, setChecked] = useState(false); return ( <Host matchContents> <Checkbox value={checked} onCheckedChange={setChecked} /> </Host> ); }
Custom colors
import { useState } from 'react'; import { Host, Checkbox } from '@expo/ui/jetpack-compose'; export default function CustomColorsExample() { const [checked, setChecked] = useState(false); return ( <Host matchContents> <Checkbox value={checked} onCheckedChange={setChecked} colors={{ checkedColor: '#6200EE', checkmarkColor: '#FFFFFF', }} /> </Host> ); }
Select all (TriStateCheckbox)
Use TriStateCheckbox for a parent checkbox that reflects the state of its children. It supports three states: 'on', 'off', and 'indeterminate'.
Apply the toggleable modifier to each Row to make the entire row (checkbox + label) tappable with correct accessibility semantics. When using toggleable on the row, omit onCheckedChange/onClick from the checkbox itself to avoid double-handling.
import { useState } from 'react'; import { Host, Checkbox, TriStateCheckbox, Row, Column, Text } from '@expo/ui/jetpack-compose'; import { toggleable } from '@expo/ui/jetpack-compose/modifiers'; export default function SelectAllExample() { const [child1, setChild1] = useState(false); const [child2, setChild2] = useState(false); const [child3, setChild3] = useState(false); const parentState = child1 && child2 && child3 ? 'on' : !child1 && !child2 && !child3 ? 'off' : 'indeterminate'; return ( <Host matchContents> <Column> <Row verticalAlignment="center" modifiers={[ toggleable( parentState === 'on', () => { const newState = parentState !== 'on'; setChild1(newState); setChild2(newState); setChild3(newState); }, { role: 'checkbox' } ), ]}> <TriStateCheckbox state={parentState} /> <Text>Select all</Text> </Row> <Row verticalAlignment="center" modifiers={[toggleable(child1, () => setChild1(!child1), { role: 'checkbox' })]}> <Checkbox value={child1} /> <Text>Option 1</Text> </Row> <Row verticalAlignment="center" modifiers={[toggleable(child2, () => setChild2(!child2), { role: 'checkbox' })]}> <Checkbox value={child2} /> <Text>Option 2</Text> </Row> <Row verticalAlignment="center" modifiers={[toggleable(child3, () => setChild3(!child3), { role: 'checkbox' })]}> <Checkbox value={child3} /> <Text>Option 3</Text> </Row> </Column> </Host> ); }
API
import { Checkbox, TriStateCheckbox } from '@expo/ui/jetpack-compose';
Components
Type: React.Element<CheckboxProps>
A checkbox component.
(value: boolean) => voidCallback function that is called when the checked state changes.
Type: React.Element<TriStateCheckboxProps>
A tri-state checkbox component that supports 'on', 'off', and 'indeterminate' states.
Useful for "select all" patterns where the parent checkbox reflects the state of its children.
Types
Colors for checkbox core elements.
| Property | Type | Description |
|---|---|---|
| checkedColor(optional) | ColorValue | - |
| checkmarkColor(optional) | ColorValue | - |
| disabledCheckedColor(optional) | ColorValue | - |
| disabledIndeterminateColor(optional) | ColorValue | - |
| disabledUncheckedColor(optional) | ColorValue | - |
| uncheckedColor(optional) | ColorValue | - |