Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
casper-studios avatar

Liquid Glass

  • 297 installs
  • 11 repo stars
  • Updated August 4, 2026
  • casper-studios/casper-marketplace

liquid-glass is a mobile development agent skill that implements Apple's Liquid Glass design language and Human Interface Guidelines in SwiftUI for developers building native iOS 26+ and macOS Tahoe interfaces.

About

Guides building native macOS/iOS SwiftUI interfaces with Apple's Liquid Glass design, translucent materials, SF Symbols, and HIG spacing and typography. A developer uses it to produce interfaces that feel native to Apple platforms.

  • Three-layer model restricting glass to navigation/control layers
  • Follows Apple HIG for spacing, typography, color, and SF Symbols

Liquid Glass by the numbers

  • 297 all-time installs (skills.sh)
  • Ranked #836 of 1,880 Design & UI/UX skills by installs in the Skillselion catalog
  • Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/casper-studios/casper-marketplace --skill liquid-glass

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs297
repo stars11
Last updatedAugust 4, 2026
Repositorycasper-studios/casper-marketplace

How do you implement Liquid Glass in SwiftUI?

Builds native macOS and iOS apps using Apple's Liquid Glass design language and Human Interface Guidelines in SwiftUI.

Who is it for?

iOS and macOS developers targeting iOS 26+ or macOS Tahoe who want SwiftUI code that follows Apple's Liquid Glass navigation-layer rules and HIG spacing.

Skip if: Web or React frontends, Android Compose UIs, or teams not shipping native SwiftUI apps on current Apple platform releases.

When should I use this skill?

The user builds SwiftUI macOS or iOS apps, asks for Liquid Glass effects, glassEffect modifiers, or Apple HIG-native navigation UI.

What you get

SwiftUI views with glassEffect modifiers, GlassEffectContainer layouts, HIG-compliant spacing, and native glass button styles.

  • SwiftUI glassEffect view code
  • GlassEffectContainer layouts
  • HIG-compliant navigation UI

By the numbers

  • Targets Liquid Glass API on iOS 26+ and macOS Tahoe
  • Documents 3 glassEffect variants: .regular, .clear, and .identity

Files

SKILL.mdMarkdownGitHub ↗

Liquid Glass Design

Build native macOS/iOS applications with Apple's Liquid Glass design and HIG.

Core Rules

Three-Layer Model

┌─────────────────────────────────────────┐
│     GLASS LAYER (Navigation/Controls)   │  ← Glass here ONLY
├─────────────────────────────────────────┤
│         CONTENT LAYER (Your App)        │  ← Never glass here
└─────────────────────────────────────────┘

Glass is ONLY for navigation floating above content. Never on content itself.

Five Principles

1. Content First - Glass floats above, content shines through 2. Depth Through Light - Lensing creates hierarchy, not opacity 3. Adaptive Tinting - Colors respond to background dynamically 4. Semantic Emphasis - Tint primary actions only 5. Accessibility Built-In - System handles adaptations automatically

Materials (macOS 14+ / Pre-iOS 26)

// Card with material
.padding(24)
.background(.regularMaterial, in: RoundedRectangle(cornerRadius: 16, style: .continuous))

// Material options (lightest → heaviest):
// .ultraThinMaterial, .thinMaterial, .regularMaterial (default), .thickMaterial, .ultraThickMaterial

Liquid Glass API (iOS 26+ / macOS Tahoe)

// Basic
Button("Action") { }.glassEffect()

// Variants
.glassEffect(.regular)   // Standard UI
.glassEffect(.clear)     // Media backgrounds only
.glassEffect(.identity)  // Disabled

// Interactive (adds bounce/shimmer)
Button("Tap") { }.glassEffect(.regular.interactive())

// Multiple glass elements - MUST wrap in container
GlassEffectContainer(spacing: 30) {
    HStack {
        Button("A") { }.glassEffect()
        Button("B") { }.glassEffect()
    }
}

// Button styles
Button("Cancel") { }.buttonStyle(.glass)           // Secondary
Button("Save") { }.buttonStyle(.glassProminent).tint(.blue)  // Primary

Essential Patterns

Card

VStack(alignment: .leading, spacing: 12) {
    HStack {
        ZStack {
            Circle().fill(color.opacity(0.15)).frame(width: 36, height: 36)
            Image(systemName: icon).foregroundStyle(color)
        }
        Spacer()
    }
    Text(value).font(.system(size: 28, weight: .bold, design: .rounded))
    Text(label).font(.caption).foregroundStyle(.secondary)
}
.padding(20)
.background(.regularMaterial, in: RoundedRectangle(cornerRadius: 16, style: .continuous))

Row with Hover

HStack { content }
.padding(16)
.background(isHovering ? Color.primary.opacity(0.04) : .clear)
.background(.quaternary.opacity(0.5), in: RoundedRectangle(cornerRadius: 12, style: .continuous))
.onHover { withAnimation(.easeInOut(duration: 0.15)) { isHovering = $0 } }

Badge

