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 nativewindand pick a track with--nw v4or--nw v5. - SDK 57 is New Architecture only. Old Arch support ended with SDK 54.
What ships in SDK 57#
# 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.xCompared 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#
- • Tailwind v4 CSS-first config (
@theme+@variant) - • Metro-plugin only —
withUniwindConfig(config, { cssEntryFile }) - • No Babel transform, no
jsxImportSource, nonativewind-env.d.ts - • Dark mode without a ThemeProvider
- • Requires New Architecture (SDK 57 is New-Arch only anyway)
Reference starter: examples/expo-57-starter
- • Two tracks, same as SDK 56:
- • v5 preview — Tailwind v4, CSS-first,
postcss.config.js, nojsxImportSource - • v4 stable — Tailwind v3,
tailwind.config.js,jsxImportSource: "nativewind" - • Pick with
--nw v4/--nw v5or 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 -cNativeWind
# 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 -cCSS format by engine#
Uniwind
/* 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
/* 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 from Expo SDK 56 → 57
# 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 from Expo SDK 55 → 57
# 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 initComing 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#
- examples/expo-57-starter — Uniwind 1.6 + Tailwind 4.2, the default setup
aniui initproduces on SDK 57. - examples/expo-57-nw5-starter — NativeWind 5.0.0-preview + react-native-css + Tailwind v4 (
--style nativewind --nw v5). - examples/with-uniwind — the Uniwind showcase app, also on Expo SDK 57.
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 initinstalls it automatically andaniui doctorflags 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 throughexpo installfor exactly this reason — do the same when bumping manually. - React Compiler:Still incompatible with NativeWind's className transform —
aniui initdisablesexperiments.reactCompilerin app.json on the NativeWind tracks. Uniwind styles via its metro plugin, so it's unaffected. lightningcss(NativeWind v5):The NativeWind v5 starter pinslightningcss@1.30.1via package.jsonoverrides. If Tailwind v4 CSS processing errors on the v5 track, add the same override.- No
jsxImportSourceon Uniwind / NativeWind v5:Only the NativeWind v4 stable track usesjsxImportSource: "nativewind"in babel + tsconfig. Leaving it behind after switching engines breaks styling —aniui initremoves it when it configures the v5 track.
