liquid-glass
iOS 26 Liquid Glass design system for SwiftUI. Implements Apple's glassmorphism material effects, depth-based layering, and adaptive tinting. Follows Apple Human Interface Guidelines for glass materials. Use when: (1) Building iOS 26+ SwiftUI interfaces, (2) Implementing glassmorphism effects, (3) Creating translucent/frosted UI elements, (4) Designing with Apple's Liquid Glass aesthetic, (5) User mentions liquid glass, glassmorphism, or frosted glass UI.
Best use case
liquid-glass is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
iOS 26 Liquid Glass design system for SwiftUI. Implements Apple's glassmorphism material effects, depth-based layering, and adaptive tinting. Follows Apple Human Interface Guidelines for glass materials. Use when: (1) Building iOS 26+ SwiftUI interfaces, (2) Implementing glassmorphism effects, (3) Creating translucent/frosted UI elements, (4) Designing with Apple's Liquid Glass aesthetic, (5) User mentions liquid glass, glassmorphism, or frosted glass UI.
Teams using liquid-glass should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/liquid-glass/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How liquid-glass Compares
| Feature / Agent | liquid-glass | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
iOS 26 Liquid Glass design system for SwiftUI. Implements Apple's glassmorphism material effects, depth-based layering, and adaptive tinting. Follows Apple Human Interface Guidelines for glass materials. Use when: (1) Building iOS 26+ SwiftUI interfaces, (2) Implementing glassmorphism effects, (3) Creating translucent/frosted UI elements, (4) Designing with Apple's Liquid Glass aesthetic, (5) User mentions liquid glass, glassmorphism, or frosted glass UI.
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# Liquid Glass — iOS 26 SwiftUI Design System
## Overview
Liquid Glass is Apple's design language introduced in iOS 26 (2025). It features
translucent, depth-aware materials that react to content behind them. This skill
provides patterns for implementing Liquid Glass effects in SwiftUI.
## Core Principles
1. **Translucency over opacity** — Elements reveal the content beneath them
2. **Depth through layering** — Multiple glass layers create visual hierarchy
3. **Adaptive tinting** — Glass adapts color to surrounding content
4. **Motion and physics** — Elements respond to scroll, tilt, and interaction
5. **Semantic materials** — Use Apple's material types, not hardcoded colors
## SwiftUI Materials
### Built-in Materials (iOS 15+, enhanced iOS 26)
```swift
// Thin material — barely visible, subtle blur
.background(.thinMaterial)
// Regular material — standard glass effect
.background(.regularMaterial)
// Thick material — more opaque, stronger effect
.background(.thickMaterial)
// Ultra-thin material — maximum transparency
.background(.ultraThinMaterial)
// Ultra-thick material — nearly opaque
.background(.ultraThickMaterial)
// Bar material — for navigation/tab bars
.background(.bar)
```
### Liquid Glass Modifier (iOS 26+)
```swift
// New in iOS 26: native liquid glass effect
.glassEffect(.regular)
// With tinting
.glassEffect(.regular.tint(.blue))
// Interactive glass (responds to hover/press)
.glassEffect(.regular.interactive())
```
## Component Patterns
### Glass Card
```swift
struct GlassCard<Content: View>: View {
let content: () -> Content
var body: some View {
content()
.padding(20)
.background(.ultraThinMaterial)
.clipShape(RoundedRectangle(cornerRadius: 20, style: .continuous))
.shadow(color: .black.opacity(0.1), radius: 10, y: 5)
.overlay(
RoundedRectangle(cornerRadius: 20, style: .continuous)
.stroke(.white.opacity(0.2), lineWidth: 0.5)
)
}
}
// Usage
GlassCard {
VStack(alignment: .leading, spacing: 8) {
Text("Title").font(.headline)
Text("Subtitle").font(.subheadline).foregroundStyle(.secondary)
}
}
```
### Glass Navigation Bar
```swift
struct GlassNavBar: View {
let title: String
var body: some View {
HStack {
Text(title)
.font(.largeTitle.bold())
Spacer()
}
.padding(.horizontal, 20)
.padding(.vertical, 12)
.background(.bar)
.overlay(alignment: .bottom) {
Divider().opacity(0.3)
}
}
}
```
### Glass Tab Bar
```swift
struct GlassTabBar: View {
@Binding var selection: Int
let items: [(icon: String, label: String)]
var body: some View {
HStack {
ForEach(items.indices, id: \.self) { index in
Button {
withAnimation(.spring(response: 0.3)) {
selection = index
}
} label: {
VStack(spacing: 4) {
Image(systemName: items[index].icon)
.font(.system(size: 20))
Text(items[index].label)
.font(.caption2)
}
.foregroundStyle(selection == index ? .primary : .secondary)
.frame(maxWidth: .infinity)
}
}
}
.padding(.vertical, 8)
.background(.ultraThinMaterial)
.clipShape(RoundedRectangle(cornerRadius: 24, style: .continuous))
.padding(.horizontal, 20)
}
}
```
### Glass Button
```swift
struct GlassButton: View {
let title: String
let icon: String?
let action: () -> Void
var body: some View {
Button(action: action) {
HStack(spacing: 8) {
if let icon {
Image(systemName: icon)
}
Text(title).fontWeight(.medium)
}
.padding(.horizontal, 20)
.padding(.vertical, 12)
.background(.ultraThinMaterial)
.clipShape(Capsule())
.overlay(Capsule().stroke(.white.opacity(0.2), lineWidth: 0.5))
}
}
}
```
### Glass Sheet / Modal
```swift
struct GlassSheet<Content: View>: View {
let content: () -> Content
var body: some View {
content()
.frame(maxWidth: .infinity)
.padding(24)
.background(.regularMaterial)
.clipShape(RoundedRectangle(cornerRadius: 32, style: .continuous))
.overlay(
RoundedRectangle(cornerRadius: 32, style: .continuous)
.stroke(.white.opacity(0.15), lineWidth: 0.5)
)
.shadow(color: .black.opacity(0.2), radius: 20, y: 10)
.padding(16)
}
}
```
## Color & Tinting
### Adaptive Tinting
```swift
// Glass that picks up color from content beneath
.background(.ultraThinMaterial)
.environment(\.colorScheme, .dark) // Force dark glass
// Tinted glass
ZStack {
Color.blue.opacity(0.15)
content
}
.background(.ultraThinMaterial)
```
### Vibrancy
```swift
// Text that adapts to material behind it
Text("Label")
.foregroundStyle(.primary) // Adapts to material
Text("Secondary")
.foregroundStyle(.secondary) // Reduced prominence
// Use semantic colors — they adapt to materials
Text("Vibrant")
.foregroundStyle(.primary)
.environment(\.backgroundMaterial, .ultraThinMaterial)
```
## Layout Patterns
### Depth Layering
```
+-----------------------------------------+
| Background (image, gradient, video) | Layer 0: Content
+-----------------------------------------+
| Ultra-thin material overlay | Layer 1: Ambient glass
+-----------------------------------------+
| Regular material cards | Layer 2: Content glass
+-----------------------------------------+
| Thick material controls | Layer 3: Interactive glass
+-----------------------------------------+
| Bar material navigation | Layer 4: Chrome glass
+-----------------------------------------+
```
**Rule**: Each layer up uses a thicker material. Never put thin material on top of thick.
### Scroll-Aware Glass
```swift
struct ScrollGlassHeader: View {
@State private var scrollOffset: CGFloat = 0
var body: some View {
ZStack(alignment: .top) {
ScrollView {
// Content with offset tracking
GeometryReader { geo in
Color.clear.preference(
key: ScrollOffsetKey.self,
value: geo.frame(in: .named("scroll")).minY
)
}
.frame(height: 0)
// Actual content
LazyVStack { /* ... */ }
.padding(.top, 60)
}
.coordinateSpace(name: "scroll")
.onPreferenceChange(ScrollOffsetKey.self) { scrollOffset = $0 }
// Glass header that intensifies on scroll
Text("Title")
.font(.headline)
.frame(maxWidth: .infinity)
.padding()
.background(
scrollOffset < -10
? AnyShapeStyle(.regularMaterial)
: AnyShapeStyle(.clear)
)
.animation(.easeInOut(duration: 0.2), value: scrollOffset < -10)
}
}
}
```
## Best Practices
1. **Never hardcode blur values** — Always use `.material` modifiers
2. **Test in both light and dark mode** — Glass renders differently
3. **Use `.continuous` corner style** — Apple's superellipse, not circular
4. **Keep glass layers to 3 max** — Too many layers reduce readability
5. **Use semantic foreground styles** — `.primary`, `.secondary`, not raw colors
6. **Add subtle borders** — `.white.opacity(0.15-0.25)` with 0.5pt stroke
7. **Shadow behind glass, not on it** — Shadow goes on the container
8. **Test on real devices** — Simulator doesn't perfectly render materialsRelated Skills
workflow
Guide through structured delivery workflow with plan, implement, validate phases
webapp-testing
Toolkit for interacting with and testing local web applications using Playwright. Supports verifying frontend functionality, debugging UI behavior, capturing browser screenshots, and viewing browser logs.
validate
Verify implementation against specifications
ui-ux-pro-max
UI/UX design intelligence. 67 styles, 96 palettes, 57 font pairings, 25 charts, 13 stacks (React, Next.js, Vue, Svelte, Astro, Nuxt, SwiftUI, React Native, Flutter, Tailwind, shadcn/ui, Jetpack Compose). Actions: plan, build, create, design, implement, review, fix, improve, optimize, enhance, refactor, check UI/UX code. Projects: website, landing page, dashboard, admin panel, e-commerce, SaaS, portfolio, blog, mobile app, .html, .tsx, .vue, .svelte. Elements: button, modal, navbar, sidebar, card, table, form, chart. Styles: glassmorphism, claymorphism, minimalism, brutalism, neumorphism, bento grid, dark mode, responsive, skeuomorphism, flat design. Topics: color palette, accessibility, animation, layout, typography, font pairing, spacing, hover, shadow, gradient.
tui-style-guide
TUI style guide for consistent terminal interface design
token-usage
Show Claude Code token usage across sessions — daily, weekly, per-project, and per-session breakdowns. Parses {{HOME_TOOL_DIR}}/projects/**/*.jsonl for consumption data. Use when the user asks about token usage, costs, how many tokens were used, session statistics, or wants a usage report.
tmux-status
Show status of all tmux sessions including dev environments, spawned agents, and running processes
tmux-monitor
Monitor and report status of all tmux sessions including dev environments, spawned agents, and running processes. Uses tmuxwatch for enhanced visibility.
tmux-message
Reliable peer-to-peer message delivery to other Claude Code instances via tmux send-keys. Use as a fallback when claude-peers MCP send_message fails to surface in the receiver's inbox (delivered server-side but receiver never picks it up — observed behaviour). Also use when sending a directive to a known Claude Code TUI session by tmux session name or fuzzy hint, or when injecting a multi-line directive into a peer's prompt and submitting it. Trigger phrases — "claude-peers fallback", "tmux send-keys", "send to peer via tmux", "inject directive", "deliver to nanoclaw/hermes peer", "peer message". Tmux-only — won't reach peers running outside tmux.
test-driven-development
Use when implementing any feature or bugfix, before writing implementation code. Enforces RED-GREEN-REFACTOR cycle with test-first approach.
test-ainb
Run tests for the ainb (agents-in-a-box) Rust workspace via a 5-layer strategy — unit, insta snapshot, mock-plugin compositing, real-plugin spawn, vhs recording. Wraps cargo + insta + vhs into one CLI. Use when Stevie says "/test-ainb", "test ainb", "run ainb tests", "snapshot <component>", "regenerate vhs tapes", or any phrasing about validating ainb test layers. The skill autodetects which ainb-tui worktree the cwd sits in and dispatches to scripts/run.sh.
sync-learnings
Sync user-level agent config changes back to toolkit repository (works for Claude, Codex, Copilot)