Jetpack Compose for Desktop and Web, a modern UI framework for Kotlin that makes building performant and beautiful user interfaces easy and enjoyable.

Last update: Aug 15, 2022

official project Latest release Latest build

Compose Multiplatform, by JetBrains

Compose Kotlin UI framework port for desktop platforms (macOS, Linux, Windows) and Web, components outside of the core Compose repository at https://android.googlesource.com/platform/frameworks/support.

Preview functionality (check your application UI without building/running it) for desktop platforms is available via IDEA plugin (https://plugins.jetbrains.com/plugin/16541-compose-multiplatform-ide-support).

Repository organization

Getting latest version of Compose Multiplatform

See https://github.com/JetBrains/compose-jb/tags for the latest build number.

GitHub

https://github.com/JetBrains/compose-jb
Comments
  • 1. free(): invalid pointer - when running on Linux

    Trying to run almost any Compose app (including, for instance, the codeviewer sample) results in the JVM crashing with a free(): invalid pointer error. This was observed on a fresh install of Ubuntu 20.04 in a virtual machine, but is presumably true of all Ubuntus and a wide variety of other distributions and hardware configurations. Interestingly, @olonho tested on his physical Ubuntu 20.04 machine and did not encounter this failure, so the percentage of users impacted is not yet known. This appears to be a regression introduced between 0.3.0-build154 and 0.3.0-rc1.

    For more details, I know @theapache64 encountered the same error in https://github.com/JetBrains/compose-jb/issues/275#issuecomment-782896658 and posted a full backtrace dump. His dump also includes a shader compile error, which I do not see when running the codeviewer app, so is presumably unrelated.

    Questions for @theapache64 : (1) More just curiosity than anything, but also looking for patterns, are you running on a VM or physical hardware? (2) When running the codeviewer sample for instance, but I don't get nearly the same amount of debug info as you and I don't seem to be getting a hs_err_pid file. How did you get your full backtrace dump?

    Reviewed by jimgoog at 2021-02-22 10:53
  • 2. Exception during IR lowering

    I've been trying to get JetBrains Compose to work with my existing project, but it keeps on giving me this error:

    java.lang.IllegalStateException: Backend Internal error: Exception during IR lowering
    File being compiled: C:/Users/20047/IdeaProjects/TradisAgnostic/src/main/kotlin/io/ejekta/core/struct/GameRegistry.kt
    The root cause java.lang.AssertionError was thrown at: org.jetbrains.kotlin.backend.common.ir.IrUtilsKt.copyValueParametersToStatic(IrUtils.kt:245)
    	at org.jetbrains.kotlin.backend.common.CodegenUtil.reportBackendException(CodegenUtil.kt:239)
    	at org.jetbrains.kotlin.backend.common.phaser.PerformByIrFilePhase.invoke(PhaseBuilders.kt:124)
    	at org.jetbrains.kotlin.backend.common.phaser.PerformByIrFilePhase.invoke(PhaseBuilders.kt:112)
    	at org.jetbrains.kotlin.backend.common.phaser.NamedCompilerPhase.invoke(CompilerPhase.kt:94)
    	at org.jetbrains.kotlin.backend.common.phaser.CompositePhase.invoke(PhaseBuilders.kt:30)
    	at org.jetbrains.kotlin.backend.common.phaser.NamedCompilerPhase.invoke(CompilerPhase.kt:94)
    	at org.jetbrains.kotlin.backend.common.phaser.CompilerPhaseKt.invokeToplevel(CompilerPhase.kt:41)
    	at org.jetbrains.kotlin.backend.jvm.JvmLower.lower(JvmLower.kt:395)
    	at org.jetbrains.kotlin.backend.jvm.JvmBackendFacade.doGenerateFilesInternal$backend_jvm(JvmBackendFacade.kt:138)
    	at org.jetbrains.kotlin.backend.jvm.JvmBackendFacade.doGenerateFilesInternal$backend_jvm$default(JvmBackendFacade.kt:125)
    	at org.jetbrains.kotlin.backend.jvm.JvmBackendFacade.doGenerateFiles(JvmBackendFacade.kt:112)
    	at org.jetbrains.kotlin.backend.jvm.JvmIrCodegenFactory.generateModule(JvmIrCodegenFactory.kt:40)
    	at org.jetbrains.kotlin.codegen.KotlinCodegenFacade.compileCorrectFiles(KotlinCodegenFacade.java:35)
    	at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.generate(KotlinToJVMBytecodeCompiler.kt:647)
    	at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.compileModules$cli(KotlinToJVMBytecodeCompiler.kt:210)
    	at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.compileModules$cli$default(KotlinToJVMBytecodeCompiler.kt:162)
    	at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:169)
    	at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:52)
    	at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:88)
    	at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:44)
    	at org.jetbrains.kotlin.cli.common.CLITool.exec(CLITool.kt:98)
    	at org.jetbrains.kotlin.incremental.IncrementalJvmCompilerRunner.runCompiler(IncrementalJvmCompilerRunner.kt:371)
    	at org.jetbrains.kotlin.incremental.IncrementalJvmCompilerRunner.runCompiler(IncrementalJvmCompilerRunner.kt:105)
    	at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compileIncrementally(IncrementalCompilerRunner.kt:249)
    	at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.access$compileIncrementally(IncrementalCompilerRunner.kt:38)
    	at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner$compile$2.invoke(IncrementalCompilerRunner.kt:80)
    	at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compile(IncrementalCompilerRunner.kt:92)
    	at org.jetbrains.kotlin.daemon.CompileServiceImplBase.execIncrementalCompiler(CompileServiceImpl.kt:602)
    	at org.jetbrains.kotlin.daemon.CompileServiceImplBase.access$execIncrementalCompiler(CompileServiceImpl.kt:93)
    	at org.jetbrains.kotlin.daemon.CompileServiceImpl.compile(CompileServiceImpl.kt:1644)
    	at jdk.internal.reflect.GeneratedMethodAccessor98.invoke(Unknown Source)
    	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    	at java.rmi/sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:359)
    	at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:200)
    	at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:197)
    	at java.base/java.security.AccessController.doPrivileged(Native Method)
    	at java.rmi/sun.rmi.transport.Transport.serviceCall(Transport.java:196)
    	at java.rmi/sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:562)
    	at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:796)
    	at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:677)
    	at java.base/java.security.AccessController.doPrivileged(Native Method)
    	at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:676)
    	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
    	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
    	at java.base/java.lang.Thread.run(Thread.java:829)
    
    

    This is with build 0.3.0-build141 and Kotlin 1.4.21. Attached is what GameRegistry.kt looks like.

    GameRegistry.txt

    Reviewed by ejektaflex at 2021-01-22 04:28
  • 3. Support for animated gif images.

    Trying to display the following animated gif image displays only the first frame because it supports only the Bitmap.

    Image(
         bitmap = imageFromResource("lottie-sample.gif"),
         modifier = Modifier.align(Alignment.BottomCenter).preferredSize(100.dp,100.dp)
    )
    

    lottie-sample

    Reviewed by sureshg at 2020-11-30 07:13
  • 4. Example Todo app

    Hello! I played with MPP Jetpack Compose and I really enjoyed it! I'm impressed with the ability to just copy @Composable functions from Android to common. You rock! As a result I created a sample Todo app. The key point of this example is that 99% of the code is common (data, business logic, presentation, navigation and UI).

    This app uses the following libraries:

    There are multiple common modules:

    • utils - just some useful helpers
    • database - SQLDelight database definition
    • main - displays a list of todo items and a text field, adds items to the database
    • edit - accepts an item id and allows editing
    • root - navigates between main and edit

    The root module is integrated into both Android and Desktop apps.

    Here are some screenshots:

    During my work I discovered some issues/bugs.

    Common:

    • Caught a compiler error, can be reproduced in this separate branch - just try to build e.g. the Android app, there should be "Backend internal error".

    Android:

    • Keyboard overlaps the bottom input field sometimes
    • The app is not clickable after the keyboard is closed via "Back" button (minimize/restore solves the problem)
    • Saving UI state seems not working properly. I tried to use port my solution from Decompose (using UiSavedStateRegistry) and the list scrolling position is not preserved. It works well with normal Jetpack Compose alpha04.

    Desktop:

    • Built-in Compose icons do not compile. E.g. using Icons.Default.ArrowBack throws kotlin.NotImplementedError: An operation is not implemented during compilation.
    • The app does not honor system screen scale factor. I am using Ubuntu 19.04 and have 4k screen with 200% scale factor set in the settings. The app is rendered on the bottom left quarter of the window, but reacts on mouse in correct coordinates. Changing scale type to 100% solves the problem, but in this case I had to reduce the resolution. Please check the attached GIF of the ImageViewer sample app.
    • Maybe unrelated, desktop module shows all the code from dependent modules as red. But compiles and runs fine. External dependencies are also fine.
    • Jetpack Crossfade animation renders only first and last frames
    • Check boxes are just filled with solid color, no "tick" icons
    Reviewed by arkivanov at 2020-10-14 21:28
  • 5. "androidx dependency" is compiled by a new Kotlin compiler backend and cannot be loaded by the old compiler

    Hello,

    I created the base project using you getting started tutorial. Well, it runs, it works, but IntelliJ IDEA thinks it should not work. It shows me the error that I specified in the issue name. How can I fix this?

    image

    Reviewed by ggoraa at 2020-11-05 18:54
  • 6. Followed "Milestone 2" release tutorial. End up with `Window` with red underline

    I followed the tutorial here: https://blog.jetbrains.com/cross-post/jetpack-compose-for-desktop-milestone-2-released/

    but I ended up with a red underline under Window Screen Shot 2020-12-04 at 7 22 12 PM

    Using Intellij 2020.3 community edition. Can repro every time I create a new project. Screen Shot 2020-12-07 at 4 13 15 AM Screen Shot 2020-12-07 at 4 13 33 AM

    Reviewed by ColtonIdle at 2020-12-07 09:18
  • 7. Exported deb file renders blank screen - Ubuntu

    When using run

    image

    When running deb file

    image

    OS : Ubuntu 16.04

    IDE Version

    IntelliJ IDEA 2020.3.1 (Community Edition)
    Build #IC-203.6682.168, built on December 29, 2020
    Runtime version: 11.0.9.1+11-b1145.63 amd64
    VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o.
    Linux 4.15.0-129-generic
    GC: ParNew, ConcurrentMarkSweep
    Memory: 1934M
    Cores: 6
    
    Current Desktop: Unity
    
    Reviewed by theapache64 at 2021-01-15 02:45
  • 8. Skia crash when calling Image.makeFromEncoded(bytes).asImageAsset()

    Unfortunately i am not able to reproduce it reliable. But when i am loading many images and display it some times it crashes. To reproduce it execute the following code and scroll fast up and down. Sometimes it happens after just 10-20 images loadings. Sometimes it takes much longer. Also it is not every time necessary to scroll fast. I also tried to load the data into bytearrays first and than show alle images instantly without loading but it will still not crash reliable. Please see the crash details in this file: hs_err_pid15251.log Here is the code to reproduce the bug:

    import androidx.compose.desktop.Window
    import androidx.compose.foundation.Image
    import androidx.compose.foundation.layout.Box
    import androidx.compose.foundation.layout.aspectRatio
    import androidx.compose.foundation.layout.fillMaxSize
    import androidx.compose.foundation.layout.fillMaxWidth
    import androidx.compose.foundation.lazy.LazyColumnFor
    import androidx.compose.runtime.*
    import androidx.compose.ui.Modifier
    import androidx.compose.ui.graphics.ImageAsset
    import androidx.compose.ui.graphics.asImageAsset
    import androidx.compose.ui.unit.IntSize
    import kotlinx.coroutines.Dispatchers
    import kotlinx.coroutines.withContext
    import org.jetbrains.skija.Image
    import java.net.URL
    
    data class RemoteImage(val url: String, val width: Int, val height: Int)
    
    suspend fun loadImageUrl(url: String) = withContext(Dispatchers.IO) {
        val bytes = URL(url).openStream().use { it.readAllBytes() }
        log("Decode bytes: ${bytes.size}")
        Image.makeFromEncoded(bytes).asImageAsset()
    }
    
    @Composable
    fun loadImageAsyn(url: String): ImageAsset? {
        var state: ImageAsset? by remember(url) { mutableStateOf(null) }
        LaunchedEffect(url) {
            state = try {
                loadImageUrl(url)
            } catch (err: Exception) {
                println("Unable to load image $url: ${err.message}")
                null
            }
        }
        return state
    }
    
    fun main() {
        val width = 1000
        val height = 600
        val remoteImageList = (0..500).map {
            RemoteImage(
                url = "https://picsum.photos/id/$it/$width/$height",
                width = width,
                height = height
            )
        }
    
        Window(
            title = "Image Browser",
            size = IntSize(200,800),
            centered = true,
        ) {
            LazyColumnFor(remoteImageList) { item ->
                val image = loadImageAsyn(item.url)
                val aspectRatio = item.width.toFloat() / item.height.toFloat()
                Box(Modifier.aspectRatio(aspectRatio).fillMaxWidth()) {
                    image?.let {
                        Image(modifier = Modifier.fillMaxSize(), asset = it)
                    }
                }
            }
        }
    }
    
    Reviewed by timo-drick at 2020-11-19 14:44
  • 9. Performance regression in modifying `MutableState`

    Calls to drawRect (and other drawing methods) in a Canvas are significantly slower in Compose 1.1.1 than they were in 1.0.0-alpha3.

    EDIT: We now know that the actual performance regression is in the management of the MutableState objects - not the drawing of the rectangles.

    I've bisected the releases, and found that the regression happened in 1.0.0-alpha4-build396 (that is, 1.0.0-alpha4-build396 has the worse performance, while 1.0.0-alpha4-build385 is OK)

    Environment

    OS: MacOS 12.1 (Monterey) Compose version: 1.1.1

    Reproducible example

    The following code creates a Window, renders 2000 rectangles, and gradually moves them across the screen, from left to right.

    On my MacBook it runs approximately 4-5x slower in Compose 1.0.0-alpha4-build396, compared to 1.0.0-alpha4-build385.

    package com.vaticle.compose.perf
    
    import androidx.compose.foundation.Canvas
    import androidx.compose.foundation.layout.fillMaxSize
    import androidx.compose.runtime.Composable
    import androidx.compose.runtime.LaunchedEffect
    import androidx.compose.runtime.getValue
    import androidx.compose.runtime.mutableStateOf
    import androidx.compose.runtime.remember
    import androidx.compose.runtime.setValue
    import androidx.compose.runtime.withFrameNanos
    import androidx.compose.ui.Modifier
    import androidx.compose.ui.geometry.Offset
    import androidx.compose.ui.geometry.Size
    import androidx.compose.ui.graphics.Color
    import androidx.compose.ui.window.Window
    import androidx.compose.ui.window.WindowPlacement
    import androidx.compose.ui.window.application
    import androidx.compose.ui.window.rememberWindowState
    
    fun main() {
        application {
            Window(title = "Boxes", onCloseRequest = { exitApplication() }, state = rememberWindowState(WindowPlacement.Maximized)) {
                val boxes = rememberBoxes()
                Canvas(Modifier.fillMaxSize()) {
                    boxes.forEach {
                        drawRect(Color.Red, Offset(it.x, it.y), Size(18f, 6f))
                    }
                }
                LaunchedEffect(Unit) {
                    while (true) {
                        withFrameNanos { boxes.forEach { box -> box.x++ } }
                    }
                }
            }
        }
    }
    
    @Composable
    fun rememberBoxes(): List<Block> {
        val boxes = mutableListOf<Block>()
        for (i in 0 until 100) {
            for (j in 0 until 20) { boxes += Block(x = (j * 20).toFloat(), y = (i * 8).toFloat()) }
        }
        return remember { boxes }
    }
    
    class Block(x: Float, y: Float) {
        var x by mutableStateOf(x)
        var y by mutableStateOf(y)
    }
    
    Reviewed by alexjpwalker at 2022-04-14 15:53
  • 10. Canvas.drawArc is ignoring size parameter

    Canvas.drawArc is ignoring size parameter The issue is specific to desktop app. Android app is working as expected.

    image

    A workaround was to draw path with Path.addArcRad

    image

    Reviewed by rustamsmax at 2021-03-02 06:57
  • 11. Failed to resolve: androidx.activity:activity-ktx:1.3.0-alpha01

    Trying to build the imageViewer example but gradle sync shows this error:

    > Could not find androidx.activity:activity-ktx:1.3.0-alpha01.
         Required by:
             project :android > org.jetbrains.compose.ui:ui-android-debug:0.3.0-build149
    
    Reviewed by Chozzle at 2021-02-07 14:10
  • 12. IdSignature clash: Existed declaration FUN name:Button$composable

    The compiler crashes with this error message. I did not manage to find the cause.

    Stacktrace:

    java.lang.IllegalStateException: IdSignature clash: clovis.ui.components/Buttons.Button$composable|3863356179520890837[0]; Existed declaration FUN name:Button$composable visibility:public modality:ABSTRACT <> ($this:clovis.ui.components.Buttons, action:kotlin.Function0<kotlin.Unit>, enabled:kotlin.Boolean, loading:clovis.ui.utils.Progression, icon:kotlin.Function2<androidx.compose.runtime.Composer, kotlin.Int, kotlin.Unit>?, contents:kotlin.Function2<androidx.compose.runtime.Composer, kotlin.Int, kotlin.Unit>, $composer:androidx.compose.runtime.Composer?, $changed:kotlin.Int) returnType:kotlin.Unit clashed with new FUN name:Button$composable visibility:public modality:ABSTRACT <> ($this:clovis.ui.components.Buttons, action:kotlin.Function0<kotlin.Unit>, enabled:kotlin.Boolean, loading:clovis.ui.utils.Progression, icon:kotlin.Function2<androidx.compose.runtime.Composer, kotlin.Int, kotlin.Unit>?, contents:kotlin.Function2<androidx.compose.runtime.Composer, kotlin.Int, kotlin.Unit>, $composer:androidx.compose.runtime.Composer?, $changed:kotlin.Int) returnType:kotlin.Unit
    	at org.jetbrains.kotlin.ir.backend.js.lower.serialization.ir.JsUniqIdClashTracker.commit(JsDeclarationTable.kt:27)
    	at org.jetbrains.kotlin.backend.common.serialization.GlobalDeclarationTable.computeSignatureByDeclaration(DeclarationTable.kt:48)
    

    Full stacktrace: https://gitlab.com/opensavvy/clovis/-/jobs/2877060532

    To reproduce:

    • Clone project https://gitlab.com/opensavvy/clovis
    • Check out commit 267f21ba62cdf95063d4974381768d37efbc244e
    • ./gradlew :ui.tailwind:compileKotlinJs
    Reviewed by CLOVIS-AI at 2022-08-13 19:32
  • 13. about compose desktop application logo icon problem

    Android Studio version: Chipmunk 2021.2.1 path1 Compose version : 1.1.0 kotlin version:1.6.10

    code

      Window(
            onCloseRequest = ::exitApplication,
            title = "iBox",
            resizable = false,
            icon = BitmapPainter(useResource("drawable/ic_jetquotes_logo.png", ::loadImageBitmap)),
        ) {
            App(window)
    //        test()
        }
    

    when i build package dmg ,the application is the default logo icon , i want use my icon。 i use the example project "codeviewer " ,to build the package dmg , i meet the same problem。

    How should I do it ?

    Reviewed by WngYilei at 2022-08-12 02:43
  • 14. Modules missing for desktop preview in recent alphas

    Could not determine the dependencies of task ':myProject:configureDesktopPreview'.
    > Could not resolve all task dependencies for configuration ':myProject:detachedConfiguration4'.
    
         Searched in the following locations:
           - https://repo.maven.apache.org/maven2/org/jetbrains/compose/preview-rpc/1.2.0-alpha01-dev755/preview-rpc-1.2.0-alpha01-dev755.pom
    

    https://repo.maven.apache.org/maven2/org/jetbrains/compose/preview-rpc/ has dev620 as most recent

    I believe this repo is not configurable via project settings

    IntelliJ IDEA 2022.1.4 (Ultimate Edition) Build #IU-221.6008.13, built on July 19, 2022

    Reviewed by dsvoronin at 2022-08-11 21:50
  • 15. ui-graphics is not published for android

    Not sure if this is intentional, ui-graphics isn't being published for android

    https://maven.pkg.jetbrains.space/public/p/compose/dev/org/jetbrains/compose/ui/ui-graphics-android/

    Reviewed by luca992 at 2022-08-10 21:38
