February 10, 2026

gluestack-ui v4.1 Alpha: Supercharged Expo Apps with Uniwind and Tailwind v4

Sanchit KumarBuilding gluestack-ui

We're thrilled to announce gluestack-ui v4.1 alpha, bringing Uniwind and Tailwind v4 support exclusively to Expo projects. This release delivers a revolutionary styling approach that combines the power of Tailwind CSS v4 with build-time optimizations, resulting in dramatic performance improvements for your Expo applications.With Uniwind integration for Expo and Next.js support coming soon, v4.1 represents our commitment to delivering cutting-edge performance and developer experience to the React Native ecosystem.

🚀 Introducing Uniwind

The centerpiece of v4.1 is our integration with Uniwind — a next-generation styling solution that brings Tailwind CSS v4 to React Native with unprecedented performance.

What is Uniwind?

Uniwind is a modern styling engine that enables you to use Tailwind CSS v4 utilities in React Native applications with truly native performance. Unlike traditional runtime styling solutions, Uniwind compiles your styles at build time, eliminating runtime overhead entirely. Think of it as a bridge between the familiar Tailwind CSS you know from web development and the high-performance styling React Native demands.

The Uniwind Advantage

Zero Runtime Overhead All styles are compiled at build time and transformed into native styling instructions. This means:
  • No style processing during app execution
  • No JavaScript bridge overhead for styles
  • Instant style application
  • Minimal memory footprint
True Tailwind v4 Support Uniwind isn't just compatible with Tailwind — it's a first-class implementation:
  • Full access to Tailwind v4 utilities
  • Complete color palette support
  • Responsive design utilities
  • Custom plugin support
  • Consistent syntax across platforms
Build-Time Optimization
  • Only the styles you actually use are included
  • Automatic dead code elimination
  • Optimized output for each platform
  • Tree-shaking at the utility level
Cross-Platform Ready Write your styles once for Expo, and they work seamlessly across:
  • iOS native
  • Android native
  • Expo Web
  • Future platform support coming soon

⚡ Performance Impact

The numbers speak for themselves. Here's what you can expect when using gluestack-ui v4.1 with Uniwind:

Benchmark Comparison

| Metric | v4.0 | v4.1 (Uniwind) | Improvement | |--------|------|----------------|-------------| | Initial Render | 198ms | 121ms | 39% faster | | Style Processing | 28ms | 8ms | 71% faster | | Re-render Performance | 45ms | 26ms | 42% faster | | Bundle Size (gzipped) | 142KB | 105KB | 26% smaller | | Memory Usage | 24.1 MB | 18.7 MB | 22% reduction | Benchmarks performed on Expo 55 with gluestack-ui components on iPhone 14 / Pixel 7

Real-World Impact

We worked with an e-commerce app that migrated to v4.1 with Uniwind. The results were impressive: Performance Gains:
  • 38% faster app startup on mid-range Android devices
  • 52% improvement in list scroll performance
  • 24% smaller bundle after compression
  • Zero breaking changes in their codebase
Developer Experience:
  • Faster development builds
  • Better hot reload performance
  • Improved IntelliSense
  • Cleaner compiled output

🎨 Tailwind CSS v4 Features

v4.1 brings you the full power of Tailwind CSS v4:

Enhanced Color System

Access to Tailwind's extended color palettes with better accessibility:
className="bg-primary text-white
          hover:bg-primary/90
          dark:bg-primary/80"

Advanced Utilities

More utility classes for finer control:
// Better spacing
className="px-4 py-2 space-y-2"

// Enhanced typography
className="text-base font-medium leading-relaxed"

// Improved shadows
className="shadow-sm hover:shadow-md"

Improved Grid System

More powerful grid and flexbox utilities:
className="grid grid-cols-2 md:grid-cols-4 gap-4"

Container Queries

Native support for container-based responsive design:
className="@container:p-4 @lg:p-6"

Dynamic Variants

More flexible variant system for component states:
className="data-[state=active]:bg-primary
          data-[disabled]:opacity-50"

🛠️ Getting Started with v4.1

For New Projects

Create a new project with Uniwind support:
npm create gluestack@alpha
When prompted, select "Expo with Uniwind" to scaffold a project with all the latest features pre-configured.

Upgrading from v4.0

If you're already on v4.0, upgrading to v4.1 is straightforward:
npx gluestack-ui@alpha upgrade
The CLI will automatically:
  • Update dependencies to v4.1
  • Configure Uniwind in your project
  • Update your metro configuration
  • Migrate your tailwind.config.js
  • Guide you through any manual steps

Manual Installation

For those who prefer hands-on control: Step 1: Install Dependencies
npm install @gluestack-ui/core@^4.1.0-alpha.0 \
            @gluestack-ui/utils@^4.1.0-alpha.0 \
            uniwind@latest \
            tailwindcss@^4.0.0
