Uniwind Pro 1.0.0 release cover
07 April 2026 · 9 min read

Zero re-renders on theme change: Introducing Uniwind Pro

Uniwind Pro updates className styles via C++. Zero re-renders on theme change, orientation shifts, or dark mode toggles.

Back in November, when we announced the first stable version of Uniwind, I teased a Pro version with a C++ engine and className-based Reanimated animations. More than 1,500 of you joined the waitlist, and Uniwind has since crossed 115,000 weekly npm downloads. That momentum gave us the confidence to go all in.

After 3 months of beta testing and seven release candidates, Uniwind Pro 1.0.0 is here! 🎉

Why Pro?

So what makes Pro different from the library you already know?

The open source version of Uniwind is already 2.5x faster than NativeWind. It ships with a custom CSS parser, multi-theme support, and automatic React Native bindings. For many teams, this is a massive upgrade. But there’s a fundamental limitation in any JavaScript-based styling solution: when a theme changes, when the device rotates, or when the color scheme toggles, React has to re-render every component that depends on those values. For a small app with a few screens, that’s barely noticeable. For a production app with hundreds of styled components? It adds up. Fast.

What if your className styles could update without React even knowing? What if theme changes, orientation shifts, and inset updates happened entirely in native code, committed directly to the Shadow Tree, just like CSS works on the web?

This is what Uniwind Pro does. If you followed Unistyles 3.0, you know we pioneered this approach with StyleSheet. Uniwind Pro brings the same concept to className.

The C++ Shadow Tree Engine

That vision required rebuilding the styling pipeline from the ground up, in C++.

Uniwind Pro is powered by a second-generation Unistyles C++ engine. To understand what it does differently, let’s start with a simple component:

Card.tsx
<View className="flex-1 bg-background p-4">
    <Text className="text-lg font-bold text-default">Hello from Uniwind Pro!</Text>
</View>

The open source version of Uniwind resolves these classNames in JavaScript and passes the resulting style objects to React Native. Every time the theme changes, React re-renders your component to pick up the new values.

With Pro, the flow is completely different. When your component mounts, our translation layer (built on react-native-nitro-modules and folly::dynamic) kicks in:

This is a big improvement over Unistyles, where communication between JS and C++ looked more like a ping-pong game. The selective-update philosophy stays, but now it works with className too.

In our benchmarks rendering 2000+ views, Uniwind Pro is ~33% faster than the open source version. Your app stays responsive during theme changes, orientation shifts, and dynamic inset updates because React is never involved in those updates.

Unlike JavaScript-only styling libraries, which must funnel every update through React’s reconciler, Uniwind Pro bypasses that bottleneck entirely.

className Animations with Reanimated

A faster engine is only half the story. The other half is what you can now express purely through className.

Before Uniwind Pro, if you wanted to animate a Tailwind-styled component, you had to drop down to the style prop and create a Reanimated hook manually. You lost the whole benefit of className.

Uniwind Pro ships with a translation layer that maps className-based animation declarations to Reanimated CSS animations:

Animations.tsx
// Basic entering and exiting
<View className="size-20 bg-primary rounded-xl
    uw-entering-fade-in uw-exiting-fade-out"
/>

// Slide from the left, exit to the right
<View className="size-20 bg-primary rounded-xl
    uw-entering-slide-in-left uw-exiting-slide-out-right"
/>

// Spring physics
<View className="size-20 bg-primary rounded-xl
    uw-entering-zoom-in uw-entering-springify
    uw-entering-damping-10 uw-exiting-zoom-out"
/>

// Custom easing
<View className="size-20 bg-primary rounded-xl
    uw-entering-bounce-in uw-entering-ease-bounce
    uw-exiting-bounce-out"
/>

Three utility prefixes cover the full animation lifecycle:

You can control duration, easing curves, and spring physics, all from className. Here’s a practical example with a reorderable list:

AnimatedList.tsx
{
    items.map((item) => (
        <Pressable
            key={item.id}
            onPress={() => removeItem(item.id)}
            className="w-full h-14 bg-primary rounded-xl items-center justify-center
            uw-entering-fade-in
            uw-exiting-fade-out
            uw-layout-linear-transition"
        >
            <Text className="text-white font-bold">{item.label}</Text>
        </Pressable>
    ));
}

