Aller au contenu
Nous contacter
BearStudio

Ficus UI 🌿 — UI simple et composable pour React Native

Le

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”

Composant card d&#x27;exemple affichĂ©, textes affichĂ©s :<div></div>React Native Ficus UI 🌿 DĂ©couvrez Ficus UI pour vos apps React Native<div></div>Bouton : Explorer

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.

Palettes de couleurs du thÚme par défaut

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.

Composant ficus affichant un rond avec la couleur "teal" en background

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 le Pressable natif

  • Pressable, TouchableOpacity, TouchableHighlight, etc. → toujours disponibles et compatibles

  • Text, Image, Input → inchangĂ©s, mais avec style props et thĂšme

  • Box et ScrollBox → les uniques exceptions volontaires, qui remplacent View et ScrollView pour 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

Composant ficus PinInput (4 champs input number permettent de saisir un code Ă  4 chiffres par exemple)

Tester sur la doc

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

Composant ficus Slider affiché en exemple

Tester sur la doc

<Slider colorScheme="teal" defaultValue={0.2} />

Repose sur https://github.com/callstack/react-native-slider

DraggableModal

Tester sur la doc

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

Composant ficus Tabs affiché en exemple

Tester sur la doc

<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)

LibrairiePoints fortsCe que Ficus UI apporte en plus
NativeBase / Gluestack UIComplet, riche, maintenuAPI plus proche de Chakra UI
React Native PaperBasée sur Material DesignFicus UI est agnostique, pas limitée par Material Design
UI KittenCompletAPI moins intuitive
TamaguiCross-platform performantAPI plus proche de Chakra UI
DripsyMinimal et extensibleMoins 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 :

Publié le
par Nicolas Torion