Skip to main content

Overview

No code changes required. The C++ engine starts working automatically when you install Uniwind Pro. Your existing components will benefit from shadow tree updates without any modifications.
Uniwind Pro allows you to update any React Native style prop without triggering component re-renders. It leverages direct Shadow Tree updates to inject styles without waking up React. By creating a direct, optimized highway between your classNames and the native layer, we eliminate rendering lag entirely.
Uniwind Pro is built on the 2nd generation Unistyles C++ engine, a new and improved version that powers the shadow tree update mechanism.

The Traditional Re-render Problem

In standard React Native, these scenarios trigger component re-renders:
TriggerWhat happens
useColorScheme()Component subscribes to system appearance changes and re-renders when it changes
Theme Context ProviderAll consumers re-render when context value updates
Appearance.addChangeListener()Manual subscription requires state update, which triggers re-render
This creates a cascade of re-renders through the component tree, with each component recalculating styles and passing new props down.
Without Pro, switching themes causes every themed component to re-render sequentially. This leads to visible flickering and the “rainbow” effect where components update at different times.

How Uniwind Pro Updates Views

Uniwind Pro bypasses React’s reconciliation entirely for style changes:
Runtime detects change (theme, color scheme, orientation, etc.)

Uniwind recalculates styles for affected classes

C++ core applies mutations directly

Native views update instantly — no React re-render
All views update atomically in the same frame. No partial states, no flickering.

Supported Components

The following components support shadow tree updates with no re-renders. All components support className for the main style, and additional props use the {propName}ClassName pattern.
PropDescription
classNameMain styles
PropDescription
classNameMain styles
selectionColorClassNameText selection highlight color
PropDescription
classNameMain styles
cursorColorClassNameCursor/caret color
selectionColorClassNameText selection highlight color
selectionHandleColorClassNameSelection handle color (Android)
underlineColorAndroidClassNameUnderline color (Android)
placeholderTextColorClassNamePlaceholder text color
PropDescription
classNameMain styles
tintColorClassNameImage tint color
PropDescription
classNameMain styles
tintColorClassNameImage tint color
PropDescription
classNameMain styles
thumbColorClassNameThumb/knob color
trackColorOnClassNameTrack color when on
trackColorOffClassNameTrack color when off
ios_backgroundColorClassNameBackground color (iOS)
PropDescription
classNameMain styles
colorClassNameSpinner color
PropDescription
classNameMain styles
colorClassNameButton color
PropDescription
classNameMain styles
tintColorClassNameSpinner tint color (iOS)
titleColorClassNameTitle text color (iOS)
progressBackgroundColorClassNameProgress background (Android)
colorsClassNameSpinner colors array (Android)
PropDescription
classNameMain styles
contentContainerClassNameContent container styles
endFillColorClassNameEnd fill color (Android)
PropDescription
classNameMain styles
contentContainerClassNameContent container styles
columnWrapperClassNameColumn wrapper styles (numColumns > 1)
ListHeaderComponentClassNameHeader component styles
ListFooterComponentClassNameFooter component styles
endFillColorClassNameEnd fill color (Android)
PropDescription
classNameMain styles
contentContainerClassNameContent container styles
ListHeaderComponentClassNameHeader component styles
ListFooterComponentClassNameFooter component styles
endFillColorClassNameEnd fill color (Android)
PropDescription
classNameMain styles
contentContainerClassNameContent container styles
ListHeaderComponentClassNameHeader component styles
ListFooterComponentClassNameFooter component styles
endFillColorClassNameEnd fill color (Android)
PropDescription
classNameMain styles
contentContainerClassNameContent container styles
PropDescription
classNameMain styles (supports pressed:, disabled: variants)
PropDescription
classNameMain styles
PropDescription
classNameMain styles
PropDescription
classNameMain styles (supports pressed:, disabled: variants)
PropDescription
classNameMain styles

Components Requiring Re-renders

Some React Native components cannot use shadow tree updates due to their internal implementation:
ComponentReason
InputAccessoryViewNo shadow node exposed by React Native
TouchableHighlightUses internal React state to manage underlayColor
These components use the useResolveClassNames hook which subscribes to UniwindListener and triggers React re-renders when dependencies change.

Summary

ApproachRe-rendersUpdate SpeedFlickering
Traditional ReactEvery themed componentSequentialYes
Uniwind ProNone (for most components)Single frameNo
Uniwind Pro achieves single-frame theme updates by bypassing React’s reconciliation entirely for style changes, resulting in smoother transitions and better performance.