AniUI

Beautiful React Native components. Copy. Paste. Ship.

platform
expo

 •   •   •   •   • 


AniUI is a -inspired component library for React Native. Instead of installing a package, you copy component source files directly into your project. You own the code. Customize everything.

Built with (recommended) or , for accessibility, , and strict TypeScript. Every component is a single file, styled with Tailwind classes, and works on both iOS and Android out of the box.

Demo: |

Try on device: Scan with

Scan with Expo Go

Compatibility

Status
Expo✅ SDK 53, 54, 55, 56 & 57
Bare React Native✅ 0.76+
UniwindRecommended / default on Expo 55+
NativeWind✅ v4 (stable) + v5 (preview) — supported
rn-primitives✅ Headless a11y layer
TypeScript✅ Strict
JavaScript✅ Via CLI (tsx: false)
npm / pnpm / yarn / bun✅ All supported
New Architecture
Old Architecture✅ SDK 53/54 only
iOS✅ 15+
Android✅ API 24+

New: Expo SDK 57 + Uniwind is now the default → On Expo SDK 55+ projects, aniui init now defaults to (2–3× faster than NativeWind, Tailwind v4 CSS-first, no Babel transform). NativeWind stays fully supported via --style nativewind. Ships with Expo 57 starters for both engines (examples/expo-57-starter, examples/expo-57-nw5-starter). See and .

Quick Start

bash
# Initialize AniUI in your projectnpx @aniui/cli init              # npmpnpm dlx @aniui/cli init         # pnpmyarn dlx @aniui/cli init         # yarnbunx @aniui/cli init             # bun
# Choose your styling engine during init:npx @aniui/cli init --style uniwind      # default on Expo 55+ (recommended)npx @aniui/cli init --style nativewind   # NativeWind (supported)
# Add componentsnpx @aniui/cli add button card input text

That's it. Components are copied to your components/ui/ directory. Import and use them:

tsx
import { Button } from "@/components/ui/button";import { Card, CardHeader, CardTitle, CardContent } from "@/components/ui/card";import { Text } from "@/components/ui/text";
export function WelcomeScreen() {  return (    <Card>      <CardHeader>        <CardTitle>Welcome to AniUI</CardTitle>      </CardHeader>      <CardContent>        <Text variant="muted">Beautiful components for React Native.</Text>        <Button onPress={() => console.log("shipped!")}>          Get Started        </Button>      </CardContent>    </Card>  );}

Or install with the shadcn CLI / React Native Reusables

The full catalog is also published as a shadcn-compatible registry at https://aniui.dev/r, so you don't need the aniui CLI. Add the namespace to your components.json

jsonc
{ "registries": { "@aniui": "https://aniui.dev/r/{name}.json" } }

…then install with the shadcn CLI, or by raw URL with the React Native Reusables (RNR) CLI:

bash
npx shadcn@latest add @aniui/buttonnpx shadcn@latest add https://aniui.dev/r/card.jsonnpx @react-native-reusables/cli@latest add https://aniui.dev/r/card.json

Already on RNR / NativeWind / Uniwind? Components drop in with zero extra setup — same theme tokens and aliases. See the .

Components

93 components — all listed alphabetically. Each component's docs page tells you if it needs extra dependencies.

ComponentDescription
Expand/collapse content sections
Action sheet with options
Animation presets, spring configs, and hooks
Alert with default, destructive, success, warning
Confirmation dialog with Action/Cancel
Constrain content to a fixed width/height ratio
Image with fallback initials, 3 sizes
Status indicator with 4 variants
Full-width notification with variants and dismiss
Bottom sheet overlay
Navigation trail for the current page's location
Pressable with 5 variants and 3 sizes
Month grid with single date and range selection
Card with Header, Title, Content, Footer
Horizontal scrollable carousel with pagination dots
Sent/received message bubbles with timestamps and status
Checkbox with checked/unchecked/disabled
Interactive tag for filters and multi-select
Searchable select with multi-select, groups, clear, and custom rendering
Animated online/offline connection status banner
Animated show/hide content
Sortable, filterable data table with pagination
Calendar popup picker with range support
Modal with fade + scale overlay
RTL/LTR direction context with I18nManager
Slide-in side navigation panel
Context menu with fade animation
Placeholder for empty lists and error states
Floating action button with positioning
Form field with label, description, and error
Upload UI with dashed border, preview, and remove
Form context with validation, error messages, compound components
FlatList-based grid layout with configurable columns
Navigation header with back button, title, and actions
Preview content card triggered by long-press
Image with loading, error fallback, rounded variants
Horizontal carousel with fullscreen modal and pagination
FlatList with automatic load-more on scroll
Text input with default and ghost variants
Compose inputs with addons, buttons, and text
OTP verification input with individual cells
Keyboard key display with grouping
Form field label
Horizontal separator with centered text label
Styled list with ListItem, Title, Description
Auto-format masks for credit cards, phones, dates
Horizontal bar of menus with dropdown items
Numeric input with +/- buttons and min/max
Page navigation with numbered buttons and prev/next
Password with show/hide toggle and strength indicator
Phone number input with country code selector
Contextual overlay content
Formatted currency display with locale support
Progress bar
Multi-step wizard progress indicator
Radio button group with context
Star rating with interactive and read-only modes
Themed pull-to-refresh for ScrollView and FlatList
Styled SafeAreaView wrapper with theme variants
Search input with icon, clear, and cancel
iOS-style segmented control
Dropdown select
Horizontal or vertical divider
Collapsible side navigation panel with toggle
Animated loading placeholder
Draggable slider for numeric values
Loading spinner with 3 sizes
KPI display with value, trend, and change percentage
Online/offline/away/busy status dot
Numeric increment/decrement with min/max/step
Swipe to reveal action buttons (delete, archive, etc.)
Themed toggle switch
Bottom tab bar with badge support and active states
Data table with header, body, rows, and cells
Tab navigation with indicator transition
Typography with h1–h4, p, lead, large, small, muted
Multi-line text input
Theme context with light/dark/system mode and toggle
Vertical timeline for events and order tracking
Slide-in notification with auto-dismiss
Two-state toggle button with variants
Exclusive selection group
Fade-in tooltip on press
Animated typing dots for chat interfaces

Prerequisites

AniUI requires these in your project:

bash
# Requirednpm install nativewind tailwindcss@3 class-variance-authority clsx tailwind-merge
# For Tier 2 componentsnpm install react-native-reanimated
# For Tier 3 components (as needed)npm install @gorhom/bottom-sheet react-native-gesture-handler

Supported platforms: See table above.

Production Ready

AreaStatus
93 components
Component & CLI tests (Jest)
Accessibility audit
Performance benchmarks
CLI (npx @aniui/cli add)
MCP server
.cursorrules
Interactive docs site
Contributing guide
Issue templates
E2E tests (Detox)🔜 Coming
CI/CD (GitHub Actions)🔜 Coming
VS Code extension🔜 Coming
Discord🔜 At 500 stars

Documentation

Visit the for interactive previews, code examples, and API reference for every component.

Or run it locally:

bash
cd docsnpm installnpm run dev

Philosophy

AniUI follows a set of principles that keep it different from other React Native UI libraries:

  • You own the code. Components are source files, not npm dependencies. Fork, modify, delete — it's yours.
  • Mobile only. No web compromises. Every component is built and tested for iOS and Android.
  • NativeWind all the way. No StyleSheet.create(). Every style is a Tailwind class. Override anything with className.
  • One file per component. No splitting across multiple files. Each component is self-contained and under 80 lines.
  • Minimal dependencies. A component doesn't add a dependency unless 3+ components need it.
  • Accessible by default. Every interactive component has accessibilityRole set on day one.
  • Dark mode built in. HSL CSS variables that switch automatically between light and dark themes.

Theme

AniUI uses CSS custom properties for theming, just like shadcn/ui. Customize colors in global.css:

css
:root {  --background: 0 0% 100%;  --foreground: 240 10% 3.9%;  --primary: 240 5.9% 10%;  --primary-foreground: 0 0% 98%;  --secondary: 240 4.8% 95.9%;  --muted: 240 4.8% 95.9%;  --destructive: 0 84.2% 60.2%;  --border: 240 5.9% 90%;  /* ... */}
.dark {  --background: 240 10% 3.9%;  --foreground: 0 0% 98%;  /* ... */}

Project Structure

your-project/├── components/│   └── ui/│       ├── button.tsx      # Copied by `aniui add button`│       ├── card.tsx         # Copied by `aniui add card`│       └── ...├── lib/│   └── utils.ts            # cn() helper — copied by `aniui init`├── global.css              # Theme variables└── tailwind.config.js      # AniUI theme tokens

Contributing

Contributions are welcome! Please read the contributing guide [blocked] and component guidelines [blocked] before submitting a PR.

bash
# Clone the repogit clone https://github.com/anishlp7/aniui.gitcd aniui
# Run testscd cli && npm install && npm test
# Start the docs dev servercd ../docs && npm install && npm run dev

License

MIT. See LICENSE [blocked].