How to Use Liquid Glass in React Native

Authors
Oskar Kwaśniewski
Software Developer
@
Callstack

Liquid Glass is Apple's new design material for iOS 26 and beyond, giving UI elements a translucent, glass-like appearance that reflects and refracts the surroundings in real time. Used throughout the interface on elements like widgets and tab bars, its primary goal is to highlight underlying content without obscuring it, maintaining a clear separation between foreground and background. It's a dynamic evolution of the classic blur effect first seen in iOS 7.

Bringing Liquid Glass to React Native

To make sure React Native developers can use this from day one, we created @callstack/liquid-glass. Getting started is simple. Just install the package:

npm install @callstack/liquid-glass

Once installed, you have access to our Liquid Glass components that behave just like Apple's. In this article, we'll cover best practices for using Liquid Glass and explore its API.

Best Practices for Using Liquid Glass

Before diving into usage, a word on design best practices: Liquid Glass is a powerful visual effect, but it should be used thoughtfully.

Apple’s Human Interface Guidelines warn against overusing Liquid Glass: "If you apply Liquid Glass effects to a custom control, do so sparingly. Liquid Glass seeks to bring attention to the underlying content, and overusing this material in multiple custom controls can provide a subpar user experience by distracting from that content. Limit these effects to the most important functional elements in your app."

In other words, reserve Liquid Glass for key UI elements like headers, navigation bars, cards, or action buttons where a touch of translucency can highlight content behind them. Using it everywhere can dilute its impact and even reduce usability.

  • Don’t make entire screens transparent. The effect works best when applied to controls and panels floating above content, not to full-screen backgrounds. Apple explicitly designed Liquid Glass for interface chrome (navigation, widgets, etc.).
  • Ensure readability and contrast. The content behind Liquid Glass can influence its appearance. Our component provides a colorScheme prop so you can explicitly control the appearance. Additionally, you can apply a tintColoroverlay to the glass to match your brand color or improve contrast.
  • Performance considerations. Liquid Glass uses real-time, GPU-accelerated blur effects. It’s efficient for a few elements, but avoid stacking a large number of translucent views or animating them excessively, which could stress the GPU.
  • Graceful fallback. The Liquid Glass effect is only supported on iOS 26 and above. Our library automatically renders a normal, opaque View on older iOS versions or on Android. You should ensure the design still looks acceptable by providing a translucent fallback background color.

Available Features and API Overview

Our library exposes two main components: LiquidGlassView for individual elements, and LiquidGlassContainerView for grouping them.

Single Glass Element: LiquidGlassView

The LiquidGlassView is a drop-in component that acts like a “glass panel.” Simply wrap any content you want to appear on the glass.

import { LiquidGlassView, isLiquidGlassSupported } from '@callstack/liquid-glass';
import { Text } from 'react-native';

function MyCard() {
  return (
    <LiquidGlassView
      style={[
        { width: 200, height: 100, borderRadius: 20 },
        !isLiquidGlassSupported && { backgroundColor: 'rgba(255,255,255,0.5)' }
      ]}
      interactive
      effect="clear"
    >
      <Text style={{ fontWeight: '600' }}>Hello World</Text>
    </LiquidGlassView>
  );
}

In this snippet, we create a rounded box that becomes a translucent glass surface if supported; otherwise, we fall back to a semi-transparent white background. The text renders on top of the panel.

Key Props for LiquidGlassView:

  • interactive (boolean, default: false): If true, the view will have subtle touch interaction effects when pressed.
  • effect ('clear' | 'regular', default: 'regular'): Chooses the visual style. regular is the standard frosted blur, while clear is more transparent with minimal blurring.
  • tintColor (ColorValue, optional): An overlay tint color for the glass to match your app's theme or improve contrast.
  • colorScheme ('light' | 'dark' | 'system', default: 'system'): Controls the appearance mode, allowing it to adapt to the system's Light/Dark mode or be fixed.

You can also import isLiquidGlassSupported to check if the device is running iOS 26+ and apply fallback styling or render a different component.

Grouped Glass Elements: LiquidGlassContainerView

One of the coolest features of Liquid Glass is how multiple elements can visually merge. When two glass elements get close, they can morph into a single connected shape. We’ve brought this to React Native with our LiquidGlassContainerView.

Use LiquidGlassContainerView as a parent wrapper for two or more LiquidGlassView elements to enable the blending effect.

import { LiquidGlassContainerView, LiquidGlassView } from '@callstack/liquid-glass';

