Skip to content
Back to skills

kmp-glassmorphism-ui

ASecurity

Implements a production-grade Glassmorphism design system for Kotlin Multiplatform (KMP) Compose Multiplatform projects. Use when the user asks for glass UI, frosted glass effects, glassmorphism theme, translucent/transparent UI components, liquid/blob animated backgrounds, or premium modern dark-mode design in a Compose Desktop, Android, or multiplatform app.

  • 5 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added May 26, 2026
designkotlin

Works with

  • cli

Security analysis

A100/100

Pro scans all 4 files and shows the line behind each finding

Scanned May 27, 2026

npx -y skills add Aks-4125/kmp-glassmorphism-skill --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of kmp-glassmorphism-ui?

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

Security grade badge for kmp-glassmorphism-ui
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/aks-4125-kmp-glassmorphism-ui/badge)](https://www.skillsdirectory.com/skills/aks-4125-kmp-glassmorphism-ui)

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: kmp-glassmorphism-ui
description: >
  Implements a production-grade Glassmorphism design system for Kotlin Multiplatform (KMP)
  Compose Multiplatform projects. Use when the user asks for glass UI, frosted glass effects,
  glassmorphism theme, translucent/transparent UI components, liquid/blob animated backgrounds,
  or premium modern dark-mode design in a Compose Desktop, Android, or multiplatform app.
version: 1.0.0
---

# KMP Glassmorphism UI Design System Skill

## Overview

Glassmorphism is a modern UI design approach characterized by:
- **Semi-transparent backgrounds** with gradient opacity
- **Frosted-glass borders** using gradient strokes
- **Background blur** (where supported by the rendering engine)
- **Layered depth** with multiple translucent surfaces over animated backgrounds
- **Vibrant accent colors** that bleed through transparent layers

This skill provides a complete, production-tested design system for **Compose Multiplatform** (Desktop JVM + Android + iOS + WASM). All components use `androidx.compose.material3.MaterialTheme` for theming and work with both dark and light modes.

**Technology requirements:**
- Kotlin 1.9+
- Compose Multiplatform 1.5.0+
- Material3 (`compose.material3`)
- Material Icons Extended (`compose.materialIconsExtended`)

---

## Step 1: Add the Theme System

Copy `assets/theme/GlassTheme.kt` into your project's theme package.

The theme provides:
- **Dark colors**: Deep navy background (`#0A0C14`), dark surface (`#161922`), white text
- **Light colors**: Soft gray-blue background (`#F0F2F5`), white surface, dark text
- **Accent colors**: Purple primary (`#6C63FF`), Cyan secondary (`#00E5FF`), Red error (`#FF5252`), Camo green success (`#507652`)
- **Typography**: SansSerif family with Bold headlines, Medium subheads, Normal body, SemiBold labels

Wrap your app root composable with `GlassTheme`:

`kotlin
GlassTheme(darkTheme = true) {
    // Your app content
}
`

### Customizing Colors

Modify the color constants at the top of `GlassTheme.kt`:

`kotlin
val GlassAccent = Color(0xFF6C63FF)         // Primary brand color
val GlassAccentSecondary = Color(0xFF00E5FF) // Secondary/accent
`

All glass components read colors from `MaterialTheme.colorScheme`, so changing the theme automatically updates every component.

---

## Step 2: Add the Background Layer

Copy `assets/background/LiquidBackground.kt` into your components package.

`LiquidBackground` creates an immersive backdrop with animated radial gradient blobs. Place it as the **outermost container** beneath all glass surfaces.

`kotlin
LiquidBackground {
    GlassSurface { /* content */ }
}
`

### Configuration

| Parameter | Type | Default | Description |
|---|---|---|---|
| `enableTransparentBackground` | `Boolean` | `false` | Uses `Color.Transparent` for window-level transparency |
| `enableAnimation` | `Boolean` | `false` | Blobs drift using `InfiniteTransition`. Increases GPU usage |

Default creates 4 blobs: Purple 400dp top-left, Cyan 350dp center-right, Red 300dp bottom-left, Purple 500dp bottom-right.

---

## Step 3: Primitive Components

### GlassSurface
Copy `assets/primitives/GlassSurface.kt`. Foundation component. Linear gradient background at configurable alpha + gradient border stroke.

`kotlin
GlassSurface(modifier = Modifier.fillMaxWidth(), shape = RoundedCornerShape(16.dp), alpha = 0.5f) {
    Text("Content on glass")
}
`

### GlassCard
Copy `assets/primitives/GlassCard.kt`. Premium card with radial white glow + 3-stop shimmer border.

`kotlin
GlassCard(modifier = Modifier.fillMaxWidth(), shape = RoundedCornerShape(24.dp)) {
    Column(Modifier.padding(24.dp)) { Text("Premium card") }
}
`

---

## Step 4: Input Components

### GlassTextField
Copy `assets/inputs/GlassTextField.kt`. Text input built on GlassSurface with BasicTextField, leading/trailing icon slots.

`kotlin
GlassTextField(value = text, onValueChange = { text = it }, placeholder = "Type here...",
    leadingIcon = Icons.Default.Search, singleLine = true)
`

### GlassButton
Copy `assets/inputs/GlassButton.kt`. Pill-shaped button on GlassCard with hover gradient (30% -> 80% alpha).

`kotlin
GlassButton(onClick = { }, enabled = true) {
    Row(verticalAlignment = Alignment.CenterVertically) {
        Icon(Icons.Default.Send, contentDescription = null)
        Spacer(Modifier.width(8.dp))
        Text("Send")
    }
}
`

---

## Step 5: Navigation Components

### GlassDropdown
Copy `assets/navigation/GlassDropdown.kt`. String-based dropdown selector.

### GlassRichDropdown<T>
Copy `assets/navigation/GlassRichDropdown.kt`. Generic type-safe dropdown with custom trigger/item slots.

### GlassSidebar
Copy `assets/navigation/GlassSidebar.kt`. Translucent sidebar panel with slot-based content.

`kotlin
GlassSidebar(modifier = Modifier.width(260.dp), alpha = 0.2f) { /* content */ }
`

---

## Step 6: Feedback Components

### GlassChatBubble
Copy `assets/feedback/GlassChatBubble.kt`. Chat bubble with asymmetric corners and SelectionContainer.

`kotlin
GlassChatBubble(isUser = true,
    userIcon = { Icon(Icons.Default.Person, "User", tint = onSurface) },
    aiIcon = { Icon(Icons.Default.SmartToy, "AI", tint = onSurface) }
) { Text("Hello!") }
`

---

## Step 7: Window Transparency (Desktop)

See `references/transparency-guide.md`. Quick setup:

`kotlin
fun main() = application {
    Window(onCloseRequest = ::exitApplication, transparent = true, undecorated = true) {
        GlassTheme(darkTheme = true) {
            Surface(modifier = Modifier.fillMaxSize(),
                color = MaterialTheme.colorScheme.background.copy(alpha = 0.90f),
                shape = RoundedCornerShape(16.dp)) {
                LiquidBackground(enableTransparentBackground = true) { /* content */ }
            }
        }
    }
}
`

---

## Decision Tree

1. **Themed background** -> `LiquidBackground` + `GlassTheme`
2. **Container/panel** -> Generic: `GlassSurface` | Premium: `GlassCard` | Sidebar: `GlassSidebar`
3. **Input** -> Text: `GlassTextField` | Action: `GlassButton`
4. **Selection** -> Simple: `GlassDropdown` | Complex: `GlassRichDropdown<T>`
5. **Chat UI** -> `GlassChatBubble` + `GlassTextField` + `GlassButton`
6. **Transparent window** -> `references/transparency-guide.md`
7. **Animated background** -> `LiquidBackground(enableAnimation = true)`

## Alpha Guidelines

| Use Case | Alpha |
|---|---|
| Main content surfaces | `0.5f` |
| Sidebar panels | `0.2f` |
| Modal dialogs | `0.95f` |
| Dropdown menus | `0.9f - 0.95f` |
| Hover state backgrounds | `0.8f` |

Files in this skill

  • SKILL.md6.4 KB
  • references/compose-version-compat.md2.5 KB
  • references/design-tokens.md3.7 KB
  • references/transparency-guide.md6.7 KB

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.