Step 2: Update Metro Config Replace your existing metro configuration with Uniwind:
const { getDefaultConfig } = require('expo/metro-config');
const { withUniwindConfig } = require('uniwind/metro');

const config = getDefaultConfig(__dirname);

module.exports = withUniwindConfig(config, {
  cssEntryFile: './global.css',
  dtsFile: './uniwind-types.d.ts',
  extraThemes: ['dark'],
});
Important Note
Note: Add
withUniwindConfig()
to enable Uniwind's build-time style processing.
Step 3: Move Tokens to global.css Create or update your
global.css
with color tokens:
@import "tailwindcss";
@import 'uniwind';
/* ─── UniWind theme variants ─────────────────────────────────────
   Switched at runtime via Uniwind.setTheme('light' | 'dark' | 'adaptive').
   Variable values match the nativewind config.ts tokens so that the
   same Tailwind utility classes (bg-primary, text-foreground, etc.)
   produce identical output regardless of styling engine.                */
@layer theme {
  :root {
    @variant light {
      --primary: 23 23 23;
      --primary-foreground: 250 250 250;
      --card: 255 255 255;
      --secondary: 245 245 245;
      --secondary-foreground: 23 23 23;
      --background: 255 255 255;
      --popover: 255 255 255;
      --popover-foreground: 10 10 10;
      --muted: 245 245 245;
      --muted-foreground: 115 115 115;
      --destructive: 231 0 11;
      --foreground: 10 10 10;
      --border: 229 229 229;
      --input: 229 229 229;
      --ring: 212 212 212;
      --accent: 247 247 247;
      --accent-foreground: 52 52 52;
    }

    @variant dark {
      --primary: 255 245 245;
      --primary-foreground: 23 23 23;
      --card: 23 23 23;
      --secondary: 38 38 38;
      --secondary-foreground: 250 250 250;
      --background: 10 10 10;
      --popover: 23 23 23;
      --popover-foreground: 250 250 250;
      --muted: 38 38 38;
      --muted-foreground: 161 161 161;
      --destructive: 255 100 103;
      --foreground: 250 250 250;
      --border: 46 46 46;
      --input: 46 46 46;
      --accent: 38 38 38;
      --accent-foreground: 250 250 250;
      --ring: 115 115 115;
    }
  }
}

/* ─── Tailwind v4 color mappings ─────────────────────────────────
   Maps the theme CSS variables above to Tailwind color utilities.
   bg-primary → rgb(var(--primary)), text-foreground → rgb(var(--foreground)), etc. */
@theme inline {
  --color-primary: rgb(var(--primary));
  --color-primary-foreground: rgb(var(--primary-foreground));
  --color-card: rgb(var(--card));
  --color-secondary: rgb(var(--secondary));
  --color-secondary-foreground: rgb(var(--secondary-foreground));
  --color-background: rgb(var(--background));
  --color-popover: rgb(var(--popover));
  --color-popover-foreground: rgb(var(--popover-foreground));
  --color-muted: rgb(var(--muted));
  --color-muted-foreground: rgb(var(--muted-foreground));
  --color-destructive: rgb(var(--destructive));
  --color-foreground: rgb(var(--foreground));
  --color-border: rgb(var(--border));
  --color-input: rgb(var(--input));
  --color-ring: rgb(var(--ring));
  --color-accent: rgb(var(--accent));
  --color-accent-foreground: rgb(var(--accent-foreground));
}
Step 4: Update Component Files Replace
cssInterop
with
withUniwind()
wrapper in your component files:
// Before (v4.0 with cssInterop)
import { cssInterop } from 'nativewind';

const _UIIcon = createIcon({...});
cssInterop(_UIIcon, { className: 'style' });
export const UIIcon = _UIIcon;

// After (v4.1 with Uniwind)
import { withUniwind } from 'uniwind';

const _UIIcon = createIcon({...});
export const UIIcon = withUniwind(_UIIcon);
Important Note
Breaking Change: Replace all
cssInterop
calls with
withUniwind()
wrapper in
components/ui
files.
Step 5: Remove tailwind.config.js (Optional) With Uniwind,
tailwind.config.js
is no longer required:
# You can safely remove this file
rm tailwind.config.js
Important Note
Note: Uniwind handles configuration automatically. If you need custom configuration, you can keep the file, but it's optional.

🔧 Developer Experience Enhancements

Superior IntelliSense

Uniwind provides exceptional editor support:
  • Full autocomplete for all Tailwind utilities
  • Inline documentation for each class
  • Error detection for invalid utilities
  • Color previews in your editor
  • Type-safe className props

Enhanced Build Performance

Parallel Compilation Uniwind processes styles in parallel across multiple CPU cores, significantly reducing build times for large projects. Incremental Builds Only changed styles are recompiled, making development builds nearly instant. Smart Caching Intelligent caching system remembers compiled styles across builds.

