
Security News
Axios Maintainer Confirms Social Engineering Attack Behind npm Compromise
Axios compromise traced to social engineering, showing how attacks on maintainers can bypass controls and expose the broader software supply chain.
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
The npm package react-native-tabs-reanimated receives a total of 1 weekly downloads. As such, react-native-tabs-reanimated popularity was classified as not popular.
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.

Security News
Axios compromise traced to social engineering, showing how attacks on maintainers can bypass controls and expose the broader software supply chain.

Security News
Node.js has paused its bug bounty program after funding ended, removing payouts for vulnerability reports but keeping its security process unchanged.

Security News
The Axios compromise shows how time-dependent dependency resolution makes exposure harder to detect and contain.