FirestoreCleanArchitectureApp is an app built with Kotlin and Firestore that displays data in real-time using the MVVM Architecture Pattern. For the UI it uses Jetpack Compose, Android's modern toolkit for building native UI.
FirestoreCleanArchitectureApp is an app built with Kotlin and Firestore that displays data in real-time using the MVVM Architecture Pattern. For the UI it uses Jetpack Compose,  Android's modern toolkit for building native UI.

FirestoreCleanArchitectureApp FirestoreCleanArchitectureApp is an app built with Kotlin and Cloud Firestore that displays data in real-time using Andr

Aug 11, 2022
🎲 Kotlin Symbol Processor to auto-generate extensive sealed classes and interfaces for Android and Kotlin.
🎲 Kotlin Symbol Processor to auto-generate extensive sealed classes and interfaces for Android and Kotlin.

SealedX ?? Kotlin Symbol Processor to auto-generate extensive sealed classes and interfaces for Android and Kotlin. Why SealedX? SealedX generates ext

Aug 16, 2022
Simple Kotlin application that displays the currently available network interfaces on your machine

Network-Interface-Checker Simple Kotlin application that displays the currently available network interfaces on your machine. An executable jar can be

Jun 10, 2022
A clone of hn.premii.com implemented in KMP with Web (React), iOS (Swift UI), Android and Desktop (Compose) UIs