Remove an item, and the list smoothly animates into place. Add one, and it fades in. No hooks, no animated styles, no imperative code. Just className. No other Tailwind-style library for React Native supports this today.

Animated Theme Transitions

Animations on individual components are powerful, but the real showstopper is what happens when your entire app changes appearance at once.

Theme switching in most React Native apps is an instant flash from light to dark. Uniwind Pro adds native theme transitions that make the switch feel seamless and addictive:

ThemeSwitch.tsx
import { Uniwind, ThemeTransitionPreset } from 'uniwind';

// Fade between themes
Uniwind.setTheme('dark', { preset: ThemeTransitionPreset.Fade });

// Circular reveal from the top-right corner
Uniwind.setTheme('coffee', { preset: ThemeTransitionPreset.CircleTopRight });

// Blur transition from left to right
Uniwind.setTheme('light', { preset: ThemeTransitionPreset.BlurLeftToRight });

We ship 11 transition presets out of the box: Fade, Slide (left-to-right, right-to-left), Circle (from each corner and center), Blur, and directional Blur variants. On the web, these transitions use the browser’s native View Transition API, so you get smooth, hardware-accelerated animations for free.

Behind the Scenes: Delivering a Paid React Native Library

Some of the features in Pro took weeks of focused C++ work. Companies shipping to millions of users need access to premium, performance-critical capabilities, and the engineers building them deserve to be compensated. The open source version remains a free, stable, and fast drop-in replacement for NativeWind that thousands of teams already trust. Pro exists for teams that need to push further.

Building the technology was the first challenge. Getting it into your hands reliably was the second. There’s no App Store for npm packages. No built-in licensing, no download quotas, no seat management. We had to build the entire distribution infrastructure from scratch.

Our CDN runs on Cloudflare Workers:

The result is a CDN that feels as fast as a regular npm install. Your CI/CD pipeline doesn’t slow down, and there’s no single point of failure. You don’t need to manage .npmrc tokens either. Just run bunx uniwind-pro once every 6 months to authorize.

I might write a dedicated post about this architecture someday.

The Biggest Challenges

The infrastructure runs smoothly now, but getting here meant solving problems with no existing playbook.

Pricing That Scales With Your Team

We built all of this so your team can ship faster. Here is what it costs.

We wanted Uniwind Pro to be accessible to solo developers and fair for large teams. The more seats you add, the less each one costs:

SeatsPer Seat / YearExample Total
1–3$993 seats = $297
4–6$496 seats = $444
7–9$299 seats = $531
10–15$915 seats = $585
16+$150 seats = $620

A 50-person team pays $620 per year total, that’s $12.40 per seat. A 20-person team averages $29.50 per seat. We intentionally made the price drop aggressively after 15 seats. If your company is large enough to have 16+ React Native developers, the styling library should not be the line item anyone debates.

Uniwind Pro pricing

All plans are billed annually and include the full Pro package with every feature described in this post. You can manage seats, invite team members, and generate a CI/CD token from your dashboard.

Want to see it before you buy?

Try Before You Buy

We’ve built a free iOS demo app so you can experience the C++ engine, ShadowTree updates, and animated theme transitions before purchasing. Once you see the polished animations and smooth updates in action, you won’t want to go back.

It’s a pre-built XCFramework compatible with React Native 0.81.5 and Expo SDK 54. It runs on the iOS Simulator with no account or purchase required.

Download the demo from GitHub.

Uniwind Pro demo app

What’s Next?

Pro is in production today, and we’re already working on what’s next:

Thank You

None of this would exist without the people who believed in it from day one.

Thank you to Hubert Bieszczad who co-created Uniwind with me, and for the brilliant Metro plugin that just works. Thank you to our early adopters who stress-tested every release candidate, and to the thousands of developers who gave Uniwind a chance.

To every team that invested their time and money in Uniwind Pro: your support has already covered our costs and allows us to dedicate more time to new features and bug fixes. We truly appreciate it.

Uniwind Pro 1.0.0 is ready for production. If your team ships a React Native app and cares about performance, smooth theme transitions, and className-first animations, this is the upgrade you’ve been waiting for. Moving from NativeWind? Expect up to 5x better performance out of the box.

Buy Uniwind Pro | Try the free demo

Happy coding! 🙏