React Native Reusables

shadcn/ui brought to React Native: copy-and-paste components and auth blocks for iOS, Android, and web, styled with Nativewind or Uniwind.

39 published items

Founded Labs

39 published items

A window overlaid on either the primary window or another dialog window, rendering the content underneath inert.

ExpoUniversalExpo Go

A wrapper that renders any Lucide icon with utility classes and inherits the surrounding text color.

ExpoUniversalExpo Go

A visually persistent menu common in desktop applications that provides quick access to a consistent set of commands.

ExpoUniversalExpo Go
Progress

Displays an indicator showing the completion progress of a task, typically displayed as a progress bar.

ExpoUniversalExpo Go
Radio Group

A set of checkable buttons—known as radio buttons—where no more than one of the buttons can be checked at a time.

ExpoUniversalExpo Go
Tabs

A set of layered sections of content—known as tab panels—that are displayed one at a time.

ExpoUniversalExpo Go
Tooltip

A popup that displays information related to an element when the element receives keyboard focus, the mouse hovers over it, or when it is pressed.

ExpoUniversalExpo Go

Bringing the shadcn/ui experience to React Native

Built with familiar tools and libraries, it follows consistent styling, structure, and naming conventions, letting you use your favorite design system to create beautiful universal apps. Every item is a file you own: add it, then change it.

Key differences from shadcn/ui

  • Nativewind or Uniwind: a Tailwind-like experience adapted for React Native. Every item ships in both flavors; pick the one matching your styling engine.
  • RN Primitives: a universal port of Radix UI primitives for React Native with an almost identical API, enabling consistent composition on native platforms. See https://rnprimitives.com
  • Portals: React Native doesn't support DOM portals. On native platforms, components like modals and menus need a PortalHost mounted at the root of the app.
  • No cascading styles: child elements like Text can't inherit styles from a parent class. Each element must be styled directly. A small TextClassContext workaround lets Text inherit from components like Button.
  • No data attributes: React Native doesn't support data-* attributes, so variants rely on props or state on native platforms.
  • Reanimated: uses react-native-reanimated for smooth, native performance.
  • Icons: a wrapper component combined with a Lucide icon avoids wrapping every imported icon individually, for example <Icon as={LeftArrowIcon} />.
  • Programmatic control: some components, such as DropdownMenu, can't be controlled with open or onOpenChange props. Instead, a ref manages open and close behavior after layout calculation.

React Native Reusables aims to stay true to the spirit of shadcn/ui while adapting it to the unique constraints of mobile and universal development.

Getting started

New project: npx @react-native-reusables/cli@latest init creates an Expo app with everything configured. Existing project: add any item and follow the guide that comes with it.