React Native Blur

React Native Blur

Backdrop blur and frosted glass for React Native and Expo, on iOS and Android. Blur what is behind headers, tab bars, cards, popups and buttons while their content stays sharp, or blur a whole screen or a playing video.

GitHubnpmChangelogllms.txt

The same screen with no blur, this library on Android, this library on iOS, and expo-blur on Android
The same screen four ways: no blur, this library on Android, this library on iOS, and a flat-tint blur on Android.

Features

Installation

React Native CLI

npm install @nguyenduy1412/react-native-blur
cd ios && pod install

Rebuild the app. Autolinking picks the library up; no Expo packages are needed.

Expo

npx expo install @nguyenduy1412/react-native-blur
npx expo run:ios
npx expo run:android

It contains native code, so it does not run in Expo Go. Use a development build or EAS Build.

Requirements

Minimum
React Native0.76 with the New Architecture (Fabric). Tested with React Native 0.86.
iOS15.1
AndroidAPI 31 (Android 12) for the blur. Older versions draw a translucent material plate.
Expo (optional)Tested with Expo SDK 57

Quick start

You want to blur…Use
What is behind the view (header, tab bar, card, popup, button)mode="backdrop"
What is inside the view (a whole screen, an image, a playing video)mode="content" (default)
import BlurView from "@nguyenduy1412/react-native-blur";

<BlurView mode="backdrop" intensity={80} tint="systemThinMaterial" style={{ borderRadius: 24, padding: 16 }}>
  <Text>Frosted card</Text>
</BlurView>

<BlurView style={{ flex: 1 }} intensity={50} tint="systemMaterial">
  <YourContent />
</BlurView>

Guides

API

<BlurView /> accepts every View prop, plus:

PropTypeDefaultPlatformsDescription
mode'content' | 'backdrop''content'iOS, Android'backdrop' blurs what is behind the view and keeps its children sharp. 'content' blurs the children.
intensitynumber50iOS, Android, WebStrength of the whole effect, 0 to 100. 0 disables it.
tintBlurTint'default'iOS, Android, WebMaterial to use. See below.
tintColorColorValue—iOS, Android, WebExtra colour layer over the blur, e.g. 'rgba(0,0,0,0.3)'.
borderRadiusnumberstyle.borderRadius or 0iOS, AndroidCorner radius for blur, tint and rim.
blurRadiusnumberfrom tintAndroid, WebOverrides the material's blur radius, in dp.
saturationnumber1Android, WebMultiplier on the material's saturation boost.

tint values

tintiOS styleAndroid
'default'.regularLight or dark material following the system theme
'light'.lightLight material
'extraLight'.extraLightExtra light material
'dark'.darkDark material
'prominent'.prominentExtra light in light mode, dark in dark mode
'systemUltraThinMaterial'.systemUltraThinMaterialUltra-thin material, light or dark
'systemThinMaterial'.systemThinMaterialThin material, light or dark
'systemMaterial'.systemMaterialRegular material, light or dark
'systemThickMaterial'.systemThickMaterialThick material, light or dark
'systemChromeMaterial'.systemChromeMaterialChrome material, light or dark

How it works

iOS. A UIVisualEffectView with the matching UIBlurEffect style sits over the children in content mode and underneath them in backdrop mode. intensity scrubs a paused UIViewPropertyAnimator, so every value is a real system blur rather than an opacity fade.

Android (API 31+). A RenderEffect chain applies a Gaussian blur, then a ColorMatrix that restores the brightness and saturation the blur removes and lays down the material's tint. The numbers come from Apple's own material recipes and are checked against colours sampled from iOS screenshots.

Video on Android. SurfaceViews inside the view are copied with PixelCopy (downscaled 4×, about 30 fps) and drawn in place, where the blur applies to them like everything else.

Backdrop on Android. The view records what is drawn behind it (ancestor backgrounds and earlier siblings, with scroll offsets and transforms) into a RenderNode, blurs it, and draws the children on top. It refreshes on every frame where something changed.

Web. CSS backdrop-filter: blur() saturate() with a tint background.

Limitations

FAQ

How do I make a frosted header, tab bar or button in React Native?

Use <BlurView mode="backdrop">. The content behind the view is blurred and its children stay sharp, on both iOS and Android.

Why does my BlurView show only a tint on Android?

A BlurView laid over other views needs mode="backdrop"; the default mode="content" blurs only its own children. The device must also run Android 12 (API 31) or later.

Does it work in Expo Go?

No. The package contains native code, so it needs a development build (npx expo run:ios / npx expo run:android) or EAS Build. React Native CLI apps work after pod install and a rebuild.

Does it work without Expo?

Yes. Since 2.0 it is a plain React Native Fabric component, so a React Native CLI app only needs npm install and pod install.

Which Android versions get a real blur?

Android 12 (API 31) and later, where RenderEffect exists. Android 11 and earlier draw a translucent material plate without blur, so content stays readable.

Does it support the New Architecture?

Yes, and it requires it. It is a Fabric native component generated with React Native Codegen, tested with React Native 0.86 and Expo SDK 57.