rit3zh/expo-curved-bottom-tabs — explained in plain English
Analysis updated 2026-05-18
Replace a flat bottom tab bar with a curved, animated one in an Expo Router app.
Let users drag the active-tab indicator across the bar and have it snap to a tab.
Customize the bar's curve depth, thickness, and spring animation feel from one constants file.
Add SF Symbol icons on iOS with automatic Ionicons fallback on Android.
| rit3zh/expo-curved-bottom-tabs | p0systems/peezy-cli | denissergeevitch/chatgpt-portal | |
|---|---|---|---|
| Stars | 67 | 67 | 66 |
| Language | TypeScript | TypeScript | TypeScript |
| Setup difficulty | easy | easy | moderate |
| Complexity | 2/5 | 1/5 | 3/5 |
| Audience | developer | developer | developer |
Figures from each repo's GitHub metadata at analysis time.
Clone and adapt into your own project, requires GestureHandlerRootView for the draggable pill.
This repository is a custom navigation bar component for mobile apps built with Expo, a framework that makes it easier to build iOS and Android apps using JavaScript. Specifically, it replaces the plain flat tab bar that normally appears at the bottom of the screen with a curved, visually styled version that includes an animated indicator shaped like a frosted-glass pill. The main visual idea is that when you tap between tabs, a translucent pill shape slides across the bottom bar and lands on the active tab. The pill uses two independent spring animations at once: one for the leading edge (which moves quickly) and one for the trailing edge (which follows more slowly), giving the movement a stretchy, organic feel. You can also drag the pill with your finger across the bar, and when you let go it snaps to the nearest tab and navigates there. The bar itself is drawn with a graphics library called Skia, which handles the curved arc shape and small decorative bead details along the surface. To use it, you clone the repository, install dependencies, and wire the CurvedTabBar component into the tabBar slot of Expo Router's tab navigator. The component exposes a few sub-pieces (List, Trigger, and Indicator) that you arrange in your layout file to declare which tabs exist and whether the sliding pill should appear. Tab icons are resolved by route name from a lookup table, using Apple-style SF Symbol names on iOS and Ionicons as a fallback on Android. Customization is done by editing constants in one file: the depth of the curve, bar thickness, pill height, icon size, and the two spring values all live there. Adding a new tab icon means adding one entry to a name-to-icon mapping object. The stack it depends on includes Expo 56, React Native 0.85, Reanimated 4, Gesture Handler 2, Skia, and Expo Glass Effect. This is a demonstration project and example codebase rather than a published package, so you use it by cloning and adapting, not by installing from a package registry.
A curved, draggable bottom tab bar component for Expo mobile apps with a glass pill indicator that slides between tabs.
Mainly TypeScript. The stack also includes TypeScript, Expo, React Native.
Terms are not stated in the source material provided.
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.