An clone of hn.premii.com implemented in Kotlin Multiplatform with shared Android/Desktop Compose UI, SwiftUI on iOS and React for Web This example su

Feb 5, 2022
Building Web Applications with React and Kotlin JS Hands-On Lab

Building Web Applications with React and Kotlin JS Hands-On Lab This repository is the code corresponding to the hands-on lab Building Web Application

Nov 13, 2021
Scaloid makes your Android code easy to understand and maintain.

Simpler Android Scaloid is a library that simplifies your Android code. It makes your code easy to understand and maintain by leveraging Scala languag

Aug 2, 2022
A modular framework for building Discord bots in Kotlin using Kordex and Kord

Mik Bot A modular framework for building Discord bots in Kotlin using Kordex and Kord **If you are here for mikmusic, click here and there Deployment

Aug 1, 2022
KVision allows you to build modern web applications with the Kotlin language

KVision allows you to build modern web applications with the Kotlin language, without any use of HTML, CSS or JavaScript. It gives you a rich hierarchy of ready to use GUI components, which can be used as builder blocks for the application UI.

Aug 14, 2022
Web Container: A simple web container library for Android to help fellow developer to open WebView easily

WebContainer Description Web Container is a simple web container library for And

Mar 8, 2022
Template for a modern spring web service.

