apps/docs/content/blog/en/choosing-react-native-ui-library.mdx
Choosing a React Native UI library is not just a component-count decision. It is a maintenance decision, a design decision, and increasingly an AI workflow decision.
The library you choose becomes the vocabulary your team uses every day. It shapes how designers hand off screens, how engineers compose interfaces, how quickly you can fix accessibility issues, and how well AI agents generate code that actually compiles.
This guide explains how we think about that decision, and why HeroUI Native is built the way it is.
Before comparing libraries, write down what your product needs:
Those questions matter more than a screenshot gallery.
Copy-paste UI can be useful when you need total code ownership. The trade-off is maintenance. Once the code is in your app, your team owns the updates, accessibility fixes, dependency changes, and design consistency.
HeroUI Native takes the package approach:
heroui-native.That does not mean a package is always better. If your team has a dedicated design system group and wants to own every line of component code, copied source may fit. But if your team wants to ship product screens without becoming a component-maintenance team, a maintained package is usually the healthier default.
Mobile apps are judged in milliseconds. A button press, sheet transition, input focus state, disabled control, or empty state can make an app feel cared for or unfinished.
HeroUI Native is intentionally opinionated about the baseline:
The goal is not to lock you into one visual identity. The goal is to start from a designed system rather than a pile of primitives.
HeroUI Native is strongest when you want one ecosystem across product surfaces:
That ecosystem is the advantage. A component library by itself saves some time. A design system, docs, Figma kit, AI context, and maintained package save coordination cost.
HeroUI Native is built specifically for React Native. It does not ask you to use web imports or CSS files that do not belong in mobile apps.
Use Native patterns:
import {Button} from "heroui-native";
<Button variant="primary" onPress={() => console.log("Pressed")}>
<Button.Label>Continue</Button.Label>
</Button>;
Avoid web patterns:
Do not use the HeroUI web package or web-only event handlers in React Native screens.
HeroUI Native uses onPress, HeroUINativeProvider, GestureHandlerRootView, Uniwind, and native overlay/portal patterns because those are the right abstractions for mobile.
Choose HeroUI Native when your team values design quality, maintainability, and ecosystem leverage. It is especially compelling if you already use HeroUI on the web, work from Figma, or build with AI coding assistants.
Start with the Quick Start, then read the Design Principles before building your first screen.