Reference version

This is documentation for the next SDK version. For up-to-date documentation, see the latest version (SDK 55).

Shape

A Jetpack Compose Shape component for drawing geometric shapes.

Android

For the complete documentation index, see llms.txt. Use this file to discover all available pages.

Expo UI Shape matches the official Jetpack Compose Shapes API and provides a set of sub-components for drawing geometric shapes such as stars, circles, rectangles, pills, and polygons.

Installation

Terminal
- npx expo install @expo/ui

If you are installing this in an existing React Native app, make sure to install expo in your project.

Usage

Basic shapes

Render common shapes using the Shape sub-components.

BasicShapesExample.tsx
import { Host, Shape, Row } from '@expo/ui/jetpack-compose'; import { size } from '@expo/ui/jetpack-compose/modifiers'; export default function BasicShapesExample() { return ( <Host matchContents> <Row horizontalArrangement={{ spacedBy: 16 }} verticalAlignment="center"> <Shape.Star color="#FFD700" modifiers={[size(80, 80)]} /> <Shape.Circle radius={40} color="#4285F4" modifiers={[size(80, 80)]} /> <Shape.Rectangle color="#34A853" modifiers={[size(80, 80)]} /> <Shape.Pill color="#EA4335" modifiers={[size(100, 50)]} /> </Row> </Host> ); }

Shapes with rounded corners

Use cornerRounding and smoothing to customize the appearance of shapes.

RoundedShapesExample.tsx
import { Host, Shape, Row } from '@expo/ui/jetpack-compose'; import { size } from '@expo/ui/jetpack-compose/modifiers'; export default function RoundedShapesExample() { return ( <Host matchContents> <Row horizontalArrangement={{ spacedBy: 16 }} verticalAlignment="center"> <Shape.Rectangle cornerRounding={16} smoothing={0.5} color="#9C27B0" modifiers={[size(100, 80)]} /> <Shape.RoundedCorner cornerRadii={{ topStart: 20, topEnd: 20, bottomStart: 0, bottomEnd: 0 }} color="#FF5722" modifiers={[size(100, 80)]} /> </Row> </Host> ); }

Polygon and star variants

Use verticesCount and innerRadius to control the shape geometry.

PolygonShapesExample.tsx
import { Host, Shape, Row } from '@expo/ui/jetpack-compose'; import { size } from '@expo/ui/jetpack-compose/modifiers'; export default function PolygonShapesExample() { return ( <Host matchContents> <Row horizontalArrangement={{ spacedBy: 16 }} verticalAlignment="center"> <Shape.Polygon verticesCount={6} cornerRounding={4} color="#00BCD4" modifiers={[size(80, 80)]} /> <Shape.Star verticesCount={8} innerRadius={0.4} cornerRounding={2} color="#FF9800" modifiers={[size(80, 80)]} /> <Shape.PillStar verticesCount={6} innerRadius={0.5} color="#E91E63" modifiers={[size(80, 80)]} /> </Row> </Host> ); }

API

import { Shape } from '@expo/ui/jetpack-compose';

Constants

Shape.Shape

Android

Type: { Circle: (props: Pick<ShapeProps, 'radius' | 'verticesCount' | 'color' | 'modifiers'>) => ShapeJSXElement, Pill: (props: Pick<ShapeProps, 'smoothing' | 'color' | 'modifiers'>) => ShapeJSXElement, PillStar: (props: ShapeProps) => ShapeJSXElement, Polygon: (props: Pick<ShapeProps, 'smoothing' | 'cornerRounding' | 'verticesCount' | 'color' | 'modifiers'>) => ShapeJSXElement, Rectangle: (props: Pick<ShapeProps, 'smoothing' | 'cornerRounding' | 'color' | 'modifiers'>) => ShapeJSXElement, RoundedCorner: (props: Pick<ShapeProps, 'cornerRadii' | 'color' | 'modifiers'>) => ShapeJSXElement, Star: (props: ShapeProps) => ShapeJSXElement }

Props

color

Android
Optional • Type: ColorValue

Color of the shape

cornerRadii

Android
Optional • Type: CornerRadii

Corner radii for RoundedCorner shape. Values are in dp.

cornerRounding

Android
Optional • Type: number • Default: 0.0

Corner rounding percentage. Multiplied by the shorter dimension of the view to produce pixel values.

innerRadius

Android
Optional • Type: number • Default: 1.0

Inner radius of star-related shapes ('STAR' and 'PILL_STAR'). Multiplied by the shorter dimension of the view to produce pixel values.

modifiers

Android
Optional • Type: ExpoModifier[]

Modifiers for the component.

radius

Android
Optional • Type: number • Default: 1.0

Radius of the circular shape. Multiplied by the shorter dimension of the view to produce pixel values.

smoothing

Android
Optional • Type: number • Default: 0.0

Number between 0.0 and 1.0 that determines how much each line between vertices is "smoothed".

verticesCount

Android
Optional • Type: number • Default: 6.0

Number of vertices. For 'POLYGON' it must be at least 3.0. For 'STAR' and 'PILL_STAR' it is a number of vertices for each of two radii (A 5-pointed star has 10 vertices.)

Methods

Shape.parseJSXShape(shape)

Android
Overload #1
ParameterType
shapeShapeJSXElement

Shape.parseJSXShape(shape)

Android
Overload #2
ParameterType
shape(optional)ShapeJSXElement

Returns:
ShapeRecordProps | undefined

Types

CornerRadii

Android

Corner radii for RoundedCorner shape.

PropertyTypeDescription
bottomEnd(optional)number

Bottom-end corner radius in dp.

bottomStart(optional)number

Bottom-start corner radius in dp.

topEnd(optional)number

Top-end corner radius in dp.

topStart(optional)number

Top-start corner radius in dp.

ShapeJSXElement

Android

Type: React.ReactElement<NativeShapeProps> extended by:

PropertyTypeDescription
__expo_shape_jsx_element_markertrue
-