google / brotli

Brotli compression format
MIT License
13.3k stars 1.22k forks source link

Kotlin Multiplatform #1123

Open StefanOltmann opened 5 months ago

StefanOltmann commented 5 months ago

I want to request official Kotlin Multiplatform support.

To achieve this, the Java implementation could be transformed into Kotlin and subsequently published as outlined in the guidelines provided at https://kotlinlang.org/docs/multiplatform-publish-lib.html#host-requirements. This approach ensures continued usability for pure Java projects.

Additionally, it's worth noting that the artifact on Maven Central appears to be outdated. Incorporating the process of pushing new artifacts to Maven Central into the build workflow would be a valuable improvement. This issue can also be addressed in this endeavor.

eustas commented 5 months ago

Will do, alongside with coming v1.1.1 release.

slandelle commented 5 months ago

Hi

To achieve this, the Java implementation could be transformed into Kotlin

Not sure what is meant exactly here. Some non Kotlin developers won't want to add a dependency to the kotlin-stdlib (extra dependency, extra luggage). IMO, if there was to be a pure Kotlin implementation, it should be a new one that would live alongside the Java one, not a replacement.

eustas commented 5 months ago

I see no problems having both Java and Kotlin (once Kotlin version could be transpiled from Java one).

eustas commented 5 months ago

@slandelle correct, not a replacement, of course.

YohanSciubukgian commented 5 months ago

Could it be supported on JAVA 8+ ?

StefanOltmann commented 5 months ago

Could it be supported on JAVA 8+ ?

I am not sure what you are asking.

Kotlin produces by default Java 8 bytecode and a Kotlin port should just work.

https://kotlinlang.org/docs/faq.html#which-versions-of-jvm-does-kotlin-target

YohanSciubukgian commented 5 months ago

As I have a JAVA 8 project, I was wondering if this could work for my project. I guess the bytecode interoperability should do the job. Thanks for your answer! 🙂

eustas commented 4 months ago

Added kotlin implementation of decoder. Looking at requirements for publishing.

StefanOltmann commented 4 months ago

Great news!

There is a official tutorial: https://kotlinlang.org/docs/multiplatform-publish-lib.html#disable-sources-publication

Look at my project for a sample config: https://github.com/Ashampoo/kim/blob/80028c814de583737f3a95599745d12ca5051df8/build.gradle.kts#L460-L513

StefanOltmann commented 4 months ago

@eustas The Java dependencies prevent it from being multiplatform.

https://github.com/google/brotli/blob/ccec9628e49208173c9a8829ff66d0d7f6ceff5f/java/org/brotli/dec/kt/BrotliInputStream.kt#L9-L10

If those two classes represent everything that is used from Java API, you could replace it using https://github.com/Kotlin/kotlinx-io

Kotlin Multiplatform support is way more useful than just Kotlin for JVM.

On JVM we can already use the Java version, but we need a pure Kotlin implementation for Multiplatform support. So no usage of JVM api.

umesh0492 commented 2 months ago

Hello, any updates here ?