🚧 True Sheet 4.0 beta rewrites the layout engine. npx expo install @lodev09/react-native-true-sheet@beta Migration guide

Bottom sheets that are actually native.

TrueSheet hands your content to the sheet the platform already ships. Real detents, real gestures, real accessibility. One component for iOS, Android, and web.

npx expo install @lodev09/react-native-true-sheet
<TrueSheet
  ref={sheet}
  detents={[, , ]}
  cornerRadius={24}
  grabber
  onDetentChange={onChange}
>
await sheet.current?.present()

Tap a detent. Tap the dim to dismiss.

One component. Three native sheets.

iOS
UISheetPresentationController

The same controller Apple Maps and Photos use. Detents, grabber, dimming, and Liquid Glass on iOS 26 come from the system.

Android
BottomSheetBehavior

Material Components under a CoordinatorLayout. Edge to edge, back gestures, and nested scrolling behave like any other Android sheet.

Web
DOM renderer

The same component and props, rendered in the browser with drag, snap, and keyboard support. One import across all three.

Present. Await. Dismiss.

Attach a ref and call it. Every method returns a promise that resolves when the native animation finishes, so you can sequence work without guessing.

Prefer events? Lifecycle, drag, focus, and detent events fire from the native side with the same timing your users feel.

Browse the methods and events
import { TrueSheet } from '@lodev09/react-native-true-sheet'

export const App = () => {
  const sheet = useRef<TrueSheet>(null)

  const present = async () => {
    await sheet.current?.present()
    console.log('presented')
  }

  const dismiss = async () => {
    await sheet.current?.dismiss()
    console.log('dismissed')
  }

  return (
    <View>
      <Button onPress={present} title="Present" />
      <TrueSheet ref={sheet} detents={['auto', 1]}>
        <Button onPress={dismiss} title="Dismiss" />
      </TrueSheet>
    </View>
  )
}

Version 4 is in beta.

A rewritten layout engine sizes content synchronously per detent and tracks the sheet while dragging. Auto detents now measure scroll views. Expo Router gets a first class Sheet layout.

npx expo install @lodev09/react-native-true-sheet@beta

Teach your coding agent the library too:

npx skills add lodev09/react-native-true-sheet