Spring Service Scaffold A scaffold for a web service operating with a Spring Framework backend, reactjs as frontend and a continuous testing and build

Nov 15, 2021
🛒 Mercado Libre App Clone using modern Android development with Hilt, Coroutines, Jetpack (Room, ViewModel), and Jetpack Compose based on MVVM architecture.
🛒 Mercado Libre App Clone using modern Android development with Hilt, Coroutines, Jetpack (Room, ViewModel), and Jetpack Compose based on MVVM architecture.

Meli Clone ?? Mercado Libre App Clone using modern Android development with Hilt, Coroutines, Jetpack (Room, ViewModel), and Jetpack Compose based on

Jul 26, 2022
Consumer desktop from nutrition-framework API
Consumer desktop from nutrition-framework API

About This Project (work-in-progress ?? ??️ ??‍♀️ ⛏ ) Consumer Dari Nutrition Framework General Framework for Application Development Around Nutrition

Jul 13, 2022
A Modern Kotlin-Ktor RESTful API example. Connects to a PostgreSQL database and uses Exposed framework for database operations.
A Modern Kotlin-Ktor RESTful API example. Connects to a PostgreSQL database and uses Exposed framework for database operations.

kotlin-ktor-rest-api A Modern Kotlin-Ktor RESTful API example. Connects to a PostgreSQL database and uses Exposed framework for database operations. F

