A Jetpack Compose library for glassmorphism UI — translucent surfaces, gradient borders, configurable blur, and ready-made components (GlassCard, GlassButton, GlassNavBar, GlassDialog) with Material 3 support.
Report a bug · Contributing · Security
- Glass components —
GlassCard,GlassButton,GlassNavBar,GlassDialog - Customizable effects — blur radius, fill opacity, gradient borders
- Material 3 — dynamic color, M3 shapes and color roles
- Global theme —
GlassTheme+GlassConfigvia composition locals - Dialog backdrop blur — window blur on Android 12+ (API 31+)
- Sample app — live visual editor over photo backgrounds
- Preview
- Requirements
- Installation
- Quick start
- Usage examples
- Components
- Blur strategy
- Sample app
- Modules
- Publishing
- Documentation
- Contributing
- License
- Author
Sample app with different background presets and live glass controls:
| Theme 1 | Theme 2 | Theme 3 |
|---|---|---|
![]() |
![]() |
![]() |
| Requirement | Version |
|---|---|
| Android API | 26+ |
| Jetpack Compose | BOM 2024.09.00 (see gradle/libs.versions.toml) |
| Kotlin | 2.2.10 |
| Dialog window blur | API 31+ (fallback on older devices) |
Published on Maven Central. mavenCentral() is enough — no extra repository.
| Group | io.github.saadkhalidkhan |
| Artifact | compose-glasskit |
| Version | 1.0.0 (VERSION_NAME in gradle.properties) |
// settings.gradle.kts
dependencyResolutionManagement {
repositories {
google()
mavenCentral()
}
}// app/build.gradle.kts
dependencies {
implementation("io.github.saadkhalidkhan:compose-glasskit:1.0.0")
}Check Maven Central or search.maven.org for newer versions.
JitPack uses GitHub coordinates (com.github.saadkhalidkhan), not the Maven Central group (io.github.saadkhalidkhan).
- Tag a release on GitHub (e.g.
v1.0.0). - Build it on JitPack.
- Add the repository and dependency:
// settings.gradle.kts
dependencyResolutionManagement {
repositories {
google()
mavenCentral()
maven { url = uri("https://jitpack.io") }
}
}// app/build.gradle.kts
dependencies {
implementation("com.github.saadkhalidkhan:ComposeGlassKitTheme:v1.0.0")
}If resolution fails, try …:glasskit:v1.0.0 or copy the Gradle line from the JitPack build page for your tag.
// settings.gradle.kts
include(":glasskit")
// your-app/build.gradle.kts
dependencies {
implementation(project(":glasskit"))
}import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.Text
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import com.saadkhan.composeglasskit.components.GlassCard
import com.saadkhan.composeglasskit.theme.GlassConfig
import com.saadkhan.composeglasskit.theme.GlassTheme
@Composable
fun GlassHelloScreen() {
// Use a full-screen background (image/gradient) behind this content.
GlassTheme(
config = GlassConfig(
blurRadius = 16.dp,
containerAlpha = 0.15f,
borderAlpha = 0.25f,
),
) {
GlassCard(modifier = Modifier.fillMaxWidth().padding(16.dp)) {
Text(
text = "Hello, glass.",
modifier = Modifier.padding(24.dp),
)
}
}
}More recipes (buttons, nav bar, dialog, custom modifier):
// Glass button
GlassButton(onClick = { }, shape = RoundedCornerShape(16.dp)) {
Text("Open")
}
// Glass dialog (API 31+ window blur)
GlassDialog(onDismissRequest = { showDialog = false }) {
Text("Modal content", modifier = Modifier.padding(24.dp))
}| Component | Description |
|---|---|
GlassTheme |
Global GlassConfig provider |
GlassConfig |
Blur, alpha, border defaults |
Modifier.glassEffect() |
Core glass surface modifier |
GlassCard |
Card container |
GlassButton |
Clickable button |
GlassNavBar |
Glass NavigationBar |
GlassDialog |
Modal with backdrop blur |
Full API reference: docs/API.md
ComposeGlassKit uses layer blur for surfaces and window blur for dialogs on API 31+.
Read limitations and layout tips: docs/BLUR.md
Run ComposeGlassKit Sample (:sample) to tweak blur and opacity over Unsplash backgrounds:
./gradlew :sample:assembleDebug
./gradlew :sample:installDebug| Module | Description |
|---|---|
:glasskit |
Publishable Android library |
:sample |
Interactive showcase app |
For maintainers. Copy local.properties.example to local.properties and set Maven Central token + GPG signing keys (see Vanniktech plugin docs).
# Install to local ~/.m2
./gradlew :glasskit:publishToMavenLocal
# Upload to Maven Central (then publish the deployment on central.sonatype.com)
./gradlew :glasskit:publishToMavenCentralGitHub release tags (v*) trigger the release workflow (APK/AAR artifacts). CI runs on every push via Android CI.
| Doc | Contents |
|---|---|
| docs/API.md | Parameters and components |
| docs/USAGE.md | Copy-paste examples |
| docs/BLUR.md | Blur behavior and performance |
| docs/media/README.md | Screenshots & GIF guide |
| CHANGELOG.md | Version history |
Contributions are welcome. Please read CONTRIBUTING.md and our Code of Conduct before opening an issue or pull request.
- Open an issue to discuss larger changes.
- Fork the repo and create a branch from
master. - Run
./gradlew :glasskit:test :glasskit:assembleRelease :sample:assembleDebugbefore opening a PR. - Open a pull request with a clear description and media for UI changes.
This project is licensed under the Apache License 2.0 — see LICENSE.
Copyright 2026 Saad Khan
Saad Khan — GitHub · Medium · ranasaad0799@gmail.com
If this library helps you, consider starring the repo.