Better Debugging

Clear Error Messages When something goes wrong, you get clear, actionable error messages:
❌ Invalid utility class 'bg-primry' in Button component
   Did you mean 'bg-primary'?

   src/components/Button.tsx:12:15
Style Inspector Debug compiled styles with the included inspector tool:
npx uniwind inspect src/components/Button.tsx

🌍 Platform Support

Currently Available (v4.1 with Uniwind)

Expo Projects Only
  • ✅ Expo SDK 50+
  • ✅ Expo 55 (beta)
  • ✅ Expo Router
  • ✅ Expo Web
  • ✅ iOS and Android native
Important Note
Note: Uniwind integration is currently exclusive to Expo projects. Other platforms continue to work with gluestack-ui v4.1 using the standard styling approach.

Breaking Changes with Uniwind

⚠️ Important: Adopting Uniwind in v4.1 introduces some configuration changes: Configuration Changes
  1. Step 1: Metro Configuration
    • Add
      withUniwind()
      wrapper to your
      metro.config.js
    • Required for Uniwind to process styles at build time
  2. Step 2: Component Files
    • cssInterop
      is replaced with
      withUniwind()
      wrapper
    • Update all component exports in
      components/ui
      files
    • Example:
      export const UIIcon = withUniwind(_UIIcon);
  3. Step 3: Tailwind Configuration
    • tailwind.config.js
      is no longer required
    • Configuration is now handled by Uniwind automatically
  4. Step 4: Token Management
    • All color tokens are now defined in
      global.css
    • CSS variables approach for better performance
    • Simplified theming workflow
What Stays the Same If you adopt Uniwind, these remain unchanged:
  • ✅ Component APIs
  • ✅ Import patterns
  • ✅ Component usage
  • ✅ Styling class names
Migration Required Users upgrading to v4.1 with Uniwind will need to:
  • Update metro configuration with
    withUniwindConfig()
  • Replace
    cssInterop
    with
    withUniwind()
    wrapper in component files
  • Move all color tokens to
    global.css
  • Remove
    tailwind.config.js
    (optional but recommended)
Important Note
Note: These changes only affect projects that adopt Uniwind. If you continue using the standard v4.1 approach without Uniwind, there are no breaking changes.

🎯 Use Cases

Perfect For

Large-Scale Applications Uniwind's build-time optimization and smaller bundle sizes make it ideal for complex apps with many screens. Performance-Critical Apps E-commerce, social media, or any app where every millisecond matters in user experience. Cross-Platform Products Teams building for iOS, Android, and Web simultaneously benefit from the unified styling approach. Design Systems Organizations building their own design systems on top of gluestack-ui get powerful customization tools.

🙏 Acknowledgments

v4.1 wouldn't be possible without:
  • The Uniwind Team - For creating an incredible styling engine
  • Our Community - For testing alpha releases and providing invaluable feedback
  • Early Adopters - Companies who migrated and shared their experiences
  • Contributors - Everyone who helped make v4.1 possible
  • The Tailwind Team - For Tailwind CSS v4

📱 Try It Today

Ready to experience the performance boost? New Projects:
npm create gluestack@alpha
Select "Expo with Uniwind" when prompted. Existing v4.0 Projects:
npx gluestack-ui@alpha upgrade
Documentation: v4.gluestack.io

🌟 Community

Join thousands of developers building amazing apps: Discord discord.gg/gluestack
  • Get help from the community
  • Share your projects
  • Participate in discussions
GitHub github.com/gluestack/gluestack-ui
  • Star the repository
  • Report issues
  • Contribute code
Twitter @gluestack
  • Follow for updates
  • Share with #gluestackui
  • Connect with the team
YouTube @gluestack
  • Watch tutorials
  • See demos
  • Learn best practices

💬 Feedback

As an alpha release, your feedback drives our development: What We Want to Hear:
  • Your migration experience
  • Performance improvements you've seen
  • Features you'd like next
  • Issues you encounter
  • Success stories
How to Share:

🎉 What's Next?

v4.1 is just the beginning. We're committed to:
  • Continuous Performance Improvements - Making gluestack-ui faster with every release
  • Expanding Platform Support - Bringing Uniwind to more platforms
  • Enhanced Developer Tools - Better tooling for debugging and optimization
  • Community Driven Features - Building what you need
We're incredibly excited about the future of gluestack-ui and can't wait to see what you build with v4.1!
Ready to get started? Create a new project:
npm create gluestack@alpha
Upgrade existing:
npx gluestack-ui@alpha upgrade
Read the docs: v4.gluestack.io Happy coding! ⚡🎨✨
gluestack-ui v4.1 alpha with Uniwind support is available now for Expo projects. Start building at v4.gluestack.io
React & React Native Components & Patterns
Created by
Contact