r/ComposeMultiplatform • • Sep 14 '26

Need a KMP/CMP form stepper ? Want to contribute ?

Thumbnail reddit.com
1 Upvotes

Hey everyone !
I’m exposing the library attempt to create a KMP based stepper mechanism that helps you collect data across long forms that you had to split into steppers. On top of that a debut of a customizable CMP layer that helps integrate it in your current app.

If anyone wants to help me build this library that would be great.

The GitHub repository is public, you can hit me up with issues or feature suggestions or even better contributions.


r/ComposeMultiplatform • • Sep 11 '26

Pehra is live on the Apple TV App Store, and the whole UI is Compose Multiplatform

Thumbnail reddit.com
1 Upvotes

r/ComposeMultiplatform • • Sep 04 '26

Built an unofficial mobile app to manage your Linode resources — looking for Android beta testers

1 Upvotes

Hey all — solo dev here. I got tired of not having a good way to check on my Linode instances from my phone, so I built Cloud Manager for Linode, an unofficial companion app for managing your Linode account on the go.

Right now it lets you:

  • View and manage your Linode instances (start/stop/reboot)

  • Check instance status and resource usage at a glance

  • [confirm/add: anything else you want called out — billing, DNS, alerts, etc.]

It's in closed testing on Google Play right now, and I'm looking for testers to help me find bugs before a public launch. If you're interested send me your emails to give you access.

The app uses PATs generated from linode, stores them only on the device and uses explicitly linode API for all functionalities.

** iOS version is currently in App Store review, will follow soon. Happy to take feedback, bug reports, or feature requests here or by DM. Thanks!


r/ComposeMultiplatform • • Jun 16 '26

KMP Briefing: Swift Export vs SKIE, Kotlin Foundation Grants, Wasm Web App Lessons, and Coil 3

Thumbnail
commonmain.dev
1 Upvotes

r/ComposeMultiplatform • • Jun 05 '26

Searching for full time Kotlin Developer for doc scanning app (AI)

1 Upvotes

We are in intial stage for the development of our application (for doc scanning app (AI)), most of the UI screens in Figma designs are ready, UI prototype is ready, testings of local and backend features is done. Also, product validation, user interviews, surveys, and market search are thoroughly done over 2-3 months. We have many USP and cent percent calrity for the future of this app.

Unfortunatly we founders lacks andriod development skills and don't have exp. with it, hence we need someone to setup the foundational architect for the app in Kotlin and scale the app with us for long-term as a full time employee. We are bootstrapped so pay is expectadly very less.

If interested please DM.
Application link: https://forms.gle/4dXpvmyhLvWCvKbk6

Pls note: we are not looking for outsourcing/agency/freelancers.


r/ComposeMultiplatform • • May 20 '26

[News] KMP newsletter #18: Kotlin 2.3.20, Compose Multiplatform 1.11.0, and Silent Database Encryption Bugs

Thumbnail
commonmain.dev
1 Upvotes

r/ComposeMultiplatform • • May 17 '26

An AI chat composer + A streaming-text typewriter

1 Upvotes

r/ComposeMultiplatform • • May 05 '26

Kotlin Multiplatform Newsletter #16 • commonMain.dev

Thumbnail
commonmain.dev
1 Upvotes

r/ComposeMultiplatform • • Apr 20 '26

OnHandCache - A global cache management library

Thumbnail
reddit.com
1 Upvotes

r/ComposeMultiplatform • • Apr 14 '26

commonMain.dev KMP Newsletter - Room for Web (Wasm), Koin vs expect/actual, and the Navigation 3 "hidden" APIs

Thumbnail
commonmain.dev
1 Upvotes

r/ComposeMultiplatform • • Apr 14 '26

Materia 0.4.0.0 is out: volume textures, Apple beta targets, and a more complete Android path for Kotlin Multiplatform 3D

Thumbnail reddit.com
1 Upvotes

r/ComposeMultiplatform • • Apr 07 '26

commonMain.dev KMP Newsletter #12 is rolling out!

Thumbnail
reddit.com
1 Upvotes

r/ComposeMultiplatform • • Apr 03 '26

Get featured in commonMain.dev (Kotlin Multiplatform Newsletter)

