
Refracting glass material drawn entirely in a shader: samples padded backdrop for lensing, preserves sharp rim, dispersion, signed-distance geometry, mergeable panels, interactive touch and morph behaviors.
Liquid Glass for every stack, measured against iOS.
Apple's iOS 26 glass for Android, desktop, web, React Native, Flutter and .NET: real refraction of
whatever is behind it, the tab bar whose selection becomes a lens you can drag and throw, and glass
versions of every Material 3 component.
Rendered by the library (desktop Skia, a deterministic 60 fps replay of a tap, a hold and a throw; shown at 30 fps).
Try the live demo in your browser · Documentation · Getting started
| Stack | Install | Guide |
|---|---|---|
| Compose Multiplatform (Android, desktop, web) | plugins { id("dev.shayxo.liquidglass") version "1.0.0" } |
Getting started |
| Material 3 (Compose) | change the imports, or ./gradlew liquidGlassAdopt
|
Material 3 |
| Web, any framework | npm install @shayxo.dev/liquidglass |
<liquid-glass> |
| React Native (Android, web) | npm install @shayxo.dev/liquidglass-react-native |
React Native |
| Flutter (Android) | flutter pub add liquiglass |
Flutter |
| .NET (WinForms, WPF, Avalonia, MAUI) |
dotnet add package LiquidGlass + LiquidGlass.Maui / .Wpf / .Avalonia / .WinForms
|
.NET |
| Qt Quick (QML, C++, PySide6) |
import LiquidGlass from ports/qt
|
Qt |
| Unity (Built-in, URP) | Package Manager → git URL …/liquidglass.git?path=/ports/unity/com.shayxo.liquidglass (not yet run in Unity) |
Unity |
iOS is not a target on any stack: iOS 26 draws Liquid Glass natively.
LiquidGlassTheme { // once, around the app, as MaterialTheme is
App()
}
Icon(Icons.Default.Edit, null,
Modifier.size(44.dp).glassEffect(Glass.Regular.interactive(), CircleShape))
GlassEffectContainer(spacing = 20.dp) { // close pieces melt into one
Row { /* glassEffect pieces */ }
}
GlassTabBar(itemCount = 3, selectedIndex = selected, onSelected = { selected = it }) { index, isSelected ->
Tab(index, tint = if (isSelected) Accent else Ink)
}import com.wexpa.liquidglass.material3.Scaffold // was androidx.compose.material3.Scaffold
import com.wexpa.liquidglass.material3.NavigationBar
import com.wexpa.liquidglass.material3.NavigationBarItemRendered by the library: desktop Skia raster (MaterialShowcaseRenderTest), 390 × 844 dp at density 3, scrolled 170 dp. Not a device or browser capture; a Pixel 7 capture and the limits are in the evidence.
<!-- after `import '@shayxo.dev/liquidglass'` in your bundle, which registers the element -->
<liquid-glass interactive><button>Back</button><button>Share</button></liquid-glass><Canvas style={StyleSheet.absoluteFill} pointerEvents="none">
<GlassSurface source={backdrop} x={16} y={height - 100} width={width - 32} height={84} radius={28} dark />
</Canvas>GlassSurface(radius: 36, dark: true, child: Row(children: icons)) // over a ListView, refracted livevar bar = new GlassSurface { Backdrop = new GlassBackdrop(rows), Dark = true, Radius = 36, Content = tabs };Each image is the library rendering on that stack, captured by its demo app; the review folder next to each one gives the revision, the backend, how it was captured and its limits. Qt and Unity are previews: rendered in CI only, never yet on a GPU or in the Unity editor.
Measured, not styled. The material's levels, rim, refraction and the tab bar's motion are fitted to iOS 26 screen recordings and scored against them, frame by frame, through the real renderer. Every number says whether it was measured, inherited or authored: the research record, the latest comparison. The motion is close to iOS but not yet identical, and the remaining differences are listed.
iOS 27 (top, the owner's screen recording) and LiquidGlass (bottom, replaying the finger path inferred from it). The motion is close; iOS still bends the icons under the lens more strongly, and that is open work. Source, method and limits.
A tap (left) and a throw (right): iOS 26 on top, LiquidGlass below.
One material, every stack. Compose, the web component, React Native, Flutter and .NET all run the same production shader, generated from one source and checked against each other in CI.
There are excellent libraries for single stacks, and they may suit you better:
| Library | Stack | What it states |
|---|---|---|
| Kyant0/AndroidLiquidGlass | Compose Multiplatform | "Compose Multiplatform Liquid Glass effect" |
| chrisbanes/haze | Compose Multiplatform | background blurring |
| skydoves/Cloudy | Compose Multiplatform | blur and liquid glass, with a CPU fallback |
| rdev/liquid-glass-react | React (web) | "Apple's Liquid Glass effect for React" |
| callstack/liquid-glass | React Native | iOS 26's native glass, on iOS |
| liquid_glass_widgets, liquid_glass_renderer | Flutter | shader-based glass widgets |
Their descriptions are quoted from their own repositories (checked 20 October 2026); none of them is claimed here to lack anything.
| Platform | Status |
|---|---|
| Android 13+ | Full shader (AGSL). Checked on a Pixel 7 |
| Android below 13 | Tinted fallback with rim lighting; no refraction |
| Desktop JVM | Full shader (Skia). Windows and Linux tested; macOS untested (help wanted) |
| Web, Compose (Wasm) | Full shader (Skia), the same code as desktop (live demo) |
| Web, any framework |
<liquid-glass>: refracts live HTML in Chromium, frosts elsewhere, or draws the production shaders over a source (evidence); CanvasKit port
|
| React Native |
GlassSurface, GlassLens on React Native Skia, Android and web (evidence) |
| Flutter |
GlassSurface over the live backdrop on Impeller, Android (evidence) |
| .NET | SkiaSharp painter and tab bar; WinForms, WPF, Avalonia and MAUI adapters (MAUI evidence) |
| Qt Quick |
GlassSurface, a ShaderEffect over the live item behind it; rendered offscreen in CI (evidence) |
| Unity |
Built-in and URP shaders, GlassSurface; shader compiled with FXC and rendered on D3D11 WARP in CI, not yet run in Unity (evidence) |
| iOS | Not a target: iOS 26 draws Liquid Glass natively |
The demo app, on desktop, Android and in your browser: a
scene that keeps moving under every piece of glass. ./gradlew :desktop:run.
The maintainer has one Windows machine and one Android phone. If you have a Mac, a Samsung, Safari, or
a Linux desktop with a real GPU, a ten-minute check helps a lot: see the
needs-device issues.
The iOS parity work is tracked in the
1.1.0 milestone. Issues labelled
needs-dataset depend on the
maintainer's private iOS recordings and are assigned to them; the other parity issues carry measured targets and,
where it helps, short clips to work from.
Questions and show-and-tell go in Discussions.
Contributing explains the evidence a change needs.
Apache-2.0: see LICENSE and NOTICE. Not affiliated with or endorsed by Apple. "Liquid Glass" names the design this resembles. No Apple code, shaders or assets are used; reference recordings are research material and are not distributed. Security · Changelog · Limitations
Liquid Glass for every stack, measured against iOS.
Apple's iOS 26 glass for Android, desktop, web, React Native, Flutter and .NET: real refraction of
whatever is behind it, the tab bar whose selection becomes a lens you can drag and throw, and glass
versions of every Material 3 component.
Rendered by the library (desktop Skia, a deterministic 60 fps replay of a tap, a hold and a throw; shown at 30 fps).
Try the live demo in your browser · Documentation · Getting started
| Stack | Install | Guide |
|---|---|---|
| Compose Multiplatform (Android, desktop, web) | plugins { id("dev.shayxo.liquidglass") version "1.0.0" } |
Getting started |
| Material 3 (Compose) | change the imports, or ./gradlew liquidGlassAdopt
|
Material 3 |
| Web, any framework | npm install @shayxo.dev/liquidglass |
<liquid-glass> |
| React Native (Android, web) | npm install @shayxo.dev/liquidglass-react-native |
React Native |
| Flutter (Android) | flutter pub add liquiglass |
Flutter |
| .NET (WinForms, WPF, Avalonia, MAUI) |
dotnet add package LiquidGlass + LiquidGlass.Maui / .Wpf / .Avalonia / .WinForms
|
.NET |
| Qt Quick (QML, C++, PySide6) |
import LiquidGlass from ports/qt
|
Qt |
| Unity (Built-in, URP) | Package Manager → git URL …/liquidglass.git?path=/ports/unity/com.shayxo.liquidglass (not yet run in Unity) |
Unity |
iOS is not a target on any stack: iOS 26 draws Liquid Glass natively.
LiquidGlassTheme { // once, around the app, as MaterialTheme is
App()
}
Icon(Icons.Default.Edit, null,
Modifier.size(44.dp).glassEffect(Glass.Regular.interactive(), CircleShape))
GlassEffectContainer(spacing = 20.dp) { // close pieces melt into one
Row { /* glassEffect pieces */ }
}
GlassTabBar(itemCount = 3, selectedIndex = selected, onSelected = { selected = it }) { index, isSelected ->
Tab(index, tint = if (isSelected) Accent else Ink)
}import com.wexpa.liquidglass.material3.Scaffold // was androidx.compose.material3.Scaffold
import com.wexpa.liquidglass.material3.NavigationBar
import com.wexpa.liquidglass.material3.NavigationBarItemRendered by the library: desktop Skia raster (MaterialShowcaseRenderTest), 390 × 844 dp at density 3, scrolled 170 dp. Not a device or browser capture; a Pixel 7 capture and the limits are in the evidence.
<!-- after `import '@shayxo.dev/liquidglass'` in your bundle, which registers the element -->
<liquid-glass interactive><button>Back</button><button>Share</button></liquid-glass><Canvas style={StyleSheet.absoluteFill} pointerEvents="none">
<GlassSurface source={backdrop} x={16} y={height - 100} width={width - 32} height={84} radius={28} dark />
</Canvas>GlassSurface(radius: 36, dark: true, child: Row(children: icons)) // over a ListView, refracted livevar bar = new GlassSurface { Backdrop = new GlassBackdrop(rows), Dark = true, Radius = 36, Content = tabs };Each image is the library rendering on that stack, captured by its demo app; the review folder next to each one gives the revision, the backend, how it was captured and its limits. Qt and Unity are previews: rendered in CI only, never yet on a GPU or in the Unity editor.
Measured, not styled. The material's levels, rim, refraction and the tab bar's motion are fitted to iOS 26 screen recordings and scored against them, frame by frame, through the real renderer. Every number says whether it was measured, inherited or authored: the research record, the latest comparison. The motion is close to iOS but not yet identical, and the remaining differences are listed.
iOS 27 (top, the owner's screen recording) and LiquidGlass (bottom, replaying the finger path inferred from it). The motion is close; iOS still bends the icons under the lens more strongly, and that is open work. Source, method and limits.
A tap (left) and a throw (right): iOS 26 on top, LiquidGlass below.
One material, every stack. Compose, the web component, React Native, Flutter and .NET all run the same production shader, generated from one source and checked against each other in CI.
There are excellent libraries for single stacks, and they may suit you better:
| Library | Stack | What it states |
|---|---|---|
| Kyant0/AndroidLiquidGlass | Compose Multiplatform | "Compose Multiplatform Liquid Glass effect" |
| chrisbanes/haze | Compose Multiplatform | background blurring |
| skydoves/Cloudy | Compose Multiplatform | blur and liquid glass, with a CPU fallback |
| rdev/liquid-glass-react | React (web) | "Apple's Liquid Glass effect for React" |
| callstack/liquid-glass | React Native | iOS 26's native glass, on iOS |
| liquid_glass_widgets, liquid_glass_renderer | Flutter | shader-based glass widgets |
Their descriptions are quoted from their own repositories (checked 20 October 2026); none of them is claimed here to lack anything.
| Platform | Status |
|---|---|
| Android 13+ | Full shader (AGSL). Checked on a Pixel 7 |
| Android below 13 | Tinted fallback with rim lighting; no refraction |
| Desktop JVM | Full shader (Skia). Windows and Linux tested; macOS untested (help wanted) |
| Web, Compose (Wasm) | Full shader (Skia), the same code as desktop (live demo) |
| Web, any framework |
<liquid-glass>: refracts live HTML in Chromium, frosts elsewhere, or draws the production shaders over a source (evidence); CanvasKit port
|
| React Native |
GlassSurface, GlassLens on React Native Skia, Android and web (evidence) |
| Flutter |
GlassSurface over the live backdrop on Impeller, Android (evidence) |
| .NET | SkiaSharp painter and tab bar; WinForms, WPF, Avalonia and MAUI adapters (MAUI evidence) |
| Qt Quick |
GlassSurface, a ShaderEffect over the live item behind it; rendered offscreen in CI (evidence) |
| Unity |
Built-in and URP shaders, GlassSurface; shader compiled with FXC and rendered on D3D11 WARP in CI, not yet run in Unity (evidence) |
| iOS | Not a target: iOS 26 draws Liquid Glass natively |
The demo app, on desktop, Android and in your browser: a
scene that keeps moving under every piece of glass. ./gradlew :desktop:run.
The maintainer has one Windows machine and one Android phone. If you have a Mac, a Samsung, Safari, or
a Linux desktop with a real GPU, a ten-minute check helps a lot: see the
needs-device issues.
The iOS parity work is tracked in the
1.1.0 milestone. Issues labelled
needs-dataset depend on the
maintainer's private iOS recordings and are assigned to them; the other parity issues carry measured targets and,
where it helps, short clips to work from.
Questions and show-and-tell go in Discussions.
Contributing explains the evidence a change needs.
Apache-2.0: see LICENSE and NOTICE. Not affiliated with or endorsed by Apple. "Liquid Glass" names the design this resembles. No Apple code, shaders or assets are used; reference recordings are research material and are not distributed. Security · Changelog · Limitations