HStack(spacing: 8) {
    Circle().fill(isActive ? .green : .orange).frame(width: 8, height: 8)
    Text(status).font(.caption).fontWeight(.medium)
}
.padding(.horizontal, 12).padding(.vertical, 8)
.background(.regularMaterial, in: Capsule())

Icon with Tinted Background

ZStack {
    Circle().fill(color.opacity(0.15)).frame(width: 32, height: 32)
    Image(systemName: icon).font(.system(size: 14, weight: .semibold)).foregroundStyle(color)
}

Shapes

// Always use .continuous
RoundedRectangle(cornerRadius: 16, style: .continuous)  // Cards
RoundedRectangle(cornerRadius: 12, style: .continuous)  // Rows
RoundedRectangle(cornerRadius: 8, style: .continuous)   // Small elements
Capsule()  // Pills, badges
Circle()   // Icons

Colors

// Semantic foreground
.foregroundStyle(.primary)    // Main content
.foregroundStyle(.secondary)  // Subtitles
.foregroundStyle(.tertiary)   // Timestamps

// Backgrounds
.background(.quaternary)
.background(.quaternary.opacity(0.5))

// Accent meanings
Color.blue    // Primary actions, selection
Color.green   // Success, active
Color.orange  // Warning, loading
Color.red     // Destructive, error
Color.purple  // Premium, AI
Color.cyan    // Security

// Tinted backgrounds: always 15% opacity
.fill(color.opacity(0.15))

Typography

.font(.largeTitle).fontWeight(.bold)      // Page titles
.font(.headline).fontWeight(.semibold)    // Section headers
.font(.subheadline).fontWeight(.medium)   // Row titles
.font(.body)                               // Content (17pt default)
.font(.caption)                            // Metadata
.font(.caption2)                           // Timestamps
.font(.system(size: 28, weight: .bold, design: .rounded))  // Stats

Rules: Min 11pt. Avoid Ultralight/Thin/Light. Use system fonts for Dynamic Type.

Spacing (8pt Grid)

// Standard values: 4, 8, 12, 16, 20, 24, 32, 40, 48

.padding(24)                    // Cards
.padding(16)                    // Rows
.padding(.horizontal, 12).padding(.vertical, 8)  // Badges

// Rule: external spacing ≥ internal spacing
VStack(spacing: 24) { CardView().padding(20) }  // Correct

SF Symbols

// Preferred: hierarchical for depth
Image(systemName: icon).symbolRenderingMode(.hierarchical).foregroundStyle(color)

// Match weight to nearby text
Image(systemName: "gear").font(.system(size: 14, weight: .semibold))

Hit Targets

// MINIMUM: 44pt × 44pt
Button { } label: { Image(systemName: "gear") }
    .frame(minWidth: 44, minHeight: 44)

Animations

// Hover
.onHover { withAnimation(.easeInOut(duration: 0.15)) { isHovering = $0 } }

// Spring
withAnimation(.spring(response: 0.3)) { }
withAnimation(.bouncy) { }

// Entry
.opacity(appeared ? 1 : 0).offset(y: appeared ? 0 : 10)
.onAppear { withAnimation(.spring(response: 0.5, dampingFraction: 0.8)) { appeared = true } }

Do's and Don'ts

DO:

  • Use .regularMaterial for cards/toolbars
  • Use .continuous on ALL rounded rectangles
  • Use 15% opacity for icon backgrounds
  • Wrap multiple glass in GlassEffectContainer
  • Use 44pt minimum hit targets
  • Use 8pt grid spacing
  • Use SF Symbols with .hierarchical

DON'T:

  • Apply glass to content (lists, tables)
  • Stack glass on glass without container
  • Use sharp corners
  • Go below 11pt text
  • Create touch targets < 44pt
  • Use full-color images on glass

Accessibility

System handles automatically:

  • Reduce Transparency → opaquer glass
  • Increase Contrast → visible borders
  • Reduce Motion → no bouncy effects
  • Dynamic Type → text scales

Manual override if needed:

@Environment(\.accessibilityReduceTransparency) var reduceTransparency
.glassEffect(reduceTransparency ? .identity : .regular)

References

For detailed patterns and examples, see:

  • references/components.md - Full component implementations
  • references/apple-hig.md - Complete Apple HIG guidelines

Related skills

How it compares

Pick liquid-glass for native SwiftUI Liquid Glass on Apple platforms rather than CSS glassmorphism skills aimed at web frontends.

FAQ

What platforms does liquid-glass target?

liquid-glass targets native SwiftUI apps on iOS 26+ and macOS Tahoe for the Liquid Glass API, with materials guidance for macOS 14+ and pre-iOS 26 fallbacks documented in the SKILL.md.

Where should Liquid Glass effects go in SwiftUI?

liquid-glass enforces Apple's rule that glass belongs on navigation and controls floating above content, never on content itself. Multiple glass elements must share a GlassEffectContainer to avoid stacked-glass clutter.

How do I install liquid-glass for coding agents?

Run npx skills add casper-studios/casper-marketplace --skill liquid-glass. Agents load HIG patterns for glassEffect modifiers, button styles, spacing, and accessibility when building SwiftUI interfaces.

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.