Jul 15, 2022
Ktor is an asynchronous framework for creating microservices, web applications and more.
Ktor is an asynchronous framework for creating microservices, web applications and more.

ktor-sample Ktor is an asynchronous framework for creating microservices, web applications and more. Written in Kotlin from the ground up. Application

Jan 22, 2022
A TODO list app with location reminders that remind the user to do something when the user is at a specific location

Project Title Location Reminder Getting Started A TODO list app with location reminders that remind the user to do something when the user is at a spe

Dec 5, 2021
A project that takes advantage of docker and makes the load test easier

Performance Test It's a project that takes advantage of docker and makes the load test easier. Also, it collects metrics from each running container.

Dec 9, 2021
A Tachidesk Desktop UI built in JetBrains Compose
A Tachidesk Desktop UI built in JetBrains Compose

TachideskJUI A free and open source manga reader to read manga from a Tachidesk server. TachideskJUI can run the Tachidesk server on its own, or conne

Aug 8, 2022
Playground UI Compose in Desktop Apps
Playground UI Compose in Desktop Apps

caravan-kotlin-desktop-compose Project Learning Jetpack Compose on Desktop Aplication Request Data Retrofit Version Release This Is Latest Release $ve

Jul 13, 2022
This is a template to help you get started building amazing Kotlin applications and libraries.

Welcome to the Starter This is a template to help you get started building amazing Kotlin applications and libraries. Over time, examples will be comp

Jan 9, 2022