ios26-liquid-glass/SKILL.md
iOS 26 Liquid Glass design system. The new dynamic material across all Apple platforms (iOS 26, iPadOS 26, macOS Tahoe, watchOS 26, tvOS 26). Covers glassEffect, GlassEffectContainer, morphing transitions, TabView changes, and adopting the new design language.
npx skillsauth add abanoub-ashraf/manus-skills-import ios26-liquid-glassInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Liquid Glass is Apple's new universal design language introduced at WWDC25 (June 2025). It features a dynamic material that combines optical glass properties with fluid animations, creating a layered, translucent UI that adapts to content and interactions.
Liquid Glass:
Available on: iOS 26, iPadOS 26, macOS Tahoe 26, watchOS 26, tvOS 26, visionOS 26
import SwiftUI
// Basic glass effect (capsule shape by default)
Text("Hello, World!")
.font(.title)
.padding()
.glassEffect()
// Custom shape
Text("Hello, World!")
.font(.title)
.padding()
.glassEffect(in: .rect(cornerRadius: 16))
// Tinted and interactive
Text("Tap Me")
.font(.title)
.padding()
.glassEffect(.regular.tint(.orange).interactive())
// Standard glass button
Button("Action") { }
.buttonStyle(.glass)
// Prominent glass button (more visible)
Button("Primary Action") { }
.buttonStyle(.glassProminent)
// Configured glass button
Button("Custom") { }
.buttonStyle(.glass(.regular.tint(.blue)))
// Regular glass (default)
.glassEffect(.regular)
// With tint color
.glassEffect(.regular.tint(.blue))
// Interactive (responds to touch/hover)
.glassEffect(.regular.interactive())
// Combined
.glassEffect(.regular.tint(.purple).interactive())
Use GlassEffectContainer when multiple views need glass effects - enables blending and morphing.
GlassEffectContainer(spacing: 40) {
HStack(spacing: 40) {
Image(systemName: "pencil")
.frame(width: 80, height: 80)
.font(.system(size: 36))
.glassEffect()
Image(systemName: "eraser.fill")
.frame(width: 80, height: 80)
.font(.system(size: 36))
.glassEffect()
}
}
The container's spacing controls when glass effects blend together:
// Effects will blend when items are within 40pt
GlassEffectContainer(spacing: 40) {
HStack(spacing: 20) { // Closer than container spacing
ForEach(items) { item in
ItemView(item: item)
.glassEffect()
}
}
}
Use glassEffectUnion to combine multiple views into a single glass shape:
@Namespace private var namespace
GlassEffectContainer(spacing: 20) {
HStack(spacing: 20) {
ForEach(symbols.indices, id: \.self) { index in
Image(systemName: symbols[index])
.frame(width: 80, height: 80)
.font(.system(size: 36))
.glassEffect()
// First two share one glass, last two share another
.glassEffectUnion(id: index < 2 ? "group1" : "group2", namespace: namespace)
}
}
}
Glass effects can morph into each other during view transitions.
@State private var isExpanded = false
@Namespace private var namespace
GlassEffectContainer(spacing: 40) {
HStack(spacing: 40) {
Image(systemName: "scribble.variable")
.frame(width: 80, height: 80)
.glassEffect()
.glassEffectID("pencil", in: namespace)
if isExpanded {
Image(systemName: "eraser.fill")
.frame(width: 80, height: 80)
.glassEffect()
.glassEffectID("eraser", in: namespace)
}
}
}
Button("Toggle") {
withAnimation {
isExpanded.toggle()
}
}
.buttonStyle(.glass)
// Matched geometry (default for nearby elements)
.glassEffectTransition(.matchedGeometry)
// Materialize (fade in/out for distant elements)
.glassEffectTransition(.materialize)
TabView {
Tab("Workouts", systemImage: "dumbbell.fill") {
WorkoutsView()
}
Tab("Exercises", systemImage: "figure.strengthtraining.traditional") {
ExercisesView()
}
}
.tabBarMinimizeBehavior(.onScrollDown) // Minimizes when scrolling
Add persistent controls above the tab bar (like music player controls):
TabView {
// tabs...
}
.tabViewBottomAccessory {
// This view appears above the tab bar
NowPlayingMiniPlayer()
}
TabView {
Tab("Home", systemImage: "house") {
HomeView()
}
// Creates a floating search button in bottom-right
Tab("Search", systemImage: "magnifyingglass", value: .search, role: .search) {
SearchView()
}
}
Navigation bars automatically adopt Liquid Glass in iOS 26:
NavigationStack {
List {
// Content scrolls under glass navigation bar
}
.navigationTitle("Items")
}
.toolbar {
ToolbarItem(placement: .primaryAction) {
Button("Add", systemImage: "plus") { }
}
}
// Toolbar buttons automatically get glass treatment
Create floating buttons that fit the Liquid Glass design:
ZStack(alignment: .bottomTrailing) {
// Main content
List { /* ... */ }
// Floating glass button
Button(action: addItem) {
Label("Add", systemImage: "plus")
.labelStyle(.iconOnly)
.font(.title2)
.padding()
}
.glassEffect(.regular.interactive())
.padding([.bottom, .trailing], 16)
}
// ✅ Use containers for multiple effects
GlassEffectContainer {
ForEach(items) { item in
ItemView(item: item)
.glassEffect()
}
}
// ❌ Avoid too many standalone effects
ForEach(items) { item in
ItemView(item: item)
.glassEffect() // Each creates separate render pass
}
If you need more time to adopt, you can temporarily opt out:
// In your app's Info.plist or build settings
// Set UIDesignRequiresCompatibilityMode = YES
// Or programmatically for specific views
.preferredDesignStyle(.compatible) // Use legacy style
Note: This escape hatch is temporary and will be removed in a future iOS version.
Liquid Glass encourages layered UIs:
.glassEffect()development
Design principles for building polished, native-feeling SwiftUI apps and widgets. Use this skill when creating or modifying SwiftUI views, iOS widgets (WidgetKit), or any native Apple UI. Ensures proper spacing, typography, colors, and widget implementations that look and feel like quality apps rather than AI-generated slop.
data-ai
Design and implement SwiftUI views, components, and app architecture. Use when creating new SwiftUI views, implementing MVVM/TCA patterns, managing state with @Observable, @State, @Binding, or @Environment, designing navigation flows, or structuring iOS app architecture. Triggers on SwiftUI, view model, state management, navigation, coordinator pattern.
development
Implement, review, or improve SwiftUI animations and transitions. Use when adding implicit or explicit animations with withAnimation, configuring spring animations (.smooth, .snappy, .bouncy), building phase or keyframe animations with PhaseAnimator/KeyframeAnimator, creating hero transitions with matchedGeometryEffect or matchedTransitionSource, adding SF Symbol effects (bounce, pulse, variableColor, breathe, rotate, wiggle), implementing custom Transition or CustomAnimation types, or ensuring animations respect accessibilityReduceMotion.
testing
Audit SwiftUI views for accessibility (iOS + macOS) with patch-ready fixes