La conception dâune librairie UI React Native cohĂ©rente et maintenable est un enjeu central dans le dĂ©veloppement dâapplications mobiles modernes. Depuis de nombreuses annĂ©es, nous utilisons React Native pour ses capacitĂ©s cross-platform, qui permettent de cibler Ă la fois Android et iOS tout en conservant les avantages de React et du mobile natif.
Cependant, la gestion du style et de lâUI React Native reste limitĂ©e par dĂ©faut : le framework fournit des composants de base pour structurer les vues, mais peu dâoutils pour crĂ©er des interfaces mobiles avancĂ©es, personnalisables et cohĂ©rentes Ă grande Ă©chelle.
La communautĂ© React Native a rapidement dĂ©veloppĂ© des librairies UI pour corriger ces problĂšmes, mais nous nâavons pas trouvĂ© une librairie qui corresponde Ă ce que nous utilisons sur React web : Chakra UI
Câest pourquoi nous avons dĂ©veloppĂ© au BearStudio une nouvelle librairie UI open source : React Native Ficus UI đż
Pourquoi Ficus UI ?
Nous aimons Chakra UI pour plusieurs raisons : sa simplicitĂ©, sa cohĂ©rence, et sa philosophie âstyled systemâ qui permet de construire rapidement des interfaces Ă©lĂ©gantes, accessibles et personnalisables.
Lorsque nous avons commencĂ© Ă chercher une expĂ©rience similaire sur React Native, nous avons dĂ©couvert quâaucune librairie ne combinait vraiment ces qualitĂ©s.
Certaines librairies proposaient des composants riches mais difficiles Ă thĂ©matiser. Dâautres offraient de la flexibilitĂ©, mais au prix dâune grande complexitĂ© ou dâun manque de cohĂ©rence entre composants.
Ficus UI est née de ce constat : proposer une expérience Chakra-like pour React Native, avec une API simple, expressive, et 100 % compatible avec les contraintes du mobile.
Comparaison avec lâUI React Native âde baseâ
Avant Ficus UI, la plupart des interfaces React Native étaient construites avec les composants et styles natifs (View, Text, StyleSheet.create).
Cela fonctionne trĂšs bien⊠mais câest souvent verbeux, peu expressif et difficile Ă maintenir Ă mesure que lâapplication grandit.
En React Native âclassiqueâ

import { View, Text, TouchableOpacity, StyleSheet } from 'react-native';
export default function Card() {
return (
<View style={styles.card}>
<Text style={styles.title}>React Native Ficus UI đż</Text>
<Text style={styles.subtitle}>
Découvrez Ficus UI pour vos apps React Native
</Text>
<TouchableOpacity style={styles.button}>
<Text style={styles.buttonText}>Explorer</Text>
</TouchableOpacity>
</View>
);
}
const styles = StyleSheet.create({
card: {
backgroundColor: '#f7fafc',
padding: 16,
borderRadius: 12,
shadowColor: '#000',
shadowOpacity: 0.1,
shadowRadius: 4,
},
title: {
fontSize: 24,
fontWeight: 'bold',
color: '#2d3748',
marginBottom: 8,
},
subtitle: {
fontSize: 16,
color: '#4a5568',
marginBottom: 12,
},
button: {
backgroundColor: '#319795',
paddingVertical: 10,
borderRadius: 6,
},
buttonText: {
color: '#fff',
fontWeight: '600',
textAlign: 'center',
},
});
Ce code est fonctionnel, mais il :
- nécessite un bloc de styles séparé, souvent redondant,
- rend la lecture moins fluide,
- ne sâadapte pas facilement Ă un thĂšme ou au mode sombre,
- et complexifie la réutilisation (chaque composant gÚre ses propres styles).
Avec Ficus UI
Le mĂȘme composant, Ă©crit avec Ficus UI, devient beaucoup plus dĂ©claratif et composable :
import { Box, Text, Button } from 'react-native-ficus-ui';
export default function Card() {
return (
<Box bg="gray.50" p="lg" borderRadius="lg" shadow="md">
<Text fontSize="4xl" fontWeight="bold" color="gray.800" mb="md">
React Native Ficus UI đż
</Text>
<Text fontSize="xl" color="gray.600" mb="lg">
Découvrez Ficus UI pour vos apps React Native
</Text>
<Button colorScheme="teal" full>Explorer</Button>
</Box>
);
}
Différences majeures :
-
Plus aucun StyleSheet à maintenir : les styles sont intégrés sous forme de props.
-
Les couleurs, espacements et tailles sont reliés au thÚme global.
-
Le composant est auto-documenté : la structure et le style se lisent ensemble.
-
Le thÚme gÚre dark mode, responsive et color schemes sans effort supplémentaire.
En dâautres termes :
Avec React Native âvanillaâ, vous dĂ©crivez comment styliser.
Avec Ficus UI, vous décrivez ce que vous voulez obtenir.
Un systĂšme de thĂšme puissant et personnalisable
Ficus UI intÚgre un systÚme de thÚme centralisé, inspiré de Chakra UI, qui définit les couleurs, espacements, typographies, breakpoints et variantes globales de vos composants.
Cela permet de maintenir une cohĂ©rence visuelle sur lâensemble de votre application tout en facilitant la personnalisation de votre design system.

