I have issues on Google Photo app. It can play and view most media extensions, such as webm and webp. It could zoom on video, even editing photo. It is great, but there are missing few features. I can speed up or slow down the video, natively taking snapshot on video, or convert or scale down (compress, resize, resolution, etc) space size of media files in bulk. For the conversion, I need it from WebP or PNG to JPEG (lossy MozJPEG) and WebM to MP4. As video size compression or resolution reducer, I need to find encoder similar to png -> jpeg. Seems MP4 in HEVC/H.265/AV1 codec.
As a developer, I choose the most reasonable path I could think of. Yes, reinventing the wheels. But, I am not that blind, so I do research; I mean I ask AI to do the research. For now, only Google Photo and VLC Media that has 2 feature of all missing. I would go to NotebookLM and ask it to do Deep Research, also Gemini 3 Pro, Gemini 3 Pro Deep Research, and Google AI Search.
So, the results are:
- NLM: MX Player Pro, KMPlayer Plus, Zoom Video Player, FX Player, OPlayer, Aves Gallery, Fossify Gallery, F-Stop Media Gallery, Standard Gallery, EzyCapture, Video to Photo
- G3P: KMPlayer, MX Player, Panda Video Compressor & Converter, Aves Gallery
- G3PDR: MiXplorer, Aves Gallery, XPlayer, Simple Gallery Pro
- GAIS: KMPlayer, MX Player, Zoom Video Player
Welp... seems what I want to have already exists out there and I need to review each one. Nvm... Let's just coding it.
in this blog, you would follow my elaborated journey in developing this App. I have no experience in Java and Kotlin, so this also showing from the beginning how I start program in Kotlin.
I actually end my journaling and not continue using Kotlin to do this project. Feel free to read my journey in embracing Kotlin Compose Multiplatform.
Uuh... I just give up. Kotlin would be my next project because it involve server action. Unfortunately, everything I wrote in commonMain would not reflect to server. So, I should find a way to connect it. I would try hard everything I wrote, I should not wrote the logic flow once again in server specific-platform. And I don't want to wrote a boilerplate for it. Trust me, I ask Google Search AI. (Jk. I know it slop. I would do proper research when time come)
Framework Exploration
I already have an objective. An MVP of Media Viewer (PNG, JPG, MP4, WebP, WebM) with zoom mode, Snapshot, Speed mode, Converter with Compression and rescaling, and bulk conversion. My additional requirements are name formatting, and Zoom-in frame (and preview) in seek player. Also, cross-platform so I could also use it on Desktop -- Windows and Linux.
As I am playing with Codec, I need a language mature and native enough it has libraries I need. Normally, we will think about React Native (with Expo) or Flutter (not that mature) to solve this. But, I also think about Kotlin Compose Multiplatform (Java is mature), NativeScript (NodeJS via nodify or runtime-node-api, only support Obj-C APIs), CapacitorJS / Ionic Framework (HTML is easier but SPA; Native should use Java and similar). In near native should use Xamarin / .Net MAUI, Android (Java/Kotlin), and .Net (C# / VB) Windows Form.
What I want is single Write Once, run Anywhere. Goodness knows, RN and KCMP may be the best choice. But, I need to consider the app must have a faster cold start, and codec library should have imported to Dart. So, Flutter should be the best choice. Originally, I just want to learn KCMP and disregards what futures I could have if I began to start RN or Flutter or native Android and iOS development like right now. Ugh... the illusion of free will.
Well, then. Puck (the great spirit) it. I will just go... by... ugh Wheel of Name giving me Flutter. So I must go by KCMP ;-) I just want to learn Android development with Kotlin (")> Let's Go!
Starting the Journey
this is journey about learning Kotlin, you could skip to the next session
React Native has Expo Framework, so that Flutter has Very Good CLI. For this one, I don't want to reinventing the wheel, I need a batteries-ready, boilerplate, template, or project generator like NextJS, Laravel, and Spring Boot (with all libraries can be add). Seems for Kotlin, nothing. Or I may have not yet finding these gems. The hunting can go on along the Development as Always.
This is my first time I am going with Kotlin, so I search it. The second list is Kotlin and Android Β |Β Android Developers and become the starting point by following every links and the referrals. And those I get to Create your Compose Multiplatform app | Kotlin Multiplatform Documentation; and well... I may need to learn few basics Kotlin first before I continue my journey.
I just know that Jetbrain has JetBrainsRuntime (JBR) that bundled with Java Chromium Embedded Framework (JCEF) by default when installed any Intellij-based IDE. Originally, I want to use Adoptium OpenJDK, but this JBR force me to analyze why it is better.
I tried to find Course in Udemy or any online Course that elaborate Kotlin. What I need is a long Course that explain deeply about Kotlin, a masterclass or bootcamp but not Android Course. Seems most courses only cover basic Functional Programming like Go or Javascript. Welp... It would be just fine to following official docs Kotlin Get Started and following JetBrains Academy Plugin for JetBrains IDEs, and also doing few on-boarding first to know Intellij Idea more. Oh! There actually is Coursera by Jetbrains exists, and it is free. And actually from the Plugin, an actual e-book Atomic Kotlin Learning Resources for the Kotlin Programming Language. Also, Kotlin Courses & Tutorials | Codecademy.
I met few difficulty in running on-boarding sample demo Kotlin and Java. I would follow tutorial hell for this Kotlin and related so I would understand the concept behind it. Seems there is few things that Intellij not setting up. As I said, I never really do Java in best practices except Android Tutorial, and even that, I do JavaScript coding style. I really hate too much abstraction and interface. Put that aside, I need to finish this on-boarding to ensure everything is ready.
All how to setup the project would be put inside Environment Setup. In here I would just raise few question. Even if I said built-in, seems it can't be reach within CMD. So, I would try to refine environment setup. By default it would take JDK from Adoptium, lets change that.
So, JBR with JCEF is just to run the IDE, not development. Meaning I need to download JBRSDK-JCEF from IDE. Well... I assume kotlin is a binary file instead of JAR, but seems not.
What I like about IDEs are they have starter pack or bootstraper of any project they have. Such as Eclipse, Netbeans, Visual Studio, and Intellij series. For now, I am supervising Kotlin bootstraper with Intellij, Maven, and Kotlin. I still figuring out outside download kotlin compiler, how could I get kotlinc via JBRSDK? Oh! also I would use Rainbow Brackets Plugin for JetBrains IDEs
In conclusion, I use Gradle DSL-Kotlin for Multi-Module Build. I love more common project structure with extendable use-case. Next question remains... Could I setup these project in other IDE like VSCode, Ecplise, or Netbeans? Could I code Kotlin Multiplatform without IntelijIDEA? What could be the simplest Kotlin setup and execution to mimick NodeJS and NPM based project? In Gradle based project, I can't see how the terminal execute Kotlin project, but in non-grade I can see it execute Java and import kotlin compile module.
Ok, I already finish learning everything about Kotlin, though takes 4 days. As I already know PHP, JavaScript, and Go; Kotlin actually pretty simple even though it has too many types of classes, like I want to complain you could just need max 3 type of classes, but you have like 5? Why... I only follow Intellij IDEA learning the GUI, inspecting every types of project structure in create project wizard, Inspecting of every Kotlin Use-Case, and learning via Kotlin Tours both beginner and Intermediate. But, not expect I would following OOP and Project Structure best practice of Kotlin and Compose Multi-platform. I would only use the Wizard. And, lets continue to having a quickstart and tours of Kotlin Compose Multi-platform.
Uuh, I actually just see this and Kotlin has actually all resources I need: Kotlin for Education, Learning materials overview, Learning resources. What ever, now I want to compare generating KCMP from Plugin and from KMP Web Wizard with covering all platform. I will use Android Studio to do so. Creating CMP project from plugin in Android result few deprecated on Android Gradle above 9.0.0. Also showing error from KMP Web Wizard, and both has same structure. And for now, I would learn KCMP following Create your Compose Multiplatform app | Kotlin Multiplatform Documentation.
Ok. Already done learning KCMP. The missing pieces of these learning, I just doing "book" reading, while I missing what modules is imported, how to breakdown components, see annotation, classess, or functions behind the logic. I would learn in doing the real works. For additional notes, by long consideration, this project should be done using Flutter or React Native, it is because I do not really need a very native and hard cross-platform solution. I just need Android and Desktop implementation.
The Server and Web
In KMP Wizard, it ask to generate Web (with Kotlin/JS and Kotlin/Wasm) and Server with Ktor. I thought if I make some action in commonMain, then if I serve the web server, the action would run via server. Something like RPC or NextJS React Server Action, which KCMP would generate the endpoints for us. But seems not. The action in button only works in browser and not sent back into Ktor.
I try to explore with Gemini (I am too lazy to explore properly... urgh...), React Native actually has Expo Router and Server Action. Then, Flutter has no built-in and must use Serverpod and Celest. And finally, Kotlin must use Kotlinx.rpc. Seems, I must explore again thoroughly. I have other use-case that I should use Kotlin and write-once, applied anywhere.
Environment Setup
After long consideration, here are few things need to setup:
Install JDK, either Eclipse Adoptium Temurin or JetbrainRuntime JRB-JDK via release page or built in Intellij IDEA- Install Android Studio via Jetbrain Toolbox
- Install extension Kotlin Multiplatform
Install Kotlin (kotlin-compiler), could via release or built-in- Install SDK via File > Project Structure > under Platform Settings > SDKs. Download new SDK from it, better use JBRSDK-JCEF. This can be accessed when create new project. Recommended to use v21 or v25 in 25 Dec 2025.
- Enable KotlinJavaRuntime and then in Project, do Tools > Kotlin > Configure Kotlin in Project
If everything setup, let's generate the project using KMP Wizard.
Blueprint
N/A
Development Notes
Uuh... Sorry. Seems I need to end this here. I should already know when to stop and choose wisely. "You could use any programming language" is actually b*llsh*t as my program is actually simple enough which no need to scale. So, I would go using React Native, not because it is easy, but because it met my minimal my requirement. Actually, KCMP is much more easier enough to learn.
So, I would leave this a piece of junks in here, so you could read my learning workflow. End of journey. Bye!
30 Dec 2025
Top comments (0)