Loading...
Loading...
Build and migrate iOS, macOS, iPadOS, watchOS, tvOS, and visionOS apps with Apple's Liquid Glass design system (iOS 26+, macOS 26 Tahoe+). Use when creating new SwiftUI apps targeting Apple's 2025+ platforms, migrating existing apps to Liquid Glass, applying .glassEffect(), .backgroundExtensionEffect(), .buttonStyle(.glass), GlassEffectContainer, glass toolbars, glass tab bars, glass sheets, or any Liquid Glass UI work. Also use when the user asks about modern Apple design, navigation patterns with glass, or SwiftUI best practices for the latest OS versions.
npx skill4agent add haider-nawaz/liquid-glass-skill liquid-glasshttps://developer.apple.com/documentation/SwiftUI/Applying-Liquid-Glass-to-custom-viewshttps://developer.apple.com/documentation/swiftui/view/glasseffect(_:in:)https://developer.apple.com/documentation/SwiftUI/Landmarks-Building-an-app-with-Liquid-Glasshttps://developer.apple.com/videos/play/wwdc2025/323/// Basic - capsule shape (default)
Text("Label")
.padding()
.glassEffect()
// With shape and style
Image(systemName: "heart.fill")
.padding()
.glassEffect(.regular, in: .rect(cornerRadius: 16))
// Tinted glass
Text("Tinted")
.padding()
.glassEffect(.regular.tint(.blue))
// Interactive glass (scales, bounces, shimmers on touch - iOS only)
Button("Tap Me") { }
.glassEffect(.regular.interactive())| Style | Use Case | Transparency |
|---|---|---|
| Standard UI: toolbars, buttons, nav bars | Medium |
| Media-rich backgrounds where content is bold/bright | High |
| Conditionally disable glass (accessibility) | None |
GlassEffectContainer(spacing: 30.0) {
Button("Action 1") { }
.glassEffect()
.glassEffectID("btn1", in: namespace)
Button("Action 2") { }
.glassEffect()
.glassEffectID("btn2", in: namespace)
}@NamespaceglassEffectIDGlassEffectContainer@Namespace private var namespace
@State private var isExpanded = false
GlassEffectContainer(spacing: 16) {
if isExpanded {
ForEach(items) { item in
ItemView(item: item)
.glassEffect(.regular, in: .rect(cornerRadius: 24))
.glassEffectID(item.id, in: namespace)
}
}
Button {
withAnimation { isExpanded.toggle() }
} label: { Label("Toggle", systemImage: "chevron.down") }
.buttonStyle(.glass)
.glassEffectID("toggle", in: namespace)
}Image(landmark.backgroundImageName)
.resizable()
.aspectRatio(contentMode: .fill)
.frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity)
.backgroundExtensionEffect()// Standard glass button
Button("Action") { }
.buttonStyle(.glass)
// Prominent glass button (for primary actions)
Button("Save") { }
.buttonStyle(.glassProminent)ToolbarSpacerToolbarItemGroup.toolbar {
ToolbarSpacer(.flexible)
ToolbarItem { ShareLink(item: data, preview: preview) }
ToolbarSpacer(.fixed)
ToolbarItemGroup {
Button("Favorite", systemImage: "heart") { }
Button("Add", systemImage: "plus") { }
}
ToolbarItem {
Button("Info", systemImage: "info") { }
}
}
.toolbar(removing: .title) // Remove title for clean glass toolbarTabView {
Tab("Home", systemImage: "house") { HomeView() }
Tab("Search", systemImage: "magnifyingglass") { SearchView() }
}
.tabBarMinimizeBehavior(.onScrollDown) // Collapse tab bar on scroll.sheet(isPresented: $showSheet) {
SheetContent()
.presentationDetents([.medium, .large])
// Do NOT add .presentationBackground() - system handles it
}.toolbarBackgroundGlassEffectContainer.backgroundExtensionEffect().tint(.clear)WindowBackgroundShapeStyle.windowBackgroundMaterial.interactive()UIDevice.current.userInterfaceIdiom#if os(macOS)#if os(iOS)GlassEffectContainerrotationEffectUIGlassEffectButtonStylecontentShape()CABackdropLayer@EnvironmentToolbarSpacer(.flexible)ToolbarSpacer(.fixed).symbolVariant().symbolEffect(.drawOn)