function MergingGlassExample() {
  return (
    <LiquidGlassContainerView spacing={20}>
      <LiquidGlassView style={{ width: 100, height: 100, borderRadius: 50 }} />
      <LiquidGlassView style={{ width: 100, height: 100, borderRadius: 50 }} />
    </LiquidGlassContainerView>
  );
}

Here, two circular glass blobs are inside a container.

The spacing={20} prop tells the container to start merging their effects when they come within 20 points of each other, creating a slick morphing animation.

Try it out!

Liquid Glass brings a fresh, modern look to your React Native apps by embracing Apple's latest design language.

We’ve made it straightforward to use: just add our LiquidGlassView components to your React component tree, tune a few props, and you’ll have instant iOS 26 aesthetics. The library works on both vanilla React Native and Expo and gracefully falls back on unsupported platforms.

Go ahead and check out the library on GitHub. It’s open source and free to use. Happy coding!

‍

Insights

Learn more about iOS

cover

Nov 25Article

Integrating Swift Package Manager With React Native Libraries

Learn how to use Swift Package Manager with React Native libraries, including support for both remote and local SPM packages. This guide explains the spm_dependency helper, monorepo workflows, and current limitations.

cover

Oct 23Live Stream

Building Real-Time Live Activities in Expo

Learn how to add real-time LiveActivity updates to your Expo app using Swift native modules. In this stream, we implemented Apple’s Live Activities with Evan Bacon’s library, explored ActivityKit, and discussed cross-platform development with Solito 5 and Expo UI.

cover

Feb 27Article

Exposing SwiftUI Views to React Native: An Integration Guide

Learn how to seamlessly integrate SwiftUI views in React Native and enhance your app’s iOS capabilities with SwiftUI superpowers.

cover

Jan 16Article

Solving Swift Modular Header Issues in React Native for Good

Learn how to resolve Swift modular header errors in React Native. Explore solutions like static frameworks and a custom CocoaPods plugin.

cover

Jun 3Article

Handling Multiple Native iOS Views in React Native

In this article Piotr Trocki, software developer at Callstack, explains how to handle multiple Native iOS views in React Native.

cover

Nov 16Article

React Native Meets iPhoneX

Check this practical guide on adapting your React Native application to the new iPhone X, specifically when using react-native-navigation.

cover

Mar 19Tutorial

The Hard Way vs. The React Native AI SDK Way: Stop Writing Custom Modules for Every Model

Learn how React Native AI uses a unified provider model to switch between cloud and on-device LLMs without rewriting application logic, enabling reliable AI experiences online and offline.

cover

Mar 12Tutorial

Build Smarter Apps: Tool Calling & AI Orchestration Explained

Learn how on-device models in React Native can call tools, interact with external APIs, and return structured outputs you can use directly in application logic.

cover

Mar 5Tutorial

MLC LLM + React Native: On-Device AI Without the Pain

Learn how to run third-party on-device LLMs in React Native using MLC LLM. Choose your models, run them efficiently across platforms, and keep a unified JavaScript API with React Native AI.

cover

Feb 24Tutorial

Intelligent Fallbacks with Apple Intelligence in React Native

Learn how to use Apple’s built-in Foundation Models in React Native apps, reduce memory usage, and enable fast, fully on-device AI with React Native AI Apple.

cover

Feb 10Tutorial

What Is the React Native AI SDK? A Complete Intro & Quickstart

Learn why on-device AI matters for React Native apps, how local LLMs behave offline, and what problems React Native AI is designed to solve from day one.

cover

Jan 29Tutorial

Implementing an Android TurboModule with Kotlin

Learn how to implement a React Native TurboModule on Android, from the TypeScript spec and Codegen to the Kotlin implementation and package registration.

cover

Jan 19Tutorial

Working with Different Threads in Swift TurboModules

Learn how JavaScript, native module, background, and main threads interact in React Native TurboModules, and how to use GCD queues to run async work safely in Swift.

cover

Jan 9Tutorial

How to Add Type-Safe Constants to Swift TurboModules

Learn how to expose typed, immutable constants from a Swift TurboModule using Codegen, and get full end-to-end type safety between native and JavaScript.

cover

Dec 30Tutorial

Adding Event Emitters to Your TurboModule in Swift

Learn how to emit native events from a Swift TurboModule and subscribe to them in JavaScript, including proper memory management and Codegen integration.

cover

Dec 22Tutorial

Writing Your First TurboModule in Swift

Learn how to build a fully working TurboModule in Swift, integrate it with Codegen, and bridge it through Objective‑C inside an Expo app.