rdev/liquid-glass-react

Apple's Liquid Glass effect for React

TypeScript

6,366

16 commits

updated Jun 13, 2025

See the code

README

Liquid Glass React

Apple's Liquid Glass effect for React.

Card ExampleButton Example

🎬 Demo

Click here to see it in action!

project liquid gif

✨ Features

  • Proper edgy bending and refraction
  • Multiple refraction modes
  • Configurable frosty level
  • Supports arbitrary child elements
  • Configurable paddings
  • Correct hover and click effects
  • Edges and highlights take on the underlying light like Apple's does
  • Configurable chromatic aberration
  • Configurable elasticity, to mimic Apple's "liquid" feel

⚠️ NOTE: Safari and Firefox only partially support the effect (displacement will not be visible)

🚀 Usage

Installation

npm install liquid-glass-react

Basic Usage

import LiquidGlass from 'liquid-glass-react'

function App() {
  return (
    <LiquidGlass>
      <div className="p-6">
        <h2>Your content here</h2>
        <p>This will have the liquid glass effect</p>
      </div>
    </LiquidGlass>
  )
}

Button Example

<LiquidGlass
  displacementScale={64}
  blurAmount={0.1}
  saturation={130}
  aberrationIntensity={2}
  elasticity={0.35}
  cornerRadius={100}
  padding="8px 16px"
  onClick={() => console.log('Button clicked!')}
>
  <span className="text-white font-medium">Click Me</span>
</LiquidGlass>

Mouse Container Example

When you want the glass effect to respond to mouse movement over a larger area (like a parent container), use the mouseContainer prop:

function App() {
  const containerRef = useRef<HTMLDivElement>(null)

  return (
    <div ref={containerRef} className="w-full h-screen bg-image">
      <LiquidGlass
        mouseContainer={containerRef}
        elasticity={0.3}
        style={{ position: 'fixed', top: '50%', left: '50%' }}
      >
        <div className="p-6">
          <h2>Glass responds to mouse anywhere in the container</h2>
        </div>
      </LiquidGlass>
    </div>
  )
}

Props

PropTypeDefaultDescription
childrenReact.ReactNode-The content to render inside the glass container
displacementScalenumber70Controls the intensity of the displacement effect
blurAmountnumber0.0625Controls the blur/frosting level
saturationnumber140Controls color saturation of the glass effect
aberrationIntensitynumber2Controls chromatic aberration intensity
elasticitynumber0.15Controls the "liquid" elastic feel (0 = rigid, higher = more elastic)
cornerRadiusnumber999Border radius in pixels
classNamestring""Additional CSS classes
paddingstring-CSS padding value
styleReact.CSSProperties-Additional inline styles
overLightbooleanfalseWhether the glass is over a light background
onClick() => void-Click handler
mouseContainerReact.RefObject<HTMLElement | null> | nullnullContainer element to track mouse movement on (defaults to the glass component itself)
mode"standard" | "polar" | "prominent" | "shader""standard"Refraction mode for different visual effects. shader is the most accurate but not the most stable.
globalMousePos{ x: number; y: number }-Global mouse position coordinates for manual control
mouseOffset{ x: number; y: number }-Mouse position offset for fine-tuning positioning

rdev/liquid-glass-react

Apple's Liquid Glass effect for React

TypeScript

6,366

16 commits

updated Jun 13, 2025

See the code

README

Liquid Glass React

Apple's Liquid Glass effect for React.

Card ExampleButton Example

🎬 Demo

Click here to see it in action!

project liquid gif

✨ Features

  • Proper edgy bending and refraction
  • Multiple refraction modes
  • Configurable frosty level
  • Supports arbitrary child elements
  • Configurable paddings
  • Correct hover and click effects
  • Edges and highlights take on the underlying light like Apple's does
  • Configurable chromatic aberration
  • Configurable elasticity, to mimic Apple's "liquid" feel

⚠️ NOTE: Safari and Firefox only partially support the effect (displacement will not be visible)

🚀 Usage

Installation

npm install liquid-glass-react

Basic Usage

import LiquidGlass from 'liquid-glass-react'

function App() {
  return (
    <LiquidGlass>
      <div className="p-6">
        <h2>Your content here</h2>
        <p>This will have the liquid glass effect</p>
      </div>
    </LiquidGlass>
  )
}

Button Example

<LiquidGlass
  displacementScale={64}
  blurAmount={0.1}
  saturation={130}
  aberrationIntensity={2}
  elasticity={0.35}
  cornerRadius={100}
  padding="8px 16px"
  onClick={() => console.log('Button clicked!')}
>
  <span className="text-white font-medium">Click Me</span>
</LiquidGlass>

Mouse Container Example

When you want the glass effect to respond to mouse movement over a larger area (like a parent container), use the mouseContainer prop:

function App() {
  const containerRef = useRef<HTMLDivElement>(null)

  return (
    <div ref={containerRef} className="w-full h-screen bg-image">
      <LiquidGlass
        mouseContainer={containerRef}
        elasticity={0.3}
        style={{ position: 'fixed', top: '50%', left: '50%' }}
      >
        <div className="p-6">
          <h2>Glass responds to mouse anywhere in the container</h2>
        </div>
      </LiquidGlass>
    </div>
  )
}

Props

PropTypeDefaultDescription
childrenReact.ReactNode-The content to render inside the glass container
displacementScalenumber70Controls the intensity of the displacement effect
blurAmountnumber0.0625Controls the blur/frosting level
saturationnumber140Controls color saturation of the glass effect
aberrationIntensitynumber2Controls chromatic aberration intensity
elasticitynumber0.15Controls the "liquid" elastic feel (0 = rigid, higher = more elastic)
cornerRadiusnumber999Border radius in pixels
classNamestring""Additional CSS classes
paddingstring-CSS padding value
styleReact.CSSProperties-Additional inline styles
overLightbooleanfalseWhether the glass is over a light background
onClick() => void-Click handler
mouseContainerReact.RefObject<HTMLElement | null> | nullnullContainer element to track mouse movement on (defaults to the glass component itself)
mode"standard" | "polar" | "prominent" | "shader""standard"Refraction mode for different visual effects. shader is the most accurate but not the most stable.
globalMousePos{ x: number; y: number }-Global mouse position coordinates for manual control
mouseOffset{ x: number; y: number }-Mouse position offset for fine-tuning positioning

Significant stargazers

(top 24 of 56)

Josh Soref

808 followers · starred Jun 2025

Eduardo San Martin Morote

6,580 followers · starred Jun 2025

Innei

3,489 followers · starred Jun 2025

Amila Welihinda

1,468 followers · starred Jun 2025