CASE STUDY · @DEVVIE/BOTTOM-SHEET

@devvie/bottom-sheet

Making a simple component genuinely simple to use.

ROLEAuthor & Maintainer
SCOPEOpen Source Library Architecture
ADOPTION51,000+ Downloads on npm
FOOTPRINTZero Runtime Dependencies

1. Project Context & Motivation

The bottom sheet has become a staple of modern mobile user interfaces—utilized for modal pickers, action menus, filter sheets, and contextual entry points.

However, across the React Native ecosystem, the prevailing bottom sheet packages require substantial third-party native libraries, including complex gesture engines and reanimated runtimes. These heavy dependencies often introduce version mismatches, tricky native linkage issues, and breaking changes during React Native upgrades.

2. The Engineering Problem

Building a high-performance gesture sheet with zero external native dependencies requires solving several subtle interaction hurdles using only React Native's standard core runtime:

  • Gesture arbitration: Distinguishing reliably between a downward drag intended to dismiss the sheet versus an upward scroll within an inner list.
  • Dynamic keyboard offsets: Tracking device software keyboards across iOS and Android so focused text inputs are smoothly lifted above the virtual keyboard rather than obstructed.
  • Physics-based snap points: Interpolating smooth spring physics that take user drag velocity into account when releasing touch contacts.

3. Role & Responsibilities

As the creator and sole maintainer of the package, I:

  • Architected the complete gesture responder lifecycle using core React Native primitives.
  • Designed an ergonomic, ref-based public TypeScript API (ref.current.open() / ref.current.close()).
  • Built automated keyboard tracking math that adapts to hardware safe areas and insets.
  • Wrote documentation, managed semantic releases, and resolved community issues on npm and GitHub.

4. Architectural Decisions & Tradeoffs

DECISION 01

Zero External Runtime Dependencies

By relying exclusively on React Native's built-in PanResponder and native animated driver, the package functions effortlessly in standard React Native CLI projects as well as Expo Go without requiring custom dev clients or native recompilation.

DECISION 02

Velocity-Aware Spring Interpolation

When a touch gesture is released, the handler evaluates both position and velocity vectors. Fast downward flings dismiss the sheet immediately, while gentle gestures snap smoothly to designated heights using calculated spring tension curves.

DECISION 03

Adaptive Keyboard Avoidance Engine

The component monitors native keyboard event lifecycles (keyboardWillShow / keyboardDidShow) and dynamically shifts the sheet's translation origin, preventing inputs from being occluded without requiring external keyboard-avoiding wrapper components.

5. Authentic Supporting Media & API

Verified public TypeScript API example for @devvie/bottom-sheet

Authentic asset demonstration capture and verified public API syntax showing clean ref controls and declarative custom styling

6. Measurable Outcomes & Evidence

  • 51,000+ total downloads across active React Native production applications worldwide.
  • Zero peer dependency conflicts, ensuring uninterrupted compatibility across React Native major versions.
  • Extremely lightweight bundle footprint: under 4 KB minzipped.
  • Complete TypeScript typings with full IntelliSense support for props and ref methods.

What are you working on?

I’d love to hear about it.