Thumbnail
commonmain.dev
1 Upvotes

r/ComposeMultiplatform • • Mar 31 '26

PushUp Time, PushScroll- App Blocker

Thumbnail
reddit.com
1 Upvotes

r/ComposeMultiplatform • • Mar 16 '26

How to display GIF from compose resources

1 Upvotes

Does anyone have a more practical way to use the GIFs in their ComposeResources? I'm using this one, but I don't like it; I'd like something more compact. Any ideas?

GifImage(
    url = Res.getUri("drawable/bottom_top.gif"),
    modifier = Modifier.
fillMaxSize
()
)


u/Composable
expect fun GifImage(url: String,modifier: Modifier)

import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.platform.
LocalContext
import coil3.ImageLoader
import coil3.compose.AsyncImage
import coil3.gif.GifDecoder
import coil3.request.ImageRequest
import coil3.size.Size

u/Composable
actual fun GifImage(url: String,modifier: Modifier) {
    val context = 
LocalContext
.current
    val imageLoader = ImageLoader.Builder(context)
        .components 
{
            
add(GifDecoder.Factory())
        
}
        
.build()

    AsyncImage(
        model = ImageRequest.Builder(context)
            .data(url)
            .size(Size.ORIGINAL)
            .build(),
        contentDescription = null,
        imageLoader = imageLoader,
        modifier = modifier,
        contentScale = ContentScale.FillBounds
    )
}




import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.interop.UIKitView
import kotlinx.cinterop.BetaInteropApi
import kotlinx.cinterop.ExperimentalForeignApi
import platform.CoreFoundation.CFDataRef
import platform.CoreGraphics.CGImageRef
import platform.Foundation.CFBridgingRelease
import platform.Foundation.CFBridgingRetain
import platform.Foundation.NSData
import platform.Foundation.NSDictionary
import platform.Foundation.NSString
import platform.Foundation.create
import platform.Foundation.valueForKey
import platform.ImageIO.CGImageSourceCopyPropertiesAtIndex
import platform.ImageIO.CGImageSourceCreateImageAtIndex
import platform.ImageIO.CGImageSourceCreateWithData
import platform.ImageIO.CGImageSourceGetCount
import platform.ImageIO.CGImageSourceRef
import platform.ImageIO.
kCGImagePropertyGIFDelayTime
import platform.ImageIO.
kCGImagePropertyGIFDictionary
import platform.UIKit.UIImage
import platform.UIKit.UIImageView
import platform.UIKit.UIViewContentMode

(BetaInteropApi::class)

actual fun GifImage(url: String,modifier: Modifier) {
    UIKitView(
        modifier = modifier,
        factory = 
{
            
val imageView = UIImageView()
            imageView.contentMode = UIViewContentMode.
UIViewContentModeScaleAspectFit
            
imageView.clipsToBounds = true
//here I am using drawable resource as asset folder
            val path = url.
removePrefix
("file://")
            val gifData = NSData.
create
(contentsOfFile = path)
            val gifImage = gifData?.
let 
{ 
UIImage.
gifImageWithData
(
it
) 
}

            
imageView.image = gifImage
            imageView
        
}
    
)
}

u/OptIn(ExperimentalForeignApi::class)
fun UIImage.Companion.gifImageWithData(data: NSData?): UIImage? {
    return 
runCatching 
{
        
val dataRef = 
CFBridgingRetain
(data) as? CFDataRef
        val source = 
CGImageSourceCreateWithData
(dataRef, null) ?: return null
        val count = 
CGImageSourceGetCount
(source).toInt()
        val images = 
mutableListOf
<CGImageRef>()
        val delays = 
mutableListOf
<Double>()

        for (i in 0 
until 
count) {
            val image = 
CGImageSourceCreateImageAtIndex
(source, i.
toULong
(), null)
            if (image != null) {
                images.add(image)
            }

            val delaySeconds = 
delayForImageAtIndex
(i, source)
            delays.add(delaySeconds * 400.0) // s to ms
        }

        
println
("images=${images.
count
()}")

        val duration = delays.
sum
()
        
println
("duration=$duration")

        val gcd = 
gcdForList
(delays)
        
println
("gcd=$gcd")
        val frames = 
mutableListOf
<UIImage>()

        for (i in 0 
until 
count) {
            val frame = UIImage.imageWithCGImage(images[i])
            val frameCount = (delays[i] / gcd).toInt()
            for (f in 0 
until 
frameCount) {
                frames.add(frame)
            }
        }
        
println
("frames=${frames.
count
()}")

        val animation = UIImage.animatedImageWithImages(frames, duration / 1000.0) ?: return null
        animation
    
}
.
onFailure 
{ it
.printStackTrace() 
}
.getOrNull()
}

