Loading...
Loading...
Design and implement beautiful, fluid Liquid Glass interfaces in Expo React Native apps. Covers four paths: (1) expo-glass-effect for UIKit-backed glass surfaces, (2) @expo/ui SwiftUI integration for native SwiftUI glass modifiers and advanced transitions, (3) Expo Router unstable native tabs for system Liquid Glass tab bars, and (4) @callstack/liquid-glass as a third-party alternative. Use when tasks mention "liquid glass", "glass effect", "frosted/translucent UI", "iOS 26 design", "native tabs", "expo-ui", "SwiftUI in Expo", or when shipping Apple-style glass with robust fallbacks, accessibility checks, HIG-aware design decisions (Foundations, Patterns, Components, Inputs), and cross-platform degradation.
npx skill4agent add devanshudesai/agent-skills expo-liquid-glassexpo-glass-effect@expo/uireferences/apple-liquid-glass-design.md| Path | Use It For | Tradeoffs |
|---|---|---|
| Most RN screens that need glass chips, floating buttons, toolbars, grouped controls | Best default in Expo; must guard runtime availability |
| Native SwiftUI composition, advanced glass transitions, coordinated IDs/namespaces | iOS-family only, dev-build workflow, SwiftUI mental model |
| System-native Liquid Glass tab bars and iOS 26 nav behavior | Unstable API; syntax differs between SDK 54 and 55 |
| Non-Expo RN or teams standardizing on Callstack package | iOS/tvOS focus; also requires fallbacks and runtime checks |
expo-glass-effect@expo/uiimport { Platform, View } from 'react-native';
import { BlurView } from 'expo-blur';
import { GlassView, isGlassEffectAPIAvailable } from 'expo-glass-effect';
export function AdaptiveGlass({ style, children }) {
if (isGlassEffectAPIAvailable()) {
return (
<GlassView style={style} glassEffectStyle="regular" tintColor="#FFFFFF10">
{children}
</GlassView>
);
}
if (Platform.OS === 'ios') {
return (
<BlurView style={style} intensity={40} tint="dark">
{children}
</BlurView>
);
}
return <View style={[style, { backgroundColor: 'rgba(60,60,67,0.30)' }]}>{children}</View>;
}expo-glass-effectglassEffectStyle'regular' | 'clear' | 'identity'opacity < 1GlassViewisInteractivekeyGlassViewisGlassEffectAPIAvailable()<NativeTabs.Trigger name="index">
<NativeTabs.Trigger.TabBarIcon
ios={{ default: 'house', selected: 'house.fill' }}
androidIconName="home"
/>
<NativeTabs.Trigger.TabBarLabel>Home</NativeTabs.Trigger.TabBarLabel>
</NativeTabs.Trigger><NativeTabs.Trigger name="index">
<NativeTabs.Trigger.Icon sf="house.fill" md="home" />
<NativeTabs.Trigger.Label>Home</NativeTabs.Trigger.Label>
</NativeTabs.Trigger>NativeTabsThemeProvider@expo/uiimport { Host, Namespace, Text } from '@expo/ui/swift-ui';
import { glassEffect, glassEffectID, padding } from '@expo/ui/swift-ui/modifiers';
const ns = new Namespace('glass');
<Host style={{ width: 220, height: 56 }}>
<Text
modifiers={[
padding({ all: 16 }),
glassEffect({ glass: { variant: 'regular' } }),
glassEffectID({ id: 'primary-chip', in: ns }),
]}
>
Explore
</Text>
</Host>;AccessibilityInfo.isReduceTransparencyEnabled()references/expo-ui-swiftui.mdreferences/native-tabs.mdreferences/callstack-liquid-glass.mdreferences/apple-liquid-glass-design.md