Skip to content

Repository files navigation

beUI Native

Animated, accessible components for React Native, built for touch. A native companion to beUI: the same component APIs and motion language, rebuilt for phones with Reanimated, Gesture Handler and Uniwind.

License: MIT npm Expo SDK 57 React Native 0.86 Platforms

Components · Setup guide · Try in Expo Go · CLI

Tabs on iOS
Tabs
Color Picker on iOS
Color Picker
Alert on iOS
Alert
Swipeable List on iOS
Swipeable List

Like beUI on the web, beUI Native isn't a dependency. You copy each component's source into your app and own it, by hand or with the CLI. Every component has a page on beui.dev with a recording, install steps and its docs, and a README here covering its API, motion and accessibility.

Quick start

  1. Do the one-time setup in your Expo or React Native app: Reanimated, Gesture Handler, Uniwind and the theme tokens.

  2. Add a component from your app's root:

    npx beui-native add tabs

    It copies the component and the shared files it needs into src/, and installs any libraries your app is missing.

  3. Use it:

    import { Tabs, TabsContent, TabsList, TabsTrigger } from "./src/components/tabs";
    
    <Tabs defaultValue="overview">
      <TabsList>
        <TabsTrigger value="overview">Overview</TabsTrigger>
        <TabsTrigger value="activity">Activity</TabsTrigger>
      </TabsList>
      <TabsContent value="overview">…</TabsContent>
      <TabsContent value="activity">…</TabsContent>
    </Tabs>

Components

Each name opens the component's page on beui.dev, with a recording from iOS and install steps.

Component What it does Docs
Actions
Button Spring press, ripple, icons, and a stateful variant for async actions. README
Expandable Control Buttons and chips that spring open to reveal a label or an action. README
Menu A pull-down menu with submenus you can slide a finger through. README
Card Composable surfaces, selectable with press feedback. README
Forms
Input Error shake, focus ring and a drawn success check. README
OTP Input Digits roll into slots, with SMS autofill. README
Select A panel that unfolds out of its trigger. README
Multi Select Searchable options that become removable chips. README
Color Picker A popover picker with a loupe under your finger. README
Checkbox A checkmark that draws itself in. README
Radio Group One dot glides to the option you pick. README
Range Slider A bar thumb that glides between steps. README
Switch A weighty thumb that squishes and stretches. README
Navigation and lists
Bouncy Accordion FAQ rows that spring apart as they open. README
Tabs Pill, segment and underline tabs with a gliding indicator. README
Swipeable List Rows that swipe to reveal actions. README
Motion and feedback
Number Animation Rolling tickers and count-ups. README
Text Animation Reveals, sweeps, shimmers, cascades and scrambles. README
Alert Feedback that eases in and folds away. README
Animated Badge Status pills whose icon and label roll. README
Loader Seventeen loading indicators from one size prop. README
AI agents
Message Rows that rise out of their corner, with avatars and typing dots. README
Message Bubble Six surfaces that pop from their corner, and a show more. README
Message Scroller Follows new output and lets go when you scroll up. README
Prompt Input A chat composer with attachments, voice and stop. README
Streaming Response A reply that streams in, then settles with actions. README
Agent Loading States Shimmers, cycling reasoning text and a progress timer. README
Agent Activity Steps, searches and tool calls in one live log. README
Todo List A plan whose marks morph as tasks finish. README
Tool Approval Hold to let an agent run a tool. README
Approval Card Swipeable questions, or a review to approve. README
Tool Result Output that streams in, then folds into a result. README
Citations Tap a number and its source springs up. README
Code Block Streaming code with fixed line numbers and wrap. README
File Diff Changes with live counts and folded context. README
Image Generation A dot field you can steer while the image forms. README
Voice Orb A liquid sphere that moves with your voice. README

Try it on your phone

Scan this code with Expo Go (SDK 57) to open the showcase, with every component on its own page in light and dark. Each component's page on beui.dev has a code that opens it directly.

QR code that opens the beUI Native showcase in Expo Go

To run the showcase from source, you need Node.js 22.13 or later and Bun 1.3.14:

git clone https://github.com/starc007/beui-native.git
cd beui-native
bun install --frozen-lockfile
bun dev

Scan the code it prints with Expo Go on a phone on the same network, or run bun ios or bun android.

Adding components by hand

The CLI does these steps for you. To do them yourself:

  1. Set up your app once with the setup guide: it installs the libraries, adds Uniwind to your Metro config and global.css, adds the theme tokens from src/styles/theme.css, and wraps your app in GestureHandlerRootView.
  2. Copy the component's folder from src/components/, with the shared files its README lists at the end. Keep the folder layout, since components import them by relative path:
    • src/hooks/: reduced motion, presence and shake helpers
    • src/primitives/: drawn paths and icons
    • src/styles/motion.ts: beUI's springs and easing curves
  3. Install its libraries. Each component's page on beui.dev lists the exact commands. In an Expo app, use npx expo install so versions match your SDK.

The components are tested with:

Library Version
React Native 0.86 (Expo SDK 57), React 19
Reanimated and Worklets 4.5 and 0.10
Gesture Handler 2.32
Uniwind with Tailwind CSS 1.12 with 4.3

The shared source doesn't depend on Expo, so the components also work in a bare React Native app.

Icons

Components take any icon library. An icon is a component given { size, color }, or a ready-made element. The showcase uses Hugeicons, imported one file per icon so only the icons in use are bundled.

Principles

  • Built for touch. Motion is designed for fingers, not ported from hover. Controls run on one spring so closing plays opening backward, gestures follow the finger on the UI thread, and anything a finger covers, like a color picker's thumb, gets a loupe.
  • Motion that respects people. Every component honors the system's Reduce Motion setting and takes a disableAnimation prop.
  • Accessible by default. Accessible names, roles and states, adjustable actions for screen readers, comfortable touch targets and support for large text are part of each component.
  • Yours to change. Components are plain source with semantic tokens, so restyling one is editing a class name.

Development

src/
  components/   One folder per component, each with a README
  hooks/        Shared hooks: reduced motion, presence, shake
  primitives/   Shared drawing and icon helpers
  styles/       Theme tokens and motion settings
  index.ts      Exports every component
example/        Expo Router showcase that imports ../src directly
  app/          The component list and one page per component
  components/   Showcases, and registry.ts listing every component
cli/            The beui-native CLI, published to npm
bun check          # TypeScript and Biome
bun run format     # Format and apply safe lint fixes
bun doctor         # Expo configuration and dependency checks
bun run export     # Production bundles for iOS and Android

Bundling isn't device testing. Before a component ships, check it on iOS and Android with VoiceOver or TalkBack, large text, reduced motion and cancelled gestures.

Install or upgrade app dependencies from example/ with bunx expo install <package> --bun, and commit the root bun.lock.

Contributing

Bug reports, component requests and pull requests are welcome. Read CONTRIBUTING.md to get set up, and follow the Code of Conduct.

Acknowledgements

  • beUI, the web library these components are ported from
  • Software Mansion for Reanimated and Gesture Handler
  • Uniwind for Tailwind styling in React Native
  • Hugeicons for the showcase's icons

Author

Built by Saurabh (@saurra3h on X), the creator of beUI.

License

MIT © 2026 beUI and Saurabh

Releases

Packages

Contributors

Languages