import { AppRegistry } from 'react-native';
import { ThemeProvider } from 'react-native-ficus-ui';
import App from './src/App';
// this is our custom theme
const theme = {
colors: {
// Use Smart Swatch to generate colors palette <https://smart-swatch.netlify.app>
violet: {
50: '#f0eaff',
100: '#d1c1f4',
200: '#b199e7',
300: '#9171dc',
400: '#7248d0',
500: '#592fb7',
600: '#45248f',
700: '#311968',
800: '#1e0f40',
900: '#0c031b',
},
},
fontSizes: {
'6xl': 32,
},
space: {
'xs': 2,
'5xl': 64,
},
// components defaults can also be customized
components: {
Text: {
color: 'gray.100',
},
},
};
export default function Main() {
return (
<ThemeProvider theme={theme}>
<App />
</ThemeProvider>
);
}
Créez vos propres composants avec ficus()
Lâun des aspects les plus puissants de Ficus UI est sa fonction ficus(), qui vous permet de transformer nâimporte quel composant React Native ou tiers en composant Ficus.
Cela facilite lâintĂ©gration dâĂ©lĂ©ments personnalisĂ©s dans votre design system, tout en bĂ©nĂ©ficiant des style props.

import { ficus } from 'react-native-ficus-ui';
import { View } from 'react-native';
const Circle = ficus(View, {
baseStyle: {
borderRadius: 'full',
bg: 'teal.500',
},
});
<Circle w="12" h="12" />;
En quelques lignes, votre composant adopte toute la puissance de Ficus : thĂšme, responsive, color schemes, etc.
Concilier React Native et Chakra UI
Ficus UI ne cherche pas à remplacer React Native, mais à lui ajouter une couche de confort et de cohérence inspirée de Chakra UI.
Elle conserve donc les composants natifs que tout développeur React Native connaßt déjà , tout en leur ajoutant la puissance du systÚme de style et du thÚme.
Les composants de base que vous connaissez
PlutĂŽt que de rĂ©inventer des noms, Ficus UI conserve les mĂȘmes composants que ceux du cĆur de React Native :
-
Buttonâ un bouton stylisĂ©, mais basĂ© sur lePressablenatif -
Pressable,TouchableOpacity,TouchableHighlight, etc. â toujours disponibles et compatibles -
Text,Image,Inputâ inchangĂ©s, mais avec style props et thĂšme -
BoxetScrollBoxâ les uniques exceptions volontaires, qui remplacentViewetScrollViewpour correspondre Ă lâAPI de Chakra UI
Ainsi, vous gardez vos rĂ©flexes de React Native, tout en gagnant la syntaxe et la souplesse dâun systĂšme inspirĂ© du web.
Des surcouches utiles Ă des librairies populaires
En plus des composants de base enrichis, Ficus UI propose des composants âhaut niveauâ qui encapsulent des usages frĂ©quents dans les apps mobiles modernes.
Ces composants sâappuient sur des librairies React Native reconnues, mais avec une API simplifiĂ©e, cohĂ©rente et thĂ©matique.
PinInput

const SimplePinInput = () => {
const [pinValue, setPinValue] = React.useState(null);
return (
<PinInput
value={pinValue}
onChangeText={setPinValue}
keyboardType="number-pad"
colorScheme="teal"
/>
);
}
Basé sur https://github.com/retyui/react-native-confirmation-code-field
Slider
![]()
<Slider colorScheme="teal" defaultValue={0.2} />
Repose sur https://github.com/callstack/react-native-slider
DraggableModal

