This is a Kotlin Multiplatform project targeting Android, iOS, Web, Desktop (JVM).
-
/iosApp contains an iOS application. Even if you’re sharing your UI with Compose Multiplatform, you need this entry point for your iOS app. This is also where you should add SwiftUI code for your project.
-
/shared is for code that will be shared across your Compose Multiplatform applications. It contains several subfolders:
- commonMain is for code that’s common for all targets.
- Other folders are for Kotlin code that will be compiled for only the platform indicated in the folder name. For example, if you want to use Apple’s CoreCrypto for the iOS part of your Kotlin app, the iosMain folder would be the right place for such calls. Similarly, if you want to edit the Desktop (JVM) specific part, the jvmMain folder is the appropriate location.
Use the run configurations provided by the run widget in your IDE's toolbar. You can also use these commands and options:
- Android app:
./gradlew :androidApp:assembleDebug - Desktop app:
- Hot reload:
./gradlew :desktopApp:hotRun --auto - Standard run:
./gradlew :desktopApp:run - Development QA Workbench:
BOARDERLESS_QA_MODE=true ./gradlew :desktopApp:run
- Hot reload:
- Web app:
- Wasm target (faster, modern browsers):
./gradlew :webApp:wasmJsBrowserDevelopmentRun - JS target (slower, supports older browsers):
./gradlew :webApp:jsBrowserDevelopmentRun
- Wasm target (faster, modern browsers):
- iOS app: open the /iosApp directory in Xcode and run it from there. The simulator uses
127.0.0.1:3000on the simulator; physical iPhone builds use the current development LAN host192.168.68.65:3000via thesdk=iphoneos*setting iniosApp/Configuration/Config.xcconfig. For another network, change that device setting or explicitly overrideBOARDERLESS_BACKEND_HOSTwhen building. Rebuild/reinstall after changing it; allow Local Network access on the iPhone. The API and the storage host issued in signed tickets must both be reachable from the device. These HTTP/LAN settings are for development, not production deployment. The Xcode build phase automatically finds a system JDK, Android Studio, IntelliJ IDEA, or the JetBrains Toolbox runtime; if none is available it reports an actionable error.
The QA Workbench is excluded from the normal product UI unless the environment flag is explicitly enabled. On Desktop, start it with:
BOARDERLESS_QA_MODE=true ./gradlew :desktopApp:runWindows PowerShell:
$env:BOARDERLESS_QA_MODE = "true"
.\gradlew.bat :desktopApp:runThe QA control opens an acceptance questionnaire based on docs/產品 QA 品質檢驗 SOP.md. It can capture the BoarderLess window, attach existing PNG/JPEG evidence from mobile devices, and generate self-contained HTML and PDF reports in Documents/BoarderLess QA. Screenshot bytes and form answers remain in the QA session and exported files; they are not written into Workspace content or sent to the backend.
See Release 打包設定 for GitHub Actions releases, Android signing, and iOS simulator/archive/IPA packaging. Local iOS: APP_VERSION=1.2.3 ./scripts/package-ios.sh.
Use the run button in your IDE's editor gutter, or run tests using Gradle tasks:
- Android tests:
./gradlew :shared:testAndroidHostTest - Desktop tests:
./gradlew :shared:jvmTest - Web tests:
- Wasm target:
./gradlew :shared:wasmJsTest - JS target:
./gradlew :shared:jsTest
- Wasm target:
- iOS tests:
./gradlew :shared:iosSimulatorArm64Test
Learn more about Kotlin Multiplatform, Compose Multiplatform, Kotlin/Wasm…
We would appreciate your feedback on Compose/Web and Kotlin/Wasm in the public Slack channel #compose-web. If you face any issues, please report them on YouTrack.