
Company News
Socket Named Top Sales Organization by RepVue
Socket won two 2026 Reppy Awards from RepVue, ranking in the top 5% of all sales orgs. AE Alexandra Lister shares what it's like to grow a sales career here.
react-native-tabs-reanimated
Advanced tools
Customizable, animated tabs component for React Native built with Reanimated v3/v4
React Native Tabs Reanimated is a highly customizable, animated tab component for React Native applications. Built with React Native Reanimated v3/v4 and TypeScript, it provides smooth 60fps transitions, multi-select capabilities, and a beautiful native feel.
🚀 Fully compatible with React Native 0.81+ and Reanimated v3/v4
📈 338+ weekly downloads and growing! Join the developers already using this library in production.
Showcasing different configurations: icons with colors, multi-select mode, text-only tabs, and various styling options
npm install react-native-tabs-reanimated react-native-reanimated react-native-gesture-handler
with yarn:
yarn add react-native-tabs-reanimated react-native-reanimated react-native-gesture-handler
or with bun:
bun add react-native-tabs-reanimated react-native-reanimated react-native-gesture-handler
Make sure you have the following peer dependencies installed:
# With npm
npm install react-native-reanimated react-native-gesture-handler @expo/vector-icons
# With yarn
yarn add react-native-reanimated react-native-gesture-handler @expo/vector-icons
# With bun
bun add react-native-reanimated react-native-gesture-handler @expo/vector-icons
Note: If you're using Expo, these dependencies are usually pre-installed.
import Tabs from "react-native-tabs-reanimated";
const tabs = [
{ id: 1, name: "Primary", icon: "email", color: "#b3c6ff" },
{ id: 2, name: "Social", icon: "account-group", color: "#b2f0e6" },
{ id: 3, name: "Promotions", icon: "tag", color: "#ffe0b2" },
];
export default function App() {
return <Tabs tabs={tabs} scrollable defaultActiveIndex={0} />;
}
import Tabs from "react-native-tabs-reanimated";
const tabs = [
{ id: 1, name: "Home", icon: "home", color: "#b3c6ff" },
{ id: 2, name: "Profile", icon: "account", color: "#b2f0e6" },
{ id: 3, name: "Settings", icon: "cog", color: "#ffe0b2" },
];
<Tabs
tabs={tabs}
defaultActiveIndex={0}
onActiveChange={(actives) => console.log("Active tabs:", actives)}
/>;
<Tabs
tabs={tabs}
isMultiSelector
defaultActiveIndex={0}
onActiveChange={(actives) => console.log("Selected tabs:", actives)}
/>
<Tabs
tabs={tabs}
activesColor="lightblue"
inactivesColor="lightgrey"
tintColor="#000"
/>
<Tabs tabs={tabs} showTexts showCloseIcon activesColor="lightgreen" />
import { FadeInUp, FadeOutDown } from "react-native-reanimated";
<Tabs
tabs={tabs}
textAnimation={{
entering: FadeInUp.springify(),
exiting: FadeOutDown.springify(),
}}
/>;
<Tabs tabs={tabs} scrollable={false} isMultiSelector showTexts />
<Tabs
tabs={tabs}
tabStyle={{
borderRadius: 16,
paddingVertical: 12,
paddingHorizontal: 20,
}}
containerStyle={{
padding: 16,
backgroundColor: "#f5f5f5",
}}
/>
Tabs Component Props| Prop | Type | Default | Description |
|---|---|---|---|
tabs | TabType[] | required | Array of tab objects |
defaultActiveIndex | number | 0 | Initial active tab index |
isMultiSelector | boolean | false | Enable multiple tab selection |
scrollable | boolean | true | Enable horizontal scrolling |
showTexts | boolean | false | Always show tab text (not just active) |
showCloseIcon | boolean | false | Show close icon on active tabs |
activesColor | string | 'white' | Background color for active tabs |
inactivesColor | string | 'grey' | Background color for inactive tabs |
tintColor | string | '#000' | Icon and text color |
containerStyle | StyleProp<ViewStyle> | undefined | Custom container styles |
tabStyle | StyleProp<ViewStyle> | undefined | Custom individual tab styles |
layoutAnimation | ComplexAnimationBuilder | LinearTransition.springify() | Layout transition animation |
textAnimation | { entering?, exiting? } | { entering: FadeInLeft, exiting: FadeOutLeft } | Text appearance animations |
onActiveChange | (actives: number[]) => void | undefined | Callback when active tabs change |
scrollProps | ScrollViewProps | undefined | Additional ScrollView props (when scrollable) |
viewProps | ViewProps | undefined | Additional View props (when not scrollable) |
textProps | TextProps | undefined | Custom text props |
expoVectorIconProps | ExpoVectorIconsProps | undefined | Custom icon props |
customCloseIcon | React.ReactNode | undefined | Custom close icon component |
TabType Interfaceinterface TabType {
id: number;
name: string;
icon?: string; // Material Community Icons name
color?: string; // Custom background color
customIcon?: ReactNode; // Custom icon component
}
You can use custom React components as icons:
import { View } from "react-native";
const tabs = [
{
id: 1,
name: "Custom",
customIcon: (
<View style={{ width: 24, height: 24, backgroundColor: "red" }} />
),
color: "#b3c6ff",
},
];
<Tabs tabs={tabs} />;
<Tabs
tabs={tabs}
containerStyle={{
padding: 24,
backgroundColor: "#f8f9fa",
borderRadius: 12,
}}
tabStyle={{
borderRadius: 20,
paddingVertical: 10,
paddingHorizontal: 18,
shadowColor: "#000",
shadowOffset: { width: 0, height: 2 },
shadowOpacity: 0.1,
shadowRadius: 4,
elevation: 3,
}}
textProps={{
style: {
fontWeight: "600",
fontSize: 14,
},
}}
/>
Contributions are welcome! Please feel free to submit a Pull Request.
git checkout -b feature/AmazingFeature)git commit -m 'Add some AmazingFeature')git push origin feature/AmazingFeature)This project is licensed under the MIT License - see the LICENSE file for details.
Found a bug? Please open an issue with a detailed description.
Guillermo Velasco
Give a ⭐️ if this project helped you!
FAQs
Customizable, animated tabs component for React Native built with Reanimated v3/v4
We found that react-native-tabs-reanimated demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Company News
Socket won two 2026 Reppy Awards from RepVue, ranking in the top 5% of all sales orgs. AE Alexandra Lister shares what it's like to grow a sales career here.

Security News
NIST will stop enriching most CVEs under a new risk-based model, narrowing the NVD's scope as vulnerability submissions continue to surge.

Company News
/Security News
Socket is an initial recipient of OpenAI's Cybersecurity Grant Program, which commits $10M in API credits to defenders securing open source software.