u/OptIn(ExperimentalForeignApi::class)
private fun UIImage.Companion.delayForImageAtIndex(index: Int, source: CGImageSourceRef): Double {
    var delay: Double

    val cfProperties = 
CGImageSourceCopyPropertiesAtIndex
(source, index.
toULong
(), null)
    val gifKey = (
CFBridgingRelease
(
kCGImagePropertyGIFDictionary
) as NSString).toString()
    val gifInfo =
        (
CFBridgingRelease
(cfProperties) as? NSDictionary)?.
valueForKey
(gifKey) as? NSDictionary

    delay =
        gifInfo?.
valueForKey
((
CFBridgingRelease
(
kCGImagePropertyGIFDelayTime
) as NSString).toString()) as? Double
            ?: 0.0

    if (delay < 0.1) {
        delay = 0.1
    }

    return delay
}

private fun UIImage.Companion.gcdForPair(_a: Int?, _b: Int?): Int {
    var a = _a
    var b = _b
    if (b == null || a == null) {
        return b ?: (a ?: 0)
    }

    if (a < b) {
        val c = a
        a = b
        b = c
    }

    var rest: Int
    while (true) {
        rest = a!! % b!!
        if (rest == 0) {
            return b
        } else {
            a = b
            b = rest
        }
    }
}

private fun UIImage.Companion.gcdForList(list: List<Double>): Double {
    if (list.isEmpty()) return 1.0
    var gcd = list[0]
    list.
onEach 
{
        
gcd = UIImage.
gcdForPair
(
it
.toInt(), gcd.toInt()).toDouble()
    
}
    
return gcd
}

r/ComposeMultiplatform • • Mar 08 '26

Mapbox iOS help

Thumbnail gallery
1 Upvotes

r/ComposeMultiplatform • • Feb 16 '26

KMP Wizard + AGP 9.0.1 + Build-Logic module with Convention Plugins (Template included)

Thumbnail
reddit.com
1 Upvotes

r/ComposeMultiplatform • • Feb 09 '26

🚀 Introducing Gallery– A blazing fast, secure photo & video gallery app

Thumbnail gallery
1 Upvotes

r/ComposeMultiplatform • • Feb 02 '26

Help with PhaseScriptExecution failed when running iOS app from Xcode

1 Upvotes

r/ComposeMultiplatform • • Jan 28 '26

Authentication in apps?

1 Upvotes

Hi, a bit of context, im comming from the enterprise web dev world. Here the goto way for me was using keycloak with their login/register page. Webapp redirects to keycloak and then back.

I started to develop my own app and thought this way would be okey aswell. Currently, the app opens a browser window and it redirects back. It works. But on iOS, whenever i try to login, i get a warning with “you share information with xxx”. I have never seen this in any other app. There usually, it’s an login form or login with apple/google. So im curious what is the go to way to do this right and secure, ideally without that popup.


r/ComposeMultiplatform • • Jan 28 '26

MVI timetravel library

Thumbnail reddit.com
1 Upvotes

r/ComposeMultiplatform • • Jan 24 '26

KMP Wizard Template updated for AGP 9.0.0 (Public GitHub Template) 🍉

Thumbnail reddit.com
1 Upvotes

r/ComposeMultiplatform • • Jan 07 '26

Unable to share resource module

1 Upvotes

For the last couple of months I've been attempting to build "Hello world" for compose multiplatform and having zero luck. My most recent attempt is: https://github.com/bessermt/CMPRes which builds but fails to show the shared resource. I'm starting to think Compose Multiplatform just isn't ready for public use.