Tags : #Développement #Développement mobile #React native
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 đż
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.
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.

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 :
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 :
En dâautres termes :
Avec React Native âvanillaâ, vous dĂ©crivez comment styliser.
Avec Ficus UI, vous décrivez ce que vous voulez obtenir.
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>
);
}
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.
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.
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 le Pressable natifPressable, TouchableOpacity, TouchableHighlight, etc. â toujours disponibles et compatiblesText, Image, Input â inchangĂ©s, mais avec style props et thĂšmeBox et ScrollBox â les uniques exceptions volontaires, qui remplacent View et ScrollView pour correspondre Ă lâAPI de Chakra UIAinsi, vous gardez vos rĂ©flexes de React Native, tout en gagnant la syntaxe et la souplesse dâun systĂšme inspirĂ© du web.
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>
react-native-tab-viewđ 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.
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.
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.
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.
| 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.
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 :
Publié le 24/12/2025 dans Développement
Rédigé par :