{"id":15069405,"url":"https://github.com/sureshg/kotlin-mpp-playground","last_synced_at":"2026-02-12T08:31:34.888Z","repository":{"id":170514180,"uuid":"627342335","full_name":"sureshg/kotlin-mpp-playground","owner":"sureshg","description":"🎨 Kotlin Multiplatform playground! ","archived":false,"fork":false,"pushed_at":"2026-02-06T00:21:23.000Z","size":664650,"stargazers_count":9,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-02-06T10:27:09.744Z","etag":null,"topics":["compose-web","coroutines","graalvm-native-image","java","jvm","kotlin","kotlin-multiplatform","kotlin-native","openjdk","structured-concurrency","virtual-threads","wasm"],"latest_commit_sha":null,"homepage":"https://suresh.dev/kotlin-mpp-playground/app","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sureshg.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-04-13T09:11:28.000Z","updated_at":"2026-02-06T00:09:23.000Z","dependencies_parsed_at":"2025-12-30T07:05:40.098Z","dependency_job_id":null,"html_url":"https://github.com/sureshg/kotlin-mpp-playground","commit_stats":null,"previous_names":["sureshg/kotlin-mpp-playground"],"tags_count":21,"template":true,"template_full_name":null,"purl":"pkg:github/sureshg/kotlin-mpp-playground","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sureshg%2Fkotlin-mpp-playground","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sureshg%2Fkotlin-mpp-playground/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sureshg%2Fkotlin-mpp-playground/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sureshg%2Fkotlin-mpp-playground/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sureshg","download_url":"https://codeload.github.com/sureshg/kotlin-mpp-playground/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sureshg%2Fkotlin-mpp-playground/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29361818,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-12T01:03:07.613Z","status":"online","status_checked_at":"2026-02-12T02:00:06.911Z","response_time":55,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["compose-web","coroutines","graalvm-native-image","java","jvm","kotlin","kotlin-multiplatform","kotlin-native","openjdk","structured-concurrency","virtual-threads","wasm"],"created_at":"2024-09-25T01:42:18.355Z","updated_at":"2026-02-12T08:31:34.875Z","avatar_url":"https://github.com/sureshg.png","language":"Kotlin","funding_links":[],"categories":[],"sub_categories":[],"readme":"🎨 Kotlin Multiplatform Playground!\n----------\n\n[![GitHub Workflow Status][gha_badge]][gha_url]\n[![OpenJDK Version][java_img]][java_url]\n[![Kotlin release][kt_img]][kt_url]\n[![Maven Central Version][maven_img]][maven_url]\n[![Ktor][ktor_img]][ktor_url]\n[![Style guide][ktfmt_img]][ktfmt_url]\n\nThis repo shows a Gradle multi-project build structure that uses the [Kotlin Multiplatform][Kotlin Multiplatform] to\nbuild a [JVM][Kotlin-JVM], [JS][Kotlin-JS], [Desktop][Compose-Multiplatform]\nand [Compose Web (wasm)][Compose-Multiplatform] applications.\n\n### Install OpenJDK EA Build\n\n```bash\n$ curl -s \"https://get.sdkman.io\" | bash\n$ sdk i java 27.ea-open\n```\n\n### Build \u0026 Run\n\n```bash\n$ ./gradlew build [-Pskip.test]\n$ backend/jvm/build/libs/jvm\n\n# Publish to local repo\n$ ./gradlew buildAndPublish\n```\n\n### Publishing\n\nPush a new tag to trigger the release workflow and publish the artifacts. That's it 🎉.\nThe next version will be based on the semantic version scope (`major`, `minor`, `patch`)\n\n   ```bash\n   $ ./gradlew pushSemverTag \"-Psemver.scope=patch\"\n\n   # To see the current version\n   # ./gradlew v\n\n   # Print the new version\n   # ./gradlew printSemver \"-Psemver.scope=patch\"\n   ```\n\n\u003cdetails\u003e\n\u003csummary\u003e \u003cb\u003eMultiplatform Targets\u003c/b\u003e\u003c/summary\u003e\n\n### JVM\n\n* Build and Run\n\n  ```bash\n  # Kotlin Multiplatform\n  $ ./gradlew :shared:jvmRun\n  $ ./gradlew :shared:jvmDistZip\n\n  # Kotlin JVM\n  $ ./gradlew :backend:jvm:run\n  $ ./gradlew :backend:jvm:build\n  $ ./gradlew :backend:jvm:jdeprscan\n  $ ./gradlew :backend:jvm:printModuleDeps\n\n  # Benchmark\n  $ ./gradlew :benchmark:benchmark\n  ```\n* GraalVM Native Image\n\n  ```bash\n  $ sdk u java graalvm-ce-dev\n  $ ./gradlew :backend:jvm:nativeCompile\n  $ backend/jvm/build/native/nativeCompile/jvm\n\n  # To generate the native image configurations\n  $ ./gradlew :backend:jvm:run -Pagent\n  $ curl http://localhost:8080/shutdown\n  $ ./gradlew :backend:jvm:metadataCopy\n\n  ```\n\n* Containers\n\n  ```bash\n  # Running app on container\n  $ docker run \\\n           -it \\\n           --rm \\\n           --pull always \\\n           --workdir /app \\\n           --publish 8080:8080 \\\n           --publish 8081:8081 \\\n           --name kotlin-mpp-playground \\\n           --mount type=bind,source=$(pwd),destination=/app,readonly \\\n           openjdk:27-ea-slim /bin/bash -c \"printenv \u0026\u0026 backend/jvm/build/libs/jvm\"\n\n   # Build a container image and run\n   $ ./gradlew :backend:jvm:jibDockerBuild\n   $ docker run -it --rm --name jvm -p 8080:8080 -p 9898:9898 sureshg/jvm\n   $ docker stats\n  ```\n\n* OpenTelemetry\n\n  ```bash\n   # Run otel tui\n   $ brew install ymtdzzz/tap/otel-tui\n   $ otel-tui\n\n   # or run hyperdx\n   $ docker run \\\n            -it --rm \\\n            -p 8081:8080 \\\n            -p 8123:8123 \\\n            -p 4317:4317 \\\n            -p 4318:4318 \\\n            --name hyperdx \\\n            --ulimit nofile=262144:262144 \\\n             hyperdx/hyperdx-local:latest\n   $ open http://localhost:8081/search\n\n   # Run the app\n   $ docker run -it --rm \\\n                --name jvm \\\n                -p 8080:8080 \\\n                -p 9898:9898 \\\n                sureshg/jvm:latest\n   $ curl -v -X GET http://localhost:8080/trace\n\n   # Change/Reset log level\n   $ curl -v -X POST http://localhost:8080/loglevel/dev.suresh.http/debug\n   $ curl -v -X POST http://localhost:8080/loglevel/reset\n  ```\n\n* JVM Agents\n\n  ```bash\n  # Normal agent with Launcher-Agent-Class\n  $ ./gradlew :backend:agent:jfr:build\n  $ backend/agent/jfr/build/libs/jfr\n\n  # Custom OpenTelemetry agent\n  $ ./gradlew :backend:agent:otel:build\n  ```\n\n* AOT Cache\n\n  ```bash\n  # Training Run to create AOT cache (JDK_AOT_VM_OPTIONS)\n  $ java --enable-preview \\\n         -XX:+UseZGC \\\n         -XX:+UseCompactObjectHeaders \\\n         -XX:AOTCacheOutput=app.aot \\\n         -jar backend/jvm/build/libs/jvm-all.jar\n\n  # Run with AOT\n  $ java --enable-preview \\\n         -XX:+UseZGC \\\n         -XX:+UseCompactObjectHeaders \\\n         -XX:AOTCache=app.aot \\\n         -jar backend/jvm/build/libs/jvm-all.jar\n\n  # Show native memory details\n  $ jcmd jvm System.map\n  ```\n\n* Tests\n\n  ```bash\n  $ ./gradlew :backend:jvm:test -PktorTest\n  $ ./gradlew :backend:jvm:test -Pk8sTest\n  $ ./gradlew :backend:jvm:jvmRun -DmainClass=dev.suresh.lang.SysCallKt --quiet\n  ```\n\n* ABI Validation \u0026 Missing Targets\n\n  ```bash\n  $ ./gradlew :shared:updateLegacyAbi\n  $ ./gradlew :shared:checkLegacyAbi\n\n  # KMP missing targets report\n  $ ./gradlew :shared:kmpMissingTargets\n  $ open shared/build/reports/kmp-missing-targets.md\n  ```\n\n### Wasm/JS\n\n  ```bash\n  $ ./gradlew :web:jsBrowserProductionRun -t\n  $ ./gradlew :web:wasmJsBrowserProductionRun -t\n  $ ./gradlew kotlinUpgradePackageLock\n  $ ./gradlew kotlinWasmUpgradePackageLock\n\n  # Kobweb\n  $ kobweb run -p compose/web\n  $ ./gradlew :compose:html:kobwebStart -t\n  $ ./gradlew :compose:html:kobwebStop\n  ```\n\n### Native\n\n  ```bash\n  $ ./gradlew :backend:native:build\n  $ find backend/native/build/bin -type f -perm +111 -exec ls -lh {} \\; | awk '{print $9 \": \" $5}'\n\n  # Arch specific binaries\n  $ ./gradlew :backend:native:macosArm64Binaries\n  $ ./gradlew :backend:native:macosX64Binaries\n  $ ./gradlew :backend:native:macOsUniversalBinary\n\n  # Native container image\n  $ ./gradlew :backend:native:jibDockerBuild\n  $ docker run -it --rm --name native sureshg/native\n\n  # Testing Windows Binary\n  $  docker run --rm --platform=\"linux/amd64\" \\\n                -e DISPLAY=host.docker.internal:0 \\\n                -v \"$PWD\":/app \\\n                scottyhardy/docker-wine:latest wine /app/backend/native/build/bin/mingwX64/releaseExecutable/native.exe\n\n  # Debug distroless image\n  # docker run -it --entrypoint=sh gcr.io/distroless/cc-debian12:debug\n\n  # Test linux binary on ARM64 MacOS\n  $ ./gradlew :backend:native:linuxArm64Binaries\n  $ docker run -it -rm \\\n           --publish 8080:80 \\\n           --mount type=bind,source=$(pwd),destination=/app,readonly \\\n           debian:stable-slim\n    # /app/backend/native/build/bin/linuxArm64/releaseExecutable/native.kexe\n    # libtree -v /app/backend/native/build/bin/linuxArm64/releaseExecutable/native.kexe\n\n  # Build native binaries on container\n  $ docker run -it --rm \\\n           --platform=linux/amd64 \\\n           --pull always \\\n           --workdir /app \\\n           --name kotlin-native-build \\\n           --mount type=bind,source=$(pwd),destination=/app \\\n           --mount type=bind,source=${HOME}/.gradle,destination=/root/.gradle \\\n           openjdk:27-ea-slim /bin/bash\n  # apt update \u0026\u0026 apt install libtree tree\n  # ./gradlew --no-daemon :backend:native:build\n  #  backend/native/build/bin/linuxX64/releaseExecutable/native.kexe\n  ```\n\n### Compose\n\n  ```bash\n  # Compose Desktop\n  $ ./gradlew :compose:cmp:runDistributable\n  $ ./gradlew :compose:cmp:packageDistributionForCurrentOS\n  $ ./gradlew :compose:cmp:packageReleaseUberJarForCurrentOS\n  $ ./gradlew :compose:cmp:suggestModules\n\n  # Hot Reload\n  $ ./gradlew :compose:cmp:hotRunJvm --mainClass=MainKt [--auto]\n\n  # Compose Web\n  $ ./gradlew :compose:cmp:wasmJsBrowserProductionRun -t\n\n  # Compose multiplatform tests\n  $ ./gradlew :compose:cmp:allTests\n  $ ./gradlew :compose:cmp:jvmTest\n  ```\n\n### Publishing\n\n  ```bash\n  $ ./gradlew publishAllPublicationsToLocalRepository\n\n  # Publishing to all repo except Maven Central\n  $ ./gradlew buildAndPublish\n\n  # Maven Central Publishing\n  # https://central.sonatype.org/publish/publish-portal-gradle/#alternatives\n  # https://vanniktech.github.io/gradle-maven-publish-plugin/central/#in-memory-gpg-key\n  $ gpg --export-secret-keys --armor XXXXXXXX | grep -v '\\-\\-' | grep -v '^=.' | tr -d '\\n'\n  # OR\n  $ gpg --export-secret-keys --armor XXXXXXXX | awk 'NR == 1 { print \"SIGNING_KEY=\" } 1' ORS='\\\\n'\n\n  $ export ORG_GRADLE_PROJECT_mavenCentralUsername=\u003cUsername from https://central.sonatype.com/account\u003e\n  $ export ORG_GRADLE_PROJECT_mavenCentralPassword=\u003cToken from https://central.sonatype.com/account\u003e\n  $ export ORG_GRADLE_PROJECT_signingInMemoryKeyId=\u003cGPG Key ID\u003e\n  $ export ORG_GRADLE_PROJECT_signingInMemoryKeyPassword=\u003cPassword\u003e\n  $ export ORG_GRADLE_PROJECT_signingInMemoryKey=$(gpg --export-secret-keys --armor ${ORG_GRADLE_PROJECT_signingInMemoryKeyId} | grep -v '\\-\\-' | grep -v '^=.' | tr -d '\\n')\n\n  # For publishing to MavenCentral\n  $ ./gradlew publishToMavenCentral\n  ```\n\n### Misc\n\n  ```bash\n  # Dependency Insight\n  $ ./gradlew dependencies\n  $ ./gradlew :shared:dependencies --configuration testRuntimeClasspath\n\n  $ ./gradlew -q :build-logic:dependencyInsight --dependency kotlin-compiler-embeddable --configuration RuntimeClasspath\n  $ ./gradlew -q :shared:dependencyInsight --dependency slf4j-api --configuration RuntimeClasspath\n\n  $ ./gradlew :backend:jvm:listResolvedArtifacts\n\n  # Task Graph\n  $ ./gradlew tasks --all\n  $ ./gradlew build --task-graph\n\n  # Clean\n  $ ./gradlew cleanAll\n\n  # Gradle Toolchains\n  $ ./gradlew buildEnvironment\n  $ ./gradlew updateDaemonJvm\n  $ ./gradlew javaToolchains\n  $ ./gradlew wrapper --gradle-version=x.x.x\n\n  # Gradle Best Practices\n  $ ./gradlew -p gradle/build-logic :bestPracticesBaseline\n  $ ./gradlew checkBuildLogicBestPractices\n\n  # GitHub Actions lint\n  $ actionlint\n  ```\n\n\u003c/details\u003e\n\n### Deployed App and Docs\n\n- [Web App](https://suresh.dev/kotlin-mpp-playground/app/)\n- [Docs](https://suresh.dev/kotlin-mpp-playground/docs)\n- [Coverage](https://suresh.dev/kotlin-mpp-playground/reports)\n- [Tests](https://suresh.dev/kotlin-mpp-playground/tests)\n\n### Verifying Artifacts\n\nThe published artifacts are signed using this [key][signing_key]. The best way to verify artifacts\nis [automatically with Gradle][gradle_verification].\n\n[gradle_verification]: https://docs.gradle.org/current/userguide/dependency_verification.html#sec:signature-verification\n\n[signing_key]: https://keyserver.ubuntu.com/pks/lookup?op=get\u0026search=0xc124db3a8ad1c13f7153decdf209c085c8b53ca1\n\n### Resources\n\n- [🔍 Kotlin Multiplatform Package Search](https://package-search.jetbrains.com/search?query=ktor\u0026onlyMpp=true)\n- [🎨 Kotlin Multiplatform Wizard](https://kmp.jetbrains.com/)\n- [📏 Jetbrains Compose Rules](https://mrmans0n.github.io/compose-rules/rules/)\n\n\u003c!-- Badges --\u003e\n\n[java_url]: https://jdk.java.net/\n\n[java_img]: https://img.shields.io/badge/OpenJDK-27-e76f00?logo=openjdk\u0026logoColor=e76f00\n\n[kt_url]: https://github.com/JetBrains/kotlin/releases/latest\n\n[kt_img]: https://img.shields.io/github/v/release/Jetbrains/kotlin?include_prereleases\u0026color=7f53ff\u0026label=Kotlin\u0026logo=kotlin\u0026logoColor=7f53ff\n\n[maven_img]: https://img.shields.io/maven-central/v/dev.suresh.kmp/shared?logo=apachemaven\u0026logoColor=cd2237\u0026color=cd2237\n\n[maven_url]: https://central.sonatype.com/search?q=dev.suresh.kmp\u0026namespace=dev.suresh.kmp\n\n[maven_dl]: https://search.maven.org/remote_content?g=dev.suresh.kmp\u0026a=shared\u0026v=LATEST\n\n[gha_url]: https://github.com/sureshg/kotlin-mpp-playground/actions/workflows/build.yml\n\n[gha_badge]: https://img.shields.io/github/actions/workflow/status/sureshg/kotlin-mpp-playground/build.yml?branch=main\u0026color=green\u0026label=Build\u0026logo=Github-Actions\u0026logoColor=green\n\n[sty_url]: https://kotlinlang.org/docs/coding-conventions.html\n\n[sty_img]: https://img.shields.io/badge/style-Kotlin--Official-40c4ff.svg?style=for-the-badge\u0026logo=kotlin\u0026logoColor=40c4ff\n\n[ktfmt_url]: https://github.com/facebookincubator/ktfmt#ktfmt\n\n[ktfmt_img]: https://img.shields.io/badge/code%20style-%E2%9D%A4-FF4081.svg?logo=kotlin\u0026logoColor=FF4081\n\n[cmp_url]: https://github.com/JetBrains/compose-multiplatform/releases\n\n[cmp_img]: https://img.shields.io/github/v/release/JetBrains/compose-multiplatform?color=3cdc84\u0026label=Compose%20MP\u0026logo=JetpackCompose\u0026logoColor=3cdc84\n\n[ktor_url]: https://search.maven.org/artifact/io.ktor/ktor-bom\n\n[ktor_download]: https://search.maven.org/remote_content?g=io.ktor\u0026a=ktor-client\u0026v=LATEST\n\n[ktor_img]: https://img.shields.io/maven-central/v/io.ktor/ktor-bom?color=4a79fe\u0026label=Ktor\u0026logo=data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDE2IDE2IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgogIDxkZWZzPgogICAgPHN0eWxlPi5he2ZpbGw6bm9uZTt9LmJ7Y2xpcC1wYXRoOnVybCgjYSk7fS5je2ZpbGw6I2ZmZjt9PC9zdHlsZT4KICAgIDxjbGlwUGF0aCBpZD0iYSI+CiAgICAgIDxyZWN0IGNsYXNzPSJhIiB4PSIxNC43IiB5PSIxMSIgd2lkdGg9IjE3MSIgaGVpZ2h0PSIxNTEiLz4KICAgIDwvY2xpcFBhdGg+CiAgICA8Y2xpcFBhdGggaWQ9ImNsaXBQYXRoMTMiPgogICAgICA8cmVjdCBjbGFzcz0iYSIgeD0iMTQuNyIgeT0iMTEiIHdpZHRoPSIxNzEiIGhlaWdodD0iMTUxIi8+CiAgICA8L2NsaXBQYXRoPgogIDwvZGVmcz4KICA8cGF0aCBjbGFzcz0iYyIgdHJhbnNmb3JtPSJtYXRyaXgoLjE2NCAwIDAgLjE2NCAtOC4zNyAtMS44MSkiIGQ9Im0xMDAgMTEtNDIuMyAyNC40djQ4LjlsNDIuMyAyNC40IDQyLjMtMjQuNHYtNDguOXptMzAuMiA2Ni4zLTMwLjIgMTcuNC0zMC4yLTE3LjR2LTM0LjlsMzAuMi0xNy40IDMwLjIgMTcuNHoiIGNsaXAtcGF0aD0idXJsKCNjbGlwUGF0aDEzKSIvPgo8L3N2Zz4K\n\n[Kotlin-JVM]: https://kotlinlang.org/docs/jvm-get-started.html\n\n[Kotlin-JS]: https://kotlinlang.org/docs/js-project-setup.html\n\n[Kotlin Multiplatform]: https://kotlinlang.org/docs/multiplatform.html\n\n[Compose-Multiplatform]: https://github.com/JetBrains/compose-multiplatform\n\n[Kotlin Multiplatform DSL]: https://kotlinlang.org/docs/multiplatform-dsl-reference.html\n\n[simple-icons-logo]: https://simpleicons.org/icons/kotlin.svg\n\n\n\u003cdetails\u003e\n\u003csummary\u003eModule Dependency Graph\u003c/summary\u003e\n\n### Module Dependency\n\n```mermaid\n%%{\n  init: {\n    'theme': 'neutral'\n  }\n}%%\ngraph LR\n    subgraph :backend\n        :backend:native[\"native\"]\n        :backend:data[\"data\"]\n        :backend:profiling[\"profiling\"]\n        :backend:jvm[\"jvm\"]\n        :backend:security[\"security\"]\n    end\n    subgraph :compose\n        :compose:desktop[\"desktop\"]\n        :compose:html[\"html\"]\n    end\n    subgraph :dep-mgmt\n        :dep-mgmt:bom[\"bom\"]\n        :dep-mgmt:catalog[\"catalog\"]\n    end\n    subgraph :meta\n        :meta:compiler[\"compiler\"]\n        :meta:ksp[\"ksp\"]\n    end\n    subgraph :meta:compiler\n        :meta:compiler:plugin[\"plugin\"]\n    end\n    subgraph :meta:ksp\n        :meta:ksp:processor[\"processor\"]\n    end\n    subgraph :web\n        :web:js[\"js\"]\n        :web:wasm[\"wasm\"]\n    end\n    :web:js --\u003e :shared\n    :benchmark --\u003e :shared\n    :backend:native --\u003e :shared\n    :web:wasm --\u003e :shared\n    :compose:desktop --\u003e :shared\n    :meta:compiler:plugin --\u003e :shared\n    :meta:ksp:processor --\u003e :shared\n    :backend:data --\u003e :shared\n    :backend:profiling --\u003e :shared\n    :compose:html --\u003e :shared\n    : --\u003e :backend\n    : --\u003e :benchmark\n    : --\u003e :compose\n    : --\u003e :meta\n    : --\u003e :shared\n    : --\u003e :web\n    : --\u003e :backend:data\n    : --\u003e :backend:jvm\n    : --\u003e :backend:native\n    : --\u003e :backend:profiling\n    : --\u003e :backend:security\n    : --\u003e :compose:desktop\n    : --\u003e :compose:html\n    : --\u003e :meta:compiler\n    : --\u003e :meta:ksp\n    : --\u003e :web:js\n    : --\u003e :web:wasm\n    : --\u003e :meta:compiler:plugin\n    : --\u003e :meta:ksp:processor\n    : --\u003e :dep-mgmt:bom\n    : --\u003e :dep-mgmt:catalog\n    :backend:jvm --\u003e :shared\n    :backend:jvm --\u003e :backend:data\n    :backend:jvm --\u003e :backend:profiling\n    :backend:jvm --\u003e :web:js\n    :backend:jvm --\u003e :web:wasm\n    :backend:security --\u003e :shared\n```\n\n\u003c/details\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsureshg%2Fkotlin-mpp-playground","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsureshg%2Fkotlin-mpp-playground","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsureshg%2Fkotlin-mpp-playground/lists"}