AniUI
NewStable release · 2026-05-21

Expo SDK 56

AniUI 0.3.0 officially supports Expo SDK 56 (React 19.2.3 / React Native 0.85.3 / Reanimated 4.3). On SDK 55+ projects, you can run AniUI on either the NativeWind v5 preview track or the NativeWind v4 stable track — whichever fits your risk tolerance.

TL;DR

  • Production today? Use the NativeWind v4 stable track. NativeWind v5 is still pre-release.
  • Want the new CSS-first config? Use the NativeWind v5 preview track.
  • SDK 56 is New Architecture only. Old Arch was dropped back in SDK 55.

What's new in SDK 56#

Pinned versions
# Pinned by Expo SDK 56 (expo@56.0.3, released 2026-05-21)
expo                            ~56.0.3
react                           19.2.3
react-native                    0.85.3
react-native-reanimated         ~4.3.1
react-native-worklets           ~0.8.3   # new required peer
react-native-safe-area-context  ~5.7.0
react-native-gesture-handler    ~2.31.1
react-native-screens            4.25.2
react-native-svg                15.15.4

The main breaking change for AniUI users is the new react-native-worklets peer dependency. Reanimated 4.3 split the worklets runtime into its own package — projects that don't install it will fail to bundle. aniui init installs it automatically on SDK 56, and aniui doctor warns if it's missing.

Choose your NativeWind track#

v5 previewpre-release
  • • Tailwind v4 with CSS-first @theme config
  • • No tailwind.config.js
  • • Requires postcss.config.js + @tailwindcss/postcss
  • • No jsxImportSource in babel
  • • APIs may still change before v5 stable

Reference starter: examples/expo-56-starter

v4 stablerecommended
  • • Tailwind v3 with classic tailwind.config.js
  • @tailwind base/components/utilities in global.css
  • jsxImportSource: "nativewind" in babel + tsconfig
  • • Proven toolchain — safest for production
  • • Flip to v5 later when it stabilises

Reference starter: examples/expo-56-nw4-starter

Fresh install#

On Expo SDK 55+ projects without an existing nativewind dependency, aniui init asks which NativeWind track to use. Pass --nw v4 or --nw v5 to skip the prompt in scripted runs.

v5 preview

# Fresh Expo SDK 56 project, NativeWind v5 preview track
npx create-expo-app@latest my-app --template default@sdk-56
cd my-app

# Run AniUI init — pick "v5 preview" at the NativeWind track prompt
npx @aniui/cli init

# (or skip the prompt)
npx @aniui/cli init --nw v5 --yes

# Start
npx expo start -c

v4 stable

# Fresh Expo SDK 56 project, NativeWind v4 stable track
npx create-expo-app@latest my-app --template default@sdk-56
cd my-app

# Run AniUI init — pick "v4 stable" at the NativeWind track prompt
npx @aniui/cli init

# (or skip the prompt)
npx @aniui/cli init --nw v4 --yes

# Start
npx expo start -c

CSS format by track#

v5 preview (Tailwind v4)

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

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

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

v4 stable (Tailwind v3)

global.css
/* SDK 56 + NativeWind v4 stable */
@tailwind base;
@tailwind components;
@tailwind utilities;

:root {
  --background: 0 0% 100%;
  --foreground: 240 10% 3.9%;
  --primary: 240 5.9% 10%;
  /* ... */
  --radius: 0.5rem;
}

.dark {
  --background: 240 10% 3.9%;
  /* ... */
}

Migrating from SDK 55#

Migration steps
# Migration from Expo SDK 5556
# 1. Bump Expo + companion native modules
npx expo install expo@~56 react@19.2.3 react-native@0.85.3

# 2. Install the new required worklets peer
npx expo install react-native-worklets react-native-reanimated@~4.3.1

# 3. Bump safe-area-context
npx expo install react-native-safe-area-context@~5.7.0

# 4. Re-run aniui init to refresh templates (no template changes if staying on v5)
npx @aniui/cli init

# 5. Components — no changes needed.

If you were already on the v5 preview track, your global.css, metro config, and babel config don't change — only the underlying React / React Native / Reanimated versions and the new worklets peer.

Migrating from SDK 54#

Migration steps
# Migration from Expo SDK 5456
# 1. Bump Expo to SDK 56
npx expo install expo@~56

# 2. Switch to New Architecture if not already
#    Set "newArchEnabled": true in app.json (SDK 55 dropped Old Arch)

# 3. Bump Reanimated 34 and install the new worklets peer
npx expo install react-native-reanimated@~4.3.1 react-native-worklets

# 4. Decide: keep NativeWind v4 (stable, Tailwind v3) or flip to v5 preview (Tailwind v4)
#    Stay on v4 — your tailwind.config.js + global.css keep working.
#    Flip to v5  — re-run aniui init and pick "v5 preview" at the prompt.

npx @aniui/cli init

The biggest jump is the architecture switch. SDK 55 already removed Old Architecture support, and SDK 56 continues that. You also move from Reanimated 3 to Reanimated 4, which is why the new worklets peer appears.

Known footguns#

  • react-native-worklets:Required as a separate peer by Reanimated 4.3+. aniui doctor will flag this if it's missing.
  • expo/fetch default:SDK 56 makes expo/fetch the default globalThis.fetch. Set EXPO_PUBLIC_USE_RN_FETCH=1 to opt out if a dependency relies on the RN fetch behaviour.
  • @expo/vector-icons:Deprecated in SDK 56. Use @react-native-vector-icons/* instead (Expo ships a codemod).
  • expo-router:No longer transitively depends on @react-navigation/*. If you import navigation packages directly, install them explicitly.
  • React Compiler:Still incompatible with NativeWind's className transform. Do NOT enable experiments.reactCompiler in app.json. AniUI's init turns it off automatically.

Coming soon — Expo UI BottomSheet#

SDK 56 ships a new @expo/ui/community/bottom-sheet primitive that backs onto native SwiftUI / Jetpack Compose sheets. AniUI may adopt it as an opt-in component in a future release. It's intentionally not the default today because: (1) it's SDK 56 + Expo only — bare RN and SDK ≤55 users couldn't use it; (2) the drop-in API silently no-ops things like BottomSheetBackdrop and custom handles that AniUI's current sheet relies on. For now, bottom-sheet and action-sheet continue to use @gorhom/bottom-sheet, which works across all supported SDKs.