const SimpleModal = () => {
const { isOpen, onOpen, onClose } = useDisclosure();
return (
<Box h={500} bg="gray.50" p="xl">
<Button
colorScheme={!isOpen ? 'green' : 'red'}
onPress={() => {
if (!isOpen) {
onOpen();
} else {
onClose();
}
}}
>
{!isOpen ? 'Show Modal' : 'Hide Modal'}
</Button>
<DraggableModal
isOpen={isOpen}
onClose={onClose}
p="lg"
>
<Text fontSize="4xl" fontWeight="bold">
Settings
</Text>
<Text mt="xl">Your settings</Text>
</DraggableModal>
</Box>
);
}
Basée sur  react-native-bottom-sheet
Tabs

<Tabs
initialPage={0}
onChangeTab={setIndex}
selectedTab={index}
>
<TabList>
<Tab name="first">Tab 1</Tab>
<Tab name="second">Tab 2</Tab>
</TabList>
<TabPanels>
<TabPanel linkedTo="first" p="lg">
<Text>Content for the first tab</Text>
</TabPanel>
<TabPanel linkedTo="second" p="lg">
<Text>Content for the second tab</Text>
</TabPanel>
</TabPanels>
</Tabs>
-
Inspiré de Chakra UI Tabs
-
Basé sur
[react-native-tab-view](https://github.com/react-navigation/react-navigation)
đ En rĂ©sumĂ© :
Ficus UI ne masque pas React Native, elle lâenrichit.
Vous utilisez les composants que vous connaissez dĂ©jĂ , avec une API plus fluide, un thĂšme cohĂ©rent, et des intĂ©grations prĂȘtes Ă lâemploi pour les cas dâusage modernes.
Responsive et cross-platform par design
Le responsive est souvent un casse-tĂȘte sur React Native.
Avec Ficus UI, les style props peuvent accepter des valeurs par breakpoint, comme sur le web :
<Box bg={{ base: 'gray.100', md: 'gray.300' }} p={[2, 4, 6]}>
<Text>Layout adaptatif</Text>
</Box>
Cela permet de gérer facilement les différences entre téléphones, tablettes, et grands écrans, tout en conservant une syntaxe claire et déclarative.
Dark mode natif et intelligent
Le dark mode est aujourdâhui attendu dans toutes les applications mobiles â il amĂ©liore le confort visuel, Ă©conomise la batterie, et offre une expĂ©rience plus personnalisĂ©e Ă lâutilisateur.
Avec Ficus UI, le mode sombre est intégré nativement : inutile de gérer manuellement des styles conditionnels ou des thÚmes séparés.
Un thÚme adaptatif, basé sur les préférences systÚme
Ficus UI dĂ©tecte automatiquement la prĂ©fĂ©rence de lâutilisateur (sombre ou clair) et adapte dynamiquement les couleurs du thĂšme.
Vous pouvez aussi forcer un mode ou basculer manuellement entre les deux.
const { colorMode, toggleColorMode } = useColorMode();
<Button onPress={toggleColorMode}>
{colorMode === 'light' ? 'đ Dark mode' : 'âïž Light mode'}
</Button>
Les color schemes assurent un contraste optimal et une cohérence visuelle automatique.
Comparaison avec les autres librairies UI React Native(2025)
| Librairie | Points forts | Ce que Ficus UI apporte en plus |
|---|---|---|
| NativeBase / Gluestack UI | Complet, riche, maintenu | API plus proche de Chakra UI |
| React Native Paper | Basée sur Material Design | Ficus UI est agnostique, pas limitée par Material Design |
| UI Kitten | Complet | API moins intuitive |
| Tamagui | Cross-platform performant | API plus proche de Chakra UI |
| Dripsy | Minimal et extensible | Moins de composants prĂȘts Ă lâemploi |
Ficus UI vise le juste Ă©quilibre : puissant sans ĂȘtre complexe, lĂ©ger sans ĂȘtre limitĂ©, et familier pour les Ă©quipes web + mobile.
đż En conclusion
Ficus UI, câest notre maniĂšre de rendre le dĂ©veloppement mobile plus fluide, cohĂ©rent et agrĂ©able.
Câest une librairie qui reflĂšte notre philosophie : des outils simples, composables, et faits pour durer.
đ DĂ©couvrez-la sur ficus-ui.com
đ Contribuez sur GitHub
Et nâhĂ©sitez pas Ă dĂ©couvrir nos autres projets open-source :