rit3zh/expo-dynamic-tray — explained in plain English
Analysis updated 2026-05-18
Add a keyboard-aware bottom sheet to a React Native app without building the animations from scratch.
Build multi-step in-app flows like settings or onboarding using the tray's view navigation.
Create a persistent action footer that stays visible while switching between different tray views.
| rit3zh/expo-dynamic-tray | botpress/v12 | mclisterjoeh2o/yellowkey-bitlocker | |
|---|---|---|---|
| Stars | 153 | 153 | 152 |
| Language | TypeScript | TypeScript | TypeScript |
| Last pushed | — | 2025-04-10 | — |
| Maintenance | — | Stale | — |
| Setup difficulty | easy | moderate | easy |
| Complexity | 2/5 | 3/5 | 1/5 |
| Audience | developer | developer | general |
Figures from each repo's GitHub metadata at analysis time.
Requires installing several peer dependencies such as react-native-reanimated and react-native-keyboard-controller.
expo-dynamic-tray is a component library for React Native and Expo apps that gives developers a bottom sheet tray, the kind of panel that slides up from the bottom of a screen. Instead of just sliding into place, the tray uses a single spring animation to move its position, fade its backdrop, and scale itself all together, so it feels like it grows into view rather than snapping open. The tray sizes itself automatically based on whatever content is placed inside it, so there is no need to set fixed heights. It also supports multiple views within one tray, with a real history stack: calling setView moves to a named view, and goBack unwinds through however many views were opened, similar to screens in a navigation stack. Switching between views includes a crossfade and scale effect so the transition feels continuous rather than abrupt. One practical feature is keyboard awareness. Using the react-native-keyboard-controller library, the tray lifts itself above the on screen keyboard and stays attached to it as the keyboard appears or moves. Users can also dismiss the tray by swiping or flicking it away, and the library measures both how far a user dragged and how fast, then snaps back with a spring if the swipe does not meet the threshold. The tray supports a persistent footer area that can hold buttons or other content. This footer slot stays mounted while switching between views, so buttons do not disappear or jump around during navigation. Developers can open and control the tray either declaratively, using a Trigger component, or imperatively, by calling functions from a useTray hook anywhere in their component tree. The project is written entirely in TypeScript, so all its components and functions are typed. Installation requires cloning the repository and adding a handful of peer dependencies for gestures, safe area handling, keyboard tracking, and Expo's UI package. The README includes code examples covering setup, a simple single view tray, imperative control, multi view navigation, and a shared footer, along with a full prop reference table for each exported component.
A React Native and Expo component that opens a spring animated bottom sheet tray, with multi-view navigation and keyboard-following behavior.
Mainly TypeScript. The stack also includes TypeScript, React Native, Expo.
Setup difficulty is rated easy, with roughly 30min to a first successful run.
Mainly developer.
This repo across BitVibe Labs
Verify against the repo before relying on details.