AniUI
NewNewest supported SDK

Expo SDK 57

AniUI officially supports Expo SDK 57 (React 19.2.3 / React Native 0.86 / Reanimated 4.5). Uniwind is the default styling engine, and NativeWind stays fully supported on both the v5 preview and v4 stable tracks.

TL;DR

  • Starting fresh? Just run npx @aniui/cli init Uniwind is the recommended default on SDK 55+.
  • Prefer NativeWind? Pass --style nativewind and pick a track with --nw v4 or --nw v5.
  • SDK 57 is New Architecture only. Old Arch support ended with SDK 54.

What ships in SDK 57#

Pinned versions
# Pinned by Expo SDK 57 (expo@~57.0.0)
expo                            ~57.0.0
react                           19.2.3
react-native                    0.86.0
react-native-reanimated         ~4.5.0
react-native-worklets           ~0.10.0  # required peer of Reanimated 4
react-native-gesture-handler    ~2.32.0
react-native-safe-area-context  ~5.7.0
react-native-screens            ~4.23.0
react-native-svg                15.15.x

Compared to SDK 56, the whole native stack moves forward: React Native 0.85.3 → 0.86, Reanimated ~4.3 → ~4.5, react-native-worklets ~0.8 → ~0.10, and gesture-handler ~2.31 → ~2.32. aniui init installs the native packages (including react-native-worklets) via expo install, so they land at the versions Expo pins for SDK 57 — don't install them with raw npm install.

Choose your styling engine#

Uniwinddefault
  • • Tailwind v4 CSS-first config (@theme + @variant)
  • • Metro-plugin only — withUniwindConfig(config, { cssEntryFile })
  • • No Babel transform, no jsxImportSource, no nativewind-env.d.ts
  • • Dark mode without a ThemeProvider
  • • Requires New Architecture (SDK 57 is New-Arch only anyway)

Reference starter: examples/expo-57-starter

NativeWindsupported
  • • Two tracks, same as SDK 56:
  • v5 preview — Tailwind v4, CSS-first, postcss.config.js, no jsxImportSource
  • v4 stable — Tailwind v3, tailwind.config.js, jsxImportSource: "nativewind"
  • • Pick with --nw v4 / --nw v5 or at the prompt
  • • Soft-deprecated in AniUI but fully supported

Reference starter: examples/expo-57-nw5-starter

Fresh install#

On SDK 57, aniui init defaults to Uniwind and auto-installs everything that's missing: the engine, Tailwind, Reanimated, worklets, plus the base deps (safe-area-context, svg, lucide-react-native, cva, clsx, tailwind-merge). An already-installed engine always wins the auto-detection; --style is authoritative over both.

Uniwind (default)

# Fresh Expo SDK 57 project — Uniwind (default engine)
npx create-expo-app@latest my-app --template default@sdk-57
cd my-app

# Run AniUI init — Uniwind is pre-selected on SDK 55+
npx @aniui/cli init

# (or skip all prompts — --yes also picks Uniwind on SDK 57)
npx @aniui/cli init --yes

# Start
npx expo start -c

NativeWind

# Fresh Expo SDK 57 project — NativeWind track
npx create-expo-app@latest my-app --template default@sdk-57
cd my-app

# Force NativeWind, then pick a track at the prompt
npx @aniui/cli init --style nativewind

# Or pin the track up front (no prompt)
npx @aniui/cli init --style nativewind --nw v5   # v5 preview (Tailwind v4)
npx @aniui/cli init --style nativewind --nw v4   # v4 stable  (Tailwind v3)

# Start
npx expo start -c

CSS format by engine#

Uniwind

global.css
/* SDK 57 + Uniwind (default) */
@import "tailwindcss";
@import "uniwind";

@theme {
  --radius: 0.5rem;
}

@layer theme {
  :root {
    @variant light {
      --color-background: hsl(0 0% 100%);
      --color-foreground: hsl(240 10% 3.9%);
      /* ... */
    }

    @variant dark {
      --color-background: hsl(240 10% 3.9%);
      /* ... */
    }
  }
}

NativeWind v5 preview

global.css
/* SDK 57 + NativeWind v5 preview */
@import "tailwindcss";
@import "nativewind/theme";

@theme {
  --color-background: hsl(0 0% 100%);
  --color-foreground: hsl(240 10% 3.9%);
  /* ... */
  --radius: 0.5rem;
}

@media (prefers-color-scheme: dark) {
  :root {
    --color-background: hsl(240 10% 3.9%);
    /* ... */
  }
}

The NativeWind v4 stable track keeps the classic Tailwind v3 format (@tailwind base/components/utilities + tailwind.config.js) — see the Expo SDK 56 guide for the side-by-side.

Migrating from SDK 56#

Migration steps
# Migration from Expo SDK 5657
# 1. Bump Expo + React / React Native (expo install pins the right versions)
npx expo install expo@~57 react@19.2.3 react-native@0.86.0

# 2. Bump the animation stack: Reanimated 4.3~4.5, worklets 0.8~0.10
npx expo install react-native-reanimated react-native-worklets

# 3. Bump gesture-handler (2.31~2.32) and safe-area-context (~5.7)
npx expo install react-native-gesture-handler react-native-safe-area-context

# 4. Components + config — no changes needed. Same engine, same templates.

This is a version-bump-only migration. Your engine choice, templates, global.css, metro config, and components all carry over unchanged — only React Native (0.86), Reanimated (~4.5), worklets (~0.10), and gesture-handler (~2.32) move.

Migrating from SDK 55#

Migration steps
# Migration from Expo SDK 5557
# 1. Bump Expo to SDK 57
npx expo install expo@~57

# 2. Install the worklets peer (required since SDK 56 / Reanimated 4.3+)
npx expo install react-native-reanimated react-native-worklets

# 3. Bump the rest of the native stack
npx expo install react-native-gesture-handler react-native-safe-area-context react-native-svg

# 4. Re-run aniui init to refresh templates
#    (Uniwind is now the default engine — pass --style nativewind to stay)
npx @aniui/cli init

Coming from SDK 55 you pick up the react-native-worklets peer that Reanimated 4.3+ introduced in SDK 56, plus the SDK 57 version bumps above. Components need no changes — className, cn(), and cva() are identical across engines and SDKs.

SDK 57 starters#

Known footguns#

  • New Architecture only:SDK 57 does not support Old Architecture. If you're still on Old Arch, stay on SDK 54 (NativeWind v4) until you can switch.
  • react-native-worklets:Still a required separate peer of Reanimated 4 — SDK 57 wants ~0.10 (SDK 56 used ~0.8). Missing or mismatched versions fail at bundle time. aniui init installs it automatically and aniui doctor flags it if it's missing.
  • Use expo install:Native packages (reanimated, worklets, gesture-handler, safe-area-context, svg) must match the SDK 57 pins. The CLI routes them through expo install for exactly this reason — do the same when bumping manually.
  • React Compiler:Still incompatible with NativeWind's className transform — aniui init disables experiments.reactCompiler in app.json on the NativeWind tracks. Uniwind styles via its metro plugin, so it's unaffected.
  • lightningcss (NativeWind v5):The NativeWind v5 starter pins lightningcss@1.30.1 via package.json overrides. If Tailwind v4 CSS processing errors on the v5 track, add the same override.
  • No jsxImportSource on Uniwind / NativeWind v5:Only the NativeWind v4 stable track uses jsxImportSource: "nativewind" in babel + tsconfig. Leaving it behind after switching engines breaks styling — aniui init removes it when it configures the v5 track.