Kotlin Multiplatform Jetpack Compose Multi Platform
GitHub Release Maven Central GitHub Stars License
JetCo is a ready-to-go Compose library building awesome UI components for both Android and KMP (Kotlin Multiplatform). π‘
β¨ Beautiful β’ β‘ Fast β’ π Cross-Platform β’ π¨ Customizable
Your ultimate Open-Source partner for crafting visually stunning, interactive, and efficient UI components across multiple platforms including Android, iOS, JVM, JS, and WASM. Designed specifically for Jetpack Compose enthusiasts, JetCo is here to make your life easier, your apps prettier, and your users happier. π
π§ KMP Documentation Pipeline: Full Kotlin Multiplatform documentation is currently in development and will be live soon! For now, KMP projects work identically to Android projects with the same component functionality and API. The only differences are the Gradle implementation and import statements shown below. Stay tuned! π
graph TB
A("JetCo Root Repository") --> B("JetCoKMP")
A --> C("jetco-android")
A --> D("assets")
A --> E("LICENSE & README")
B --> B1("composeApp")
B --> B2("jetco - KMP Library")
B --> B3("iosApp")
B --> B4("gradle")
B1 --> B1a("androidMain")
B1 --> B1b("commonMain")
B1 --> B1c("iosMain")
B1 --> B1d("jvmMain")
B1 --> B1e("jsMain")
B1 --> B1f("wasmJsMain")
B2 --> B2a("commonMain")
B2 --> B2b("androidMain")
B2 --> B2c("iosMain")
B2 --> B2d("jvmMain")
B2 --> B2e("Tests")
B2a --> B2a1("Charts")
B2a --> B2a2("Cards")
B2a --> B2a3("Steppers")
B2a --> B2a4("Controls")
C --> C1("JetCoLibrary")
C1 --> C1a("app")
C1 --> C1b("jetco/ui")
C1 --> C1c("assets/images")
C1 --> C1d("gradle & build")
C1b --> C1b1("Charts")
C1b --> C1b2("Cards")
C1b --> C1b3("Steppers")
C1b --> C1b4("Controls")
D --> D1("images")
%% Styling with light blue theme, blue borders, and increased spacing
classDef default fill:#E3F2FD,stroke:#1976D2,stroke-width:2px,color:#000000,rx:15,ry:15
classDef rootStyle fill:#BBDEFB,stroke:#0D47A1,stroke-width:3px,color:#000000,rx:15,ry:15
classDef kmpStyle fill:#E1F5FE,stroke:#0277BD,stroke-width:2px,color:#000000,rx:15,ry:15
classDef androidStyle fill:#E8F5E8,stroke:#2E7D32,stroke-width:2px,color:#000000,rx:15,ry:15
classDef libraryStyle fill:#FFF3E0,stroke:#E65100,stroke-width:2px,color:#000000,rx:15,ry:15
classDef componentStyle fill:#F3E5F5,stroke:#6A1B9A,stroke-width:2px,color:#000000,rx:15,ry:15
class A rootStyle
class B,B1,B2,B3,B4 kmpStyle
class C,C1,C1a,C1c,C1d androidStyle
class B2a,B2b,B2c,B2d,C1b libraryStyle
class B2a1,B2a2,B2a3,B2a4,C1b1,C1b2,C1b3,C1b4 componentStyle
π₯§ Pie Chart
Interactive data visualization Column Bar Chart
π Column Bar Chart
Beautiful data bars Extended Column Bar Chart
π₯ Extended Bar Chart
Advanced features Group Column Bar Chart
π€ Group Bar Chart
Multi-dataset comparison
ποΈ Ticket Card
Custom card design Vertical Stepper
β¬οΈ Vertical Stepper
Timeline progression Horizontal Stepper
β‘οΈ Horizontal Stepper
Step-by-step progress Switch Button
π Switch Button
Animated interactions
π Compact Horizontal Stepper
Space-efficient progress Curved Card
π Curved Card
Elegant curved corners Curved Card
π¨ Curved Card
Creative card layouts
Write once, run everywhere! JetCo supports all major platforms through Kotlin Multiplatform
Click to expand Android setup
Add this to your module's build.gradle.kts:
dependencies {
implementation("com.developerstring.jetco:ui:1.0.0-beta.7")
}π₯ Recommended - KMP Setup (Click to expand)
Add this to your commonMain dependencies in build.gradle.kts:
commonMain.dependencies {
implementation("com.developerstring.jetco-kmp:ui:1.0.0-beta.8")
}β‘ Quick Start: Use the same component examples below for both Android Native and Kotlin Multiplatform! All functionality is identical.
Full configuration example
kotlin {
// Android target
androidTarget {
compilations.all {
kotlinOptions {
jvmTarget = "1.8"
}
}
}
// iOS targets
listOf(
iosX64(),
iosArm64(),
iosSimulatorArm64()
).forEach { iosTarget ->
iosTarget.binaries.framework {
baseName = "ComposeApp"
isStatic = true
}
}
// Desktop target
jvm("desktop")
// Web target
js(IR) {
moduleName = "composeApp"
browser {
commonWebpackConfig {
outputFileName = "composeApp.js"
}
}
binaries.executable()
}
// WASM target
wasmJs {
moduleName = "composeApp"
browser {
commonWebpackConfig {
outputFileName = "composeApp.js"
}
}
binaries.executable()
}
sourceSets {
commonMain.dependencies {
implementation(compose.runtime)
implementation(compose.foundation)
implementation(compose.material3)
implementation(compose.ui)
implementation(compose.components.resources)
// π¨ Add JetCo KMP
implementation("com.developerstring.jetco-kmp:ui:1.0.0-beta.8")
}
androidMain.dependencies {
implementation(libs.compose.ui.tooling.preview)
implementation(libs.androidx.activity.compose)
}
iosMain.dependencies {
// iOS specific dependencies
}
desktopMain.dependencies {
implementation(compose.desktop.currentOs)
}
}
}| Component | Description | Platforms | Status |
|---|---|---|---|
| π₯§ Pie Chart | Interactive pie charts with customizable slices and animations | All Platforms | β |
| π Column Bar Chart | Beautiful vertical bar charts with smooth transitions | All Platforms | β |
| π₯ Extended Bar Chart | Advanced bar charts with multiple datasets and styling | All Platforms | β |
| π€ Group Bar Chart | Side-by-side comparison charts for multi-series data | All Platforms | β |
| Component | Description | Platforms | Status |
|---|---|---|---|
| ποΈ Ticket Card | Cinema-style cards with cutout design and dashed dividers | All Platforms | β |
| Component | Description | Platforms | Status |
|---|---|---|---|
| β¬οΈ Vertical Stepper | Timeline-style stepper with images and descriptions | All Platforms | β |
| β‘οΈ Horizontal Stepper | Clean horizontal progress indicator | All Platforms | β |
| β‘ Compact Stepper | Minimal icon-only stepper for mobile interfaces | All Platforms | β |
| Component | Description | Platforms | Status |
|---|---|---|---|
| π Switch Button | Animated toggle switch with custom styling | All Platforms | β |
π§ Coming Soon: Date Pickers, Floating Action Buttons, Bottom Sheets, and more!
π Import statements for different setups
// π For KMP projects (Recommended) import com.developerstring.jetco_kmp.charts.piechart.PieChart import com.developerstring.jetco_kmp.cards.ticket.TicketCard import com.developerstring.jetco_kmp.cards.curved.CurvedCard import com.developerstring.jetco_kmp.components.stepper.VerticalStepper import com.developerstring.jetco_kmp.components.button.SwitchButton // π€ For Android-only projects import com.developerstring.jetco.ui.charts.piechart.PieChart import com.developerstring.jetco.ui.cards.ticket.TicketCard import com.developerstring.jetco.ui.cards.curved.CurvedCard import com.developerstring.jetco.ui.components.stepper.VerticalStepper import com.developerstring.jetco.ui.components.button.SwitchButton
π‘ Note: All components have identical functionality and API across both Android and KMP versions. Only the import path and Gradle dependency differ!
Pie Chart
@Composable fun MyAwesomeScreen() { // π¨ Use any JetCo component across all platforms! PieChart( data = listOf( PieChartData( label = "Android", value = 40f, color = Color(0xFF3DDC84) ), PieChartData( label = "iOS", value = 30f, color = Color(0xFF007AFF) ), PieChartData( label = "Web", value = 20f, color = Color(0xFFFF6B35) ), PieChartData( label = "Desktop", value = 10f, color = Color(0xFFFFD23F) ) ), modifier = Modifier .size(300.dp) .padding(16.dp), animationDuration = 1000, showLabels = true, centerText = "JetCo" ) }
Ticket Card
@Composable fun TicketExample() { TicketCard( modifier = Modifier .fillMaxWidth() .padding(16.dp), backgroundColor = Color(0xFF6200EE), cornerRadius = 16.dp, cutoutRadius = 24.dp ) { Column( modifier = Modifier.padding(20.dp), horizontalAlignment = Alignment.CenterHorizontally ) { Text( text = "π¬ Movie Ticket", style = MaterialTheme.typography.headlineSmall, color = Color.White ) Spacer(modifier = Modifier.height(8.dp)) Text( text = "JetCo: The Movie", style = MaterialTheme.typography.bodyLarge, color = Color.White.copy(alpha = 0.8f) ) } } }
Curved Card
@Composable fun CurvedCardExample() { CurvedCard( modifier = Modifier .fillMaxWidth() .padding(16.dp), backgroundColor = Color(0xFF673AB7), cornerRadius = 20.dp, curveHeight = 40.dp, curvePosition = CurvePosition.TOP_CENTER, shadowElevation = 8.dp ) { Column( modifier = Modifier.padding(24.dp), horizontalAlignment = Alignment.CenterHorizontally ) { Icon( imageVector = Icons.Default.Star, contentDescription = "Premium", tint = Color(0xFFFFD700), modifier = Modifier.size(48.dp) ) Spacer(modifier = Modifier.height(16.dp)) Text( text = "Premium Membership", style = MaterialTheme.typography.headlineSmall, color = Color.White, textAlign = TextAlign.Center ) Spacer(modifier = Modifier.height(8.dp)) Text( text = "Unlock exclusive features with our curved card design", style = MaterialTheme.typography.bodyMedium, color = Color.White.copy(alpha = 0.9f), textAlign = TextAlign.Center ) } } }
Animated Switch Button
@Composable fun SwitchExample() { var isChecked by remember { mutableStateOf(false) } SwitchButton( checked = isChecked, onCheckedChange = { isChecked = it }, modifier = Modifier.padding(16.dp), colors = SwitchButtonColors( checkedColor = Color(0xFF4CAF50), uncheckedColor = Color(0xFFE0E0E0), thumbColor = Color.White ), animationDuration = 300 ) }
π₯ Coming Soon: Dedicated KMP documentation with platform-specific examples and deployment guides!
| Feature | Description | Benefit |
|---|---|---|
| π Kotlin Multiplatform | One codebase for Android, iOS, Web, Desktop, and WASM | 50% less development time |
| ποΈ Modern UI Components | Charts, cards, steppers with beautiful animations | Professional look out-of-the-box |
| β‘ Compose Integration | Seamless with Jetpack Compose and Compose Multiplatform | Native performance everywhere |
| π οΈ Infinite Customization | Theme every pixel to match your brand identity | Unique, branded experiences |
| π Performance Optimized | Lightweight, efficient, 60fps smooth animations | Happy users, better retention |
| π± Platform-Specific | Tailored experiences respecting platform conventions | Feels native on every platform |
| π Future-Ready | Built for the next generation of Compose | Investment protection |
| π Open Source | MIT licensed, community-driven development | Free forever, transparent |
π Be part of something amazing!
Star Us Fork Report Bug DiscussionsWe're always looking for passionate developers to join our mission of making beautiful UI accessible to everyone.
Check out our Contributing Guide and Good First Issues!
If JetCo helped you build something amazing, consider:
β Starring the repo β’ π¦ Sharing on Twitter β’ πΌ Sharing on LinkedIn
Made with β€οΈ by the JetCo team