Try Uniwind Pro Demo
See the C++ engine, ShadowTree updates, Reanimated animations, and native transitions in action. Clone the demo app (Uniwind Pro v1.6.0, Expo SDK 56 / RN 0.85.3) and run it on your iOS simulator. No account required.
Uniwind Pro 1.8.1
- React Native 0.88 support - Added compatibility with React Native 0.88. 1.8.0 fails to build there because
ImageProps::tintColorbecame optional. See Compatibility :rootparsing fix - Classes that follow a:rootblock, including inside@layer,@supports, and@media, no longer have their declarations parsed as CSS variables instead of styles- Web styles on late CSS load fix - JS-resolved styles like
useCSSVariableanduseResolveClassNamesnow refresh when CSS loads after module initialization, such as during Metro web development startup - InputAccessoryView circular dependency fix - Fixed a circular dependency on web, where React Native Web’s internal imports resolved to Uniwind’s styled components instead of the originals
- Vite Reanimated import fix - On Vite 8,
react-nativeimports from dependencies innode_modulesnow resolve toreact-native-web, preventing Reanimated from cycling through Uniwind’s animation wrappers before its exports initialize
Uniwind Pro 1.8.0
- Faster mounts - Fixed a mount performance regression introduced in 1.7.0. Fiber tracking now uses a different algorithm, and unmounted nodes are unlinked in a single batch
font-variation-settingssupport - Added support forfont-variation-settings. React Native applies it from 0.88text-start/text-endsupport -text-align: startandendnow pass through astextAlign. React Native resolvesendfrom 0.87, and older versions fall back to natural alignment- InputAccessoryView on web - Added web support for
InputAccessoryView, including styling throughclassName - No more View and Text remounts - Toggling
aria-*props onView, or props likenumberOfLines,disabled,accessibilityState,selectionColororstyleonText, no longer swaps the underlying component - Stale theme after navigating back fix - Fixed screens showing the previous theme after navigating back following a theme change. After each flip, Uniwind now points React’s node references at the committed Shadow Tree, so later React commits no longer rebuild from pre-flip nodes
- Theme transitions on 120Hz fix - Fixed theme transitions being skipped on 120Hz displays, where the snapshot cleanup could fire before the theme flip. Orphaned transition snapshots are now always removed
- setTheme on mount fix - Calling
Uniwind.setThemefrom a screen’s mount effect now updates that screen. Affected components are resolved when the Shadow Tree update is committed, not when the flip is requested - Gradients after theme updates fix - Gradients like
bg-linear-to-r,to-l,to-tandto-bare no longer dropped after Shadow Tree updates, and inlinebackgroundImagewithout theexperimental_prefix (React Native 0.87+) keeps its gradient vw/vhand safe area after rotation fix - Viewport units and safe area classes (w-[50vw],pt-safe) now update after rotation, Split View resize, or inset changes instead of keeping their launch values- Activity and Suspense reveal fix - Content revealed by
Activityor Suspense now picks up theme and style changes that happened while it was hidden - Media query blocks fix - Fixed only the first utility of a shared media block keeping its media query, which caused
android:utilities to apply on iOS (and vice versa), and breakpoint utilities to apply below their breakpoint - Exclusive breakpoint boundaries fix - Exclusive media query bounds no longer match at the exact boundary value
- React Native below 0.86.1 build fix - The native props mutex added in 1.7.0 is now only used on React Native 0.86.1+, where it exists
- Aliased package resolution fix - Fixed Metro resolving a hoisted public
uniwindinstead of Pro when it is installed under an alias ("uniwind": "npm:uniwind-pro") and Expo autolinking resolution is enabled - Metro entry fallback fix - Added
mainandreact-nativefields topackage.json, fixingUnable to resolve "uniwind"when Metro doesn’t useexports - Expo tree shaking fix - Uniwind’s injected JS is no longer optimized away by Expo’s tree shaking
- Resolver rewrite fix - The Metro resolver no longer rewrites unrelated imports when a parent directory is named
react-native - Atomic CSS artifact writes -
uniwind.cssand the type declarations are now written atomically, fixing randomMissing closing } at @themeerrors in CI - Component subpath types fix - Fixed
no-types.d.tsnot being published - Vite 8 deprecation warning fix - Removed the deprecated
customResolveralias option, which triggered a warning on Vite 8 and is removed in Vite 9
Uniwind Pro 1.7.0
- Origin-based theme transitions - Three new presets start the animation from the point you pressed:
CircleFromOrigin,SlideFromOrigin, andBlurFromOrigin. Passorigin: { x, y }from a press event’spageX/pageY, or omit it to reveal from the screen center. Works on iOS, Android, and Web. See Theme Transitions - Blurred views in Android transitions - Android now snapshots the window with
PixelCopy, so views usingfilter: blur()keep their blur in the transition overlay instead of rendering sharp drop-shadowfilter - Added support for Tailwind’sdrop-shadow-*utilities, including preset sizes, arbitrary values, and color modifiers. They compile to native filters and combine with other filters likeblur-*. See Filters- Best-in-class support for suspended and frozen screens ❄️ - Uniwind Pro now tracks React fibers and performs correct Shadow Tree updates on screens frozen by
react-freezeor suspended by React, such as inactive tabs in React Navigation - Faster style resolution - Improved caching of theme updates, and components with static class names no longer register with the Shadow Tree
- Tailwind 4.3.3 support - Tailwind 4.3.3 emits flattened variant selectors (
.active\:x:active) instead of nested ones. Variants likeactive:,disabled:,dark:,dir(), anddata-*now compile correctly on both selector shapes, and flattened theme roots are handled on web - Nitro Modules upgrade - Updated to
react-native-nitro-modules0.37.1. See Compatibility - Faster dev reloads - The native runtime skips stylesheet reinitialization when the generated styles and themes haven’t changed
- Default styles regression fix - Fixed components such as
TouchableOpacitylosing theme updates withexperimental.defaultStylesenabled, and fixed accent targets like aScrollViewcontent container not resolving through the Shadow Tree synchronizer - iOS dimensions fix - Screen dimensions and pixel ratio now fall back to the main screen when no window is presented, and refresh when the app becomes active
- Pressable remount fix - Animated
Pressableno longer remounts when the theme changes during an active press, which could leave it stuck in the pressed state - Web lazy components hot reload fix - CSS changes now hot reload for lazily loaded components on web
- Symlinked packages fix - The Metro resolver now keeps Uniwind’s internal imports internal when the package is symlinked, as with pnpm and monorepos
- Native props thread safety - Access to native props is now guarded by a mutex. This mutex only exists in React Native 0.86.1+, so 1.7.0 fails to build on older React Native versions. Use 1.8.0 instead
Uniwind Pro 1.6.0
- Scoped variables - New
ScopedVariablescomponent overrides CSS variables for a single subtree, with nested scopes resolving nearest-first - Prebuilt XCFramework for React Native 0.85.3 - The Uniwind Pro Demo now ships a prebuilt XCFramework for React Native 0.85.3, so you can run Pro on the iOS Simulator without a license
- Filter support - Added
filtersupport on iOS and React Native 0.87 canary - React Native 0.87 type alignment - Aligned Uniwind types with the latest React Native 0.87
- React Native 0.87 color scheme handling - Updated color scheme handling for React Native 0.87 compatibility
- dataSet resolution fix -
dataSetnow resolves toundefinedwhen nodata-setprop was provided - Web bundling fix - Fixed React Native web bundling by adding a
browserexports field
Uniwind Pro 1.5.1
- React Native 0.87 support - Added compatibility with React Native 0.87. See Compatibility
- Nitro Modules upgrade - Updated to
react-native-nitro-modules0.36.5 - Touchable type removed - Removed the
Touchabletype reference from package types to align with React Native’s Strict TypeScript API - Expo transform worker fix - Fixed monorepos containing both an Expo app and a plain React Native app, where the plain RN app could resolve Expo’s transform worker and fail to build
- Vite 8 prebundling fix - Fixed Vite 8 not prebundling
react-native-web - Web theme initialization fix - Web themes now initialize from an existing theme class on the page, preventing theme flicker on server-rendered pages
- Multiline class names fix - Fixed styling for native components when class names are separated by newlines or other whitespace
- withUniwind web props fix -
withUniwindno longer forwardsclassNameprops to wrapped components on web after converting them
Uniwind Pro 1.5.0
- Expo SDK 57 support - Added compatibility with Expo SDK 57. See Compatibility
- Precompiled headers - Added precompiled headers for Android and iOS, speeding up native Uniwind compilation by up to 30%. Enabled by default. See Precompiled Headers
- Safe area RTL classes - Added RTL-aware safe area utilities (
ps-safe,pe-safe,ms-safe,me-safe,start-safe,end-safe) for the logical start and end edges. See Safe Area Classes min()CSS function - Added support for themin()CSS function in your styles- React Native 0.86 converters - Aligned all CSS C++ converters with React Native 0.86
- C++ converter tests - Added 85 new C++ test cases covering every converter, running on each CI build
- Nitro Modules upgrade - Updated to
react-native-nitro-modules0.36.1 - AGENTS.md refresh - Refreshed the
AGENTS.mdguidance for AI-assisted development !importantspecificity fix - Fixed!importantspecificity when combined with state variants
Uniwind Pro 1.4.0
- SHA-256 payload verification - The CLI now verifies every downloaded payload against a published checksum before extracting it, and re-verifies the local cache on every restore. If verification fails, nothing is installed. Checksums are publicly available per version. See Verifying Downloads
- CDN integrity headers - Download responses now include an RFC 9530
Repr-Digestheader and honorIf-None-Matchconditional requests - LayoutDirection component - Force RTL or LTR for a subtree without changing the global device RTL state. See Layout Direction
- C++ converter tests - Added 42 C++ test cases for the converters: pure
folly::dynamicconversions plus JSI marshalling against a real Hermes runtime, running on every CI build - Combined variants fix - Fixed combined variants overriding each other
- Bundler infinite loop fix - Fixed an infinite bundler loop when multiple Uniwind instances are installed
- Web variant condition fix - Fixed the web variant resolution condition
Uniwind Pro 1.3.0
- Vite 8 support - Added support for Vite 8 in the Uniwind Vite plugin
- Nitro Modules as peer dependency - Moved
react-native-nitro-modulesto peer dependencies so apps control the installed Nitro version - Isolated install fix - Fixed phantom dependencies so isolated installs work correctly
- CLI improvements - Added a more verbose error reason for stack traces
Uniwind Pro 1.2.1
- Nitro Modules upgrade - Updated to
react-native-nitro-modules0.35.9 - Examples updated - Updated example apps to Expo SDK 56 and React Native 0.85+
- Functions instead of computed values - Replaced computed values with functions in style for more predictable resolution
- Artifact generation script - Added a script to generate artifacts for Uniwind
- Better uniwind-pro CLI error handling - The
uniwind-proCLI now shows stacktraces, HTTP error codes, and other details for easier debugging
Uniwind Pro 1.2.0
- Default styles for React Native components - Added experimental default styles support for styling built-in React Native components directly from CSS. Enable it with
experimental.defaultStyles. See Default Styles - Nitro Modules upgrade - Updated to
react-native-nitro-modules0.35.7 - Silent CSS variable warning for SSR - CSS variable warnings are now silenced during server-side rendering
- Improved hot reload - Hot reload is now more reliable during development
- Flex shorthand parsing fix - Fixed
flex: 1being parsed into separated styles - Major bundler refactor - Refactored the bundler internals to improve maintainability and prepare for future CSS processing features
Uniwind Pro 1.1.3
- Metro variable dependency fix - Added missing variable metro dependency to the C++ side so CSS variable updates resolve correctly
- Cache wipe on CSS variables update - Cache is now wiped after CSS variables update to prevent stale values from being applied
- !important support - Tailwind
!importantmodifier is now respected (e.g.,!bg-red-500) - Deeply themed variables fix - Fixed lookup for deeply nested themed variables
Uniwind Pro 1.1.2
- Logical inset utilities fix - Fixed
inset-sandinset-eclass names in Uniwind Pro by bumping Tailwind to 4.2.1 for the new syntax - line-clamp respected - Fixed
line-clamp-*classes not being respected in Uniwind Pro
Uniwind Pro 1.1.1
- getCSSVariable function - New
Uniwind.getCSSVariablereads CSS variable values from outside of React components, perfect for event handlers, async callbacks, and utility modules. See getCSSVariable - Logical border utilities -
border-sandborder-enow correctly map toinline-startandinline-endborder properties for RTL-aware layouts - Joined border radius parsing - Fixed border radius parsing so combined corner classes apply correctly across affected components
- Nitro Modules upgrade - Updated to
react-native-nitro-modules0.35.6 - Removed deprecated PushNotificationIOS getter - Dropped the deprecated
PushNotificationIOSgetter to align with current React Native versions
Uniwind Pro 1.1.0
- Group Tailwind selectors - Added support for Tailwind’s
groupvariants (group-active:*,group-focus:*) with named groups. State propagates through the C++ shadow tree with no React re-renders. See Group Variants - Nitro Modules upgrade - Updated to
react-native-nitro-modules0.35.5 - Node resolver for escaped paths - Switched to the Node resolver to prevent escaped traversal errors
- oxlint migration - Replaced ESLint with
oxlintfor faster linting - Config attributes and lint rules - Updated config attribute naming conventions and lint rule set
- updateCSSVariable inside scoped themes - Fixed CSS variable propagation across scoped themes when theme switches
- CJS injection fix - Inject CJS instead of ESM at initialization so debug Metro builds without tree shaking don’t break
Uniwind Pro 1.0.1
Uniwind Pro is now stable! After months of beta testing and seven release candidates, the C++ engine is production-ready. Thank you to every team that helped us get here.
- Dev warnings for color props - Uniwind now warns in dev mode when you pass a regular Tailwind class (e.g.,
bg-blue-500) to a color prop that expects theaccent-prefix (e.g.,thumbColorClassName,trackColorOnClassName). This helps catch styling mistakes early - Nitro Modules upgrade - Updated to
react-native-nitro-modules0.35.3 - Metro transformer path fix - Fixed reading absolute
cssPathinstead of relative one inmetro-transformer - CSS file transforming fix - Fixed CSS file transforming for special setups
Show release candidate history
Show release candidate history
Release Candidate
1.0.0-rc.7
Suspended Subtrees & Pre-build Prep
Birds are chirping. This could be the last RC before the grand finale 🎵- Suspended subtrees support - Suspended subtrees now correctly receive shadow tree updates, enabling proper usage with React’s
<Freeze>and similar patterns - XCFramework pre-build preparation - Prepared the codebase to support XCFramework pre-builds in upcoming releases
- withUniwind data attributes fix - Fixed
withUniwindnot respecting data attributes - P3 color parsing fix - Fixed Display P3 color parsing
- Reanimated circular dependency fix - Fixed a circular dependency issue with Reanimated
- tar security fix - Updated
tarpackage to address a security vulnerability
Release Candidate
1.0.0-rc.6
Custom Animations & Native Transitions
- Custom animations - Added support for custom keyframe animations via
className. See Reanimated Animations - Entering and exiting animations - New built-in entering and exiting animation presets. See Reanimated Animations
- Native blur theme transitions - Added new blur-based theme transition effects. See Theme Transitions
- border-continuous and border-circular - Added
border-continuousandborder-circularborder curve utilities - Filter unserializable tokens - Unserializable tokens are now filtered out gracefully instead of causing a parsing failure
- React Native 0.85 support - Added compatibility with React Native 0.85
- ThemeName type export - Exported the
ThemeNametype for easier typed theme usage - Transition animation for single node - Ensure transition animation is triggered even for components with a single node
- Native transition warnings - Warn when there is no active shadow node available for transitions
- getWebStyles fix - Fixed
getWebStylesnot returning default HTML styles - Data attributes fix - Fixed passing data attributes correctly to React Native Web
- CSS parser transforms fix - Fixed CSS parser not handling multiple transforms correctly
- Custom utilities guide - Added a guide for creating custom utilities. See Custom Utilities
- Nitro Modules upgrade - Updated to
react-native-nitro-modules0.35.2 - E2E testing - Added automated end-to-end tests to the repository
Release Candidate
1.0.0-rc.5
Theme Transitions & TV Support
- New theme transitions - Added
SlideLeftToRight,CircleTopLeft,CircleBottomRight,CircleBottomLeft, andCircleCentertransition animations - Web theme transitions ✨ - Added theme transition support for web using the View Transition API
- TV and focus selectors - Added support for tvOS platform,
tv:,android-tv:,apple-tv:, andfocus:selectors - Nitro Modules upgrade - Migrated to
react-native-nitro-modules0.35.0 - Official Uniwind skill - Added official Uniwind skill for AI-assisted development
- Pinned lightningcss - Pinned
lightningcssversion to 1.30.1 - Line clamp fix - Fixed guard against
display: boxfromline-clamp-*classes
Release Candidate
1.0.0-rc.4
Nitro Upgrade & Fixes
- Nitro Modules upgrade - Upgraded to
react-native-nitro-modules0.34.1 - Web bundling fix - Fixed a web bundling issue introduced in rc.3
- Theme selector fix - Moved theme selector out of the root and removed nulls
Release Candidate
1.0.0-rc.3
Scoped Themes & Stability Fixes
- Scoped Themes 🎉 - Added
ScopedThemesupport for applying themes to a subtree without changing the global app theme. See Scoped Themes - Migration skill update - Updated the Nativewind-to-Uniwind migration skill to include
ScopedThemeguidance - JS expression fallback fix - Invalid JavaScript expressions are now treated as plain strings instead of failing parsing
- Gradient parsing fix - Fixed gradient parsing with
%values and CSS variables - Border opacity shadow tree fix - Fixed missing shadow tree updates for borders with opacity
- Android hard reload memory leak fix - Resolved an Android memory leak during hard reloads
- Reanimated theme transition crash fix - Fixed app crashes when repeatedly switching themes with reanimated transitions
Release Candidate
1.0.0-rc.2
New Utilities & Fixes
- Start/end spacing properties - Added support for
ps,pe,ms, andmelogical spacing utilities by @khaled-hamam - fontScale and pixelRatio without arguments - Both
fontScale()andpixelRatio()functions can now be called without arguments - FlatList crash fix - Fixed a crash for undefined ShadowNode while unmounting components in nested
FlatListandVirtualizedList - Android IME insets - Android now ignores IME insets and correctly respects system bars
Release Candidate
1.0.0-rc.1
Public Release
We’re thrilled to announce the first public release of Uniwind Pro. Battle-tested by dozens of companies and ready to be used in your unique project.
- Insets safety with keyboard management - Bottom safe area insets are now protected from IME insets when using keyboard management packages
- Nitro Modules upgrade - Upgraded to
react-native-nitro-modules0.33.9 - Migration skill released - Added a migration skill from Nativewind to Uniwind. Give it a try in Skills
- Metro config cleanup - Removed
.mjsexport from Metro config - Hermes v1 fix - Insets updates now subscribe before triggering listeners
Show beta history
Show beta history
Beta
1.0.0-beta.11
Cache & Fixes
This release focuses on download efficiency, platform fixes, and improved package manager compatibility:- Local cache for worktrees - Implemented local cache to reduce repeated downloads when working across Git worktrees
- Android color scheme fix - Fixed an issue where the initial color scheme could be locked to light on Android
- Nitro Modules support update - Support
react-native-nitro-modules0.33.7 - FlashList and LegendList safety fix - Prevented nullable
__nativeTagfor FlashList and LegendList - pnpm installation fix - Added a
uniwind-propostinstall script to fix an issue in pnpm environments - Animated Pressable restored - Brought back Animated Pressable after a regression in beta.10
- RNW + Vite Tailwind fix - Fixed Tailwind classes not applying to React Native Web and Vite by @dannyhw
This is most likely the latest beta release. Uniwind Pro is expected to become generally available for everyone with the first RC release.
Beta
1.0.0-beta.10
Data attributes
This release includes engine upgrades, rendering fixes, and improved web compatibility:- Data attribute selectors - Added support for styling with
data-*attributes. See Data Selectors - Nitro Modules upgrade - Upgraded to
react-native-nitro-modules0.33.3 - hairlineWidth support - Add missing implementation on the C++ side
- Nested Text classNames - Fixed missing
classNamepropagation for nestedTextcomponents - CSS variables isolation - Fixed an issue with
updateCSSVariableswhile updating the current theme - React Native Web fixes - Resolved minor issues where some styles didn’t apply correctly on the web
- Insets parsing - Fixed an issue with parsing insets values
Beta
1.0.0-beta.9
Features & Bug Fixes
This release brings iOS static frameworks support and important web platform fixes:- iOS static frameworks support - Full compatibility with
useFrameworks: "static" - Simpler CI/CD setup -
libsecretinstallation is no longer needed to verify the license on cloud platforms - React Native Web CSS layer fix - Patched React Native Web to wrap default styles with CSS layer for better style isolation
- Vite Animated components fix - Fixed resolution of Animated components in Vite builds
- ColorSchemeName compatibility - Added support for both new and old ColorSchemeName types in React Native
Beta
1.0.0-beta.8
Bug Fixes
This release includes important fixes for build and path resolution:- Resolver internal path check - Fixed internal path resolution in the custom resolver that was causing errors on the web platform
- CMakeLists.txt autolinking - Corrected the autolinking file path in CMakeLists.txt for better build compatibility
Beta
1.0.0-beta.7
More Power, More Flexibility
This release brings exciting new features and important fixes to make your development experience even smoother.- Custom safe area spacings - You can now combine safe area utilities with custom spacing values (e.g.,
pt-safe-[20px],pb-safe-4) for pixel-perfect layouts - parseColor runtime support - New
parseColorfunction lets you parse Tailwind colors at runtime, perfect for dynamic theming and color manipulation - Linux build fix - Fixed a case-sensitive filename issue that caused Android builds to fail on Expo EAS (Linux environments)
- Improved Metro stability - Resolved a “maximum call stack size exceeded” error that could crash the Metro bundler
- Better path resolution - Fixed React Native directory resolution for non-standard project structures
Experimental iOS Static Frameworks Support: If you’re using
useFrameworks: "static" in your Expo config, try the experimental version uniwind-pro-1.0.0-beta.7-22012026. This build includes fixes for iOS static framework compatibility.Beta
1.0.0-beta.6
Bug Fixes & CLI Improvements
- numberOfLines fix - Fixed an issue where
numberOfLinesprop didn’t work correctly - Uniwind.updateInsets noop - Added noop function for
Uniwind.updateInsetsfor better compatibility with open source version - CLI light theme support - The CLI now supports light terminal themes
Beta
1.0.0-beta.5
Welcome Waitlist Users!
This is the first release available to users from the waitlist. We’re excited to have you on board!- Team license package name support - You can now use package names with
/in team licenses (e.g.,@repo/example)
Under the hood
- Changed imports for some Nitro headers to be found in different C++ environments
Beta
1.0.0-beta.4
CLI Improvements
- pnpm support - The
uniwind-proCLI now supports pnpm package manager
Beta
1.0.0-beta.3
Smoother Than Ever
We’ve been obsessing over the small details that make a big difference. This release focuses on making Uniwind Pro feel buttery smooth.- Revamped Shadow Tree algorithm - We’ve rewritten how style updates propagate through the Shadow Tree. The result? Even snappier UI updates with less overhead
- Smarter snapshot handling - Pending snapshots are now canceled when no Shadow Tree update occurs, avoiding unnecessary UI blocks
- Theme transitions fixed on iOS - Native props now update correctly when theme transition is set to
none - One-line upgrade - Transitioning from Uniwind to Uniwind Pro is now a single line change in your
package.json. Less config, more building
Under the hood
- Upgraded to
react-native-nitro-modules>= 0.33.2
Beta
1.0.0-beta.2
Bug Fixes & Improvements
This release includes all fixes from Uniwind Free v1.2.4:- Animated components now work correctly - Fixed an issue where Animated components were incorrectly skipped by the custom resolver
- Improved CSS class parsing - Fixed whitespace handling around dots in class names
- Theme change API improvements - The
onThemeChangecallback is now properly protected - Nitro Modules upgrade - Now requires
react-native-nitro-modules>= 0.33.0 - CLI dependencies update - Moved CLI packages from
devDependenciestodependenciesfor better compatibility
Beta
1.0.0-beta.1
Uniwind Pro Beta
We’re thrilled to announce the first beta release of Uniwind Pro! This release is powered by the brand new Unistyles 2nd generation C++ engine with full Fabric support.All Pro features are now available:- Zero re-renders - Shadow Tree updates happen directly in C++ without triggering React re-renders
- Built-in safe area insets - Automatically injected from the native layer, no setup required
- Reanimated 4 support - Use Tailwind classes for animations via
className - Full Fabric support - Built from the ground up for the new React Native architecture
All features listed on the pricing page have been implemented in this beta release.