Skip to content

Compose Multiplatform UI components for Android, iOS, Desktop, and Web. Unleash limitless creativity.

License

Notifications You must be signed in to change notification settings

belinwu/Adapt

 
 

Repository files navigation

Adapt

badge badge badge badge

Adapt is a Compose-based UI component library that provides you components from various commonly used design systems on different platforms like Material 3 (for Android & Web), Cupertino (for iOS & macOS), and WinUI 3 (for Windows).

Adapt provides a Flutter-like experience where you can mix-and-match UI components between platforms to achieve your desired UI/UX output(s) (e.g. using Cupertino components on Android devices and Material components on Apple devices).

Types of components

Adapt offers the following 2 types of composables/components:

  1. Platform-specific - These look the same on all platforms (e.g. WindowsButton, CupertinoSpinner)
  2. Platform-agnostic - These look native-like on every platform (e.g. AdaptButton, AdaptCircularIndicator).

Platform-agnostic components

Along with Platform-specific components that allow you to write common UI for all platforms, Adapt also provides you with Platform-agnostic components that display native-like components on the current platform you're running.

For example, the following common code:

@Composable
internal fun App() {
    AdaptButton(
        modifier = AdaptModifier(common = Modifier.fillMaxSize().wrapContentSize()),
        onClick = {},
        text = { AdaptText("Click me") }
    )
}

would produce the following results on different platforms 👇

Android (Material) iOS (Cupertino) Windows (WinUI3)

Hence, you can mix and match Platform-specific and agnostic components according to your desired output(s) 🌟

Get Started 🚀

Sonatype Nexus (Snapshots)

Add the following to your shared module's build.gradle.kts:

implementation("io.github.shubhamsinghshubham777:adapt:0.0.1-SNAPSHOT") // Get the latest version from GitHub Releases/Tags

For SNAPSHOT versions

Add the following to your project level settings.gradle.kts:

dependencyResolutionManagement {
    repositories {
        ...
        maven("https://s01.oss.sonatype.org/content/repositories/snapshots/") // Add this
    }
}

Available Components ✅

Name Image Platform-agnostic variant
CupertinoSlider CupertinoSlider AdaptSlider
CupertinoSpinner CupertinoSpinner AdaptCircularIndicator
IOSButton IOSButton AdaptButton
IOSToggle IOSToggle AdaptSwitch
MacOSButton MacOSButton AdaptButton
MacOSSwitch MacOSSwitch AdaptSwitch
WindowsButton WindowsButton AdaptButton
WindowsProgressRing WindowsProgressRing AdaptCircularIndicator
WindowsSlider WindowsSlider AdaptSlider
WindowsToggleSwitch WindowsToggleSwitch AdaptSwitch

Planned Components 🚧

The long term goal of this library is to recreate all components from major design systems like Material, Cupertino, WinUI, etc. to allow developers to seamlessly create multiplatform apps that look, feel, and behave native-like.

Expected upcoming components are: Checkbox, TextField, and Date/Time Pickers. Expected platform support: WASM (JS)

Run Demo/Sample

Demo.mp4

This repository also contains a sample Compose Multiplatform app that showcases the components provided by this library. You can check out this repository and simply run the app, but before you do that, please make sure to:

  • check your system with KDoctor
  • install JDK 17 on your machine
  • add local.properties file to the project root and set a path to Android SDK there
  • run ./gradlew podInstall in the project root

Android

To run the application on android device/emulator:

  • open project in Android Studio and run imported android run configuration

To build the application bundle:

  • run ./gradlew :sample:composeApp:assembleDebug
  • find .apk file in sample/composeApp/build/outputs/apk/debug/composeApp-debug.apk

Desktop

Run the desktop application: ./gradlew :sample:composeApp:run

iOS

To run the application on iPhone device/simulator:

Browser

Run the browser application: ./gradlew :sample:composeApp:jsBrowserDevelopmentRun

About

Compose Multiplatform UI components for Android, iOS, Desktop, and Web. Unleash limitless creativity.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Kotlin 98.3%
  • Other 1.7%