Skip to content
Back to skills

Ios26 Liquid Glass

ASecurity

iOS 26 Liquid Glass API reference for SwiftUI and UIKit. Use this skill when working with glassEffect, GlassEffectContainer, glassEffectID, glassEffectUnion, or any Liquid Glass related code on iOS 26+.

  • 666 stars
  • 0 votes
  • 0 copies
  • 8 views
  • Added February 9, 2026
documentationgoswiftapiperformancedocumentation

Works with

  • cli
  • api

Security analysis

A100/100

Scanned February 12, 2026

npx -y skills add majiayu000/claude-skill-registry --skill ios26-liquid-glass --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Ios26 Liquid Glass?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Ios26 Liquid Glass
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/majiayu000-ios26-liquid-glass/badge)](https://www.skillsdirectory.com/skills/majiayu000-ios26-liquid-glass)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: ios26-liquid-glass
description: iOS 26 Liquid Glass API reference for SwiftUI and UIKit. Use this skill when working with glassEffect, GlassEffectContainer, glassEffectID, glassEffectUnion, or any Liquid Glass related code on iOS 26+.
---

# iOS 26 Liquid Glass Reference

Liquid Glass is Apple's design language introduced at WWDC 2025. Glass elements float above content with translucent, depth-aware surfaces that reflect and refract surrounding content.

## SwiftUI - glassEffect Modifier

```swift
func glassEffect<S: Shape>(
    _ glass: Glass = .regular,
    in shape: S = DefaultGlassEffectShape,
    isEnabled: Bool = true
) -> some View
```

Apply `.glassEffect()` **last** in your modifier chain for correct rendering.

### Glass Variants

| Variant | Description | Use Case |
|---------|-------------|----------|
| `.regular` | Default, balanced transparency | Most UI elements (buttons, controls, overlays) |
| `.clear` | High transparency, limited adaptivity | Media-rich backgrounds (needs dimming layer) |
| `.identity` | No effect applied | Conditional glass application |

### Glass Modifiers

```swift
// semantic color tinting - use only for meaning (success, warning, destructive)
.glassEffect(.regular.tint(.blue))

// iOS-only: enables scaling, bounce, shimmer on interaction
.glassEffect(.regular.interactive())

// combined
.glassEffect(.regular.tint(.blue).interactive())
```

### Shapes

```swift
// default shape (capsule)
.glassEffect()
.glassEffect(.regular, in: DefaultGlassEffectShape())

// built-in shapes
.glassEffect(.regular, in: .capsule)
.glassEffect(.regular, in: .circle)
.glassEffect(.regular, in: .ellipse)
.glassEffect(.regular, in: .rect(cornerRadius: 12))
.glassEffect(.regular, in: RoundedRectangle(cornerRadius: 16))

// adapts corner radius to parent container (for buttons in cards/sheets)
.glassEffect(.regular, in: .rect(cornerRadius: .containerConcentric))
```

## GlassEffectContainer

Groups multiple glass elements for seamless blending and morphing. **Glass cannot sample other glass**, so use this when elements are positioned closely.

```swift
GlassEffectContainer(spacing: 8) {  // spacing = merge threshold in points
    Button("One") { }
        .glassEffect()

    Button("Two") { }
        .glassEffect()
}
```

When elements are closer than `spacing`, they visually blend and morph together like water droplets.

### Rules
- Don't nest `GlassEffectContainer` inside another
- Don't place `Menu` inside `GlassEffectContainer` (breaks morphing in iOS 26.1)
- Don't use `.clipShape()` on glassEffect views

## glassEffectID - Morphing Transitions

Associates glass elements across states for fluid morphing animations. Requires `@Namespace` and `GlassEffectContainer`.

```swift
@Namespace var namespace
@State var expanded = false

GlassEffectContainer {
    if expanded {
        HStack {
            Button("Home") { }
                .glassEffect(.regular.interactive())
                .glassEffectID("home", in: namespace)

            Button("Settings") { }
                .glassEffect(.regular.interactive())
                .glassEffectID("settings", in: namespace)
        }
    } else {
        Button("Menu") { expanded = true }
            .glassEffect(.regular.interactive())
            .glassEffectID("menu", in: namespace)
    }
}
.animation(.easeInOut, value: expanded)
```

### Requirements for Morphing
1. Elements must be within the same `GlassEffectContainer`
2. Each view needs `glassEffectID` with shared namespace
3. Views must be conditionally shown/hidden
4. Animation must be applied to the state change
5. All morphing elements should use same Glass style and tint

## glassEffectUnion - Grouping Elements

Makes multiple elements appear as a **single glass shape** (like Apple Maps zoom controls).

```swift
@Namespace var ns

VStack(spacing: 0) {
    Button(action: { /* zoom in */ }) {
        Image(systemName: "plus")
    }
    .glassEffect(.regular.tint(.white.opacity(0.8)))
    .glassEffectUnion(id: "zoom", namespace: ns)

    Divider()

    Button(action: { /* zoom out */ }) {
        Image(systemName: "minus")
    }
    .glassEffect(.regular.tint(.white.opacity(0.8)))
    .glassEffectUnion(id: "zoom", namespace: ns)
}
```

### Requirements
All elements in a union must have:
- Same union id
- Same glass effect variant
- Same tint (color and opacity)

## UIKit Support

### UIGlassEffect

```swift
if #available(iOS 26.0, *) {
    let glassEffect = UIGlassEffect()
    let effectView = UIVisualEffectView(effect: glassEffect)
    effectView.frame = CGRect(x: 20, y: 100, width: 200, height: 50)
    view.addSubview(effectView)

    // add content to contentView
    let label = UILabel()
    label.text = "Glass Effect"
    effectView.contentView.addSubview(label)
}
```

### UIGlassContainerEffect - Merging Glass Views

```swift
if #available(iOS 26.0, *) {
    let containerEffect = UIGlassContainerEffect()
    containerEffect.spacing = 12  // merge distance threshold

    let containerView = UIVisualEffectView(effect: containerEffect)

    let glass1 = UIVisualEffectView(effect: UIGlassEffect())
    let glass2 = UIVisualEffectView(effect: UIGlassEffect())

    containerView.contentView.addSubview(glass1)
    containerView.contentView.addSubview(glass2)
}
```

### Corner Configuration

```swift
if #available(iOS 26.0, *) {
    let effectView = UIVisualEffectView(effect: UIGlassEffect())
    effectView.cornerConfiguration = UIViewCornerConfiguration(
        corners: .allCorners,
        cornerRadius: 16
    )
}
```

### UIHostingController Integration

When embedding SwiftUI glass in UIKit:
- Place in `navigationItem.titleView` (not `leftBarButtonItem`/`rightBarButtonItem`)
- Set `sizingOptions = [.intrinsicContentSize]`

## Backward Compatibility

The `Glass` type only exists on iOS 26+. Create wrappers with `#available`:

```swift
extension View {
    @ViewBuilder
    func applyGlassEffect() -> some View {
        if #available(iOS 26.0, *) {
            self.glassEffect()
        } else {
            self  // no-op on older iOS
        }
    }

    // with parameters - requires @available at call site
    @available(iOS 26.0, *)
    @ViewBuilder
    func applyGlassEffect(
        _ glass: Glass,
        in shape: some Shape = DefaultGlassEffectShape()
    ) -> some View {
        self.glassEffect(glass, in: shape)
    }
}
```

### Fallback for older iOS

```swift
if #available(iOS 26.0, *) {
    content.glassEffect()
} else {
    content.background(.ultraThinMaterial, in: .capsule)
}
```

## Design Guidelines

### When to Use
- Navigation elements (tab bars, toolbars, nav bars)
- Floating action buttons
- Control panels and overlays
- Search bars and input fields
- Modal/sheet presentations
- Interactive elements that sit "above" content

### When NOT to Use
- Core content (list rows, table cells)
- Card backgrounds with primary information
- Media-rich content areas
- Text-heavy sections
- Decorative elements with no function

### Best Practices
- Use `.interactive()` for buttons/controls on iOS
- Use `.tint()` only for semantic meaning
- Test in light mode, dark mode, and with "Reduce Transparency"
- Maintain 4.5:1 contrast ratio (WCAG AA)
- Use `.containerConcentric` corner radius for elements in containers
- Monitor performance in scrollable lists on older iPhones

## Known Issues

| Issue | Workaround |
|-------|------------|
| `Menu` in `GlassEffectContainer` breaks morphing (iOS 26.1) | Don't nest Menu in container |
| Morphing circle ↔ rectangle has glitches | Avoid drastically different shape transitions |
| `glassEffectID` inconsistent | Consider `.matchedGeometryEffect` as alternative |
| UIHostingController in bar items causes side effects | Use `titleView` instead |

## Button Styles

```swift
// translucent glass button
Button("Glass") { }
    .buttonStyle(.glass)

// opaque prominent glass button
Button("Prominent") { }
    .buttonStyle(.glassProminent)
```

## Tab Bar Behavior

```swift
// tab bar minimizes when scrolling down
.tabBarMinimizeBehavior(.onScrollDown)
```

## Resources

- [Applying Liquid Glass to custom views](https://developer.apple.com/documentation/SwiftUI/Applying-Liquid-Glass-to-custom-views)
- [GlassEffectContainer](https://developer.apple.com/documentation/swiftui/glasseffectcontainer)
- [WWDC 2025 Session 323: Build a SwiftUI app with the new design](https://developer.apple.com/videos/play/wwdc2025/323/)
- [WWDC 2025 Session 284: Build a UIKit app with the new design](https://developer.apple.com/videos/play/wwdc2025/284/)
- [WWDC 2025 Session 219: Meet Liquid Glass](https://developer.apple.com/videos/play/wwdc2025/219/)

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.