CLI Reference
Create, personalize, diagnose, and prepare a KMP project with BowlerKit.
Use a CLI distribution that includes KMP support; an older Expo/Flutter-only CLI cannot perform the KMP-specific checks and write-back.
Create
bowler create my-kmp-appSelect Kotlin Multiplatform and the Account or Guest profile. Account receives the backend bundle; Guest receives the standalone landing page. The generated .bowlerkit/project.json records the selection. See Quick Start.
Setup
From the generated project root:
bowler setupbowler setup is a rerunnable wizard for display name, Android application ID/iOS bundle ID, deep link scheme, localized identity, and API origin. Firebase credentials must be replaced separately after renaming. See Rename Package.
Doctor
bowler doctor kmpIt checks JDK 21, Android SDK, the Gradle wrapper, Xcode on macOS, and Firebase configuration. Diagnose the toolchain before attempting native builds; see Prerequisites.
Ship
From the generated project root:
bowler ship init
bowler ship status
bowler ship verifyThese commands detect local project state, report checklist progress, and run the pre-release configuration gate. To connect this machine, bind the project, and synchronize with bowlerShip:
bowler ship connect # verify and store the API token (once per machine)
bowler ship add # bind this project to its bowlerShip app
bowler ship syncsync defaults to a dry run. Review the CLI output before choosing write-back.
bowler ship manages release preparation and bowlerShip project state. It reads RevenueCat, AdMob, and Firebase configuration and writes values back to mobile-app/local.properties, mobile-app/iosApp/Configuration/Config.local.xcconfig, and the shared BillingModels.kt entitlement configuration.
The KMP release workflow described by the template is:
bowler ship changelog releaseIt stamps Android and iOS versions together. Check the Release guide before running it: release operations can commit and tag your project. It does not replace building and signing the native artifacts.
Build checks
From generated mobile-app/:
./gradlew -Pbowlerkit.iosOnly=false check :androidApp:assembleDebug :androidApp:assembleRelease
./gradlew :sharedLogic:iosSimulatorArm64TestThe second command requires macOS. On macOS, the explicit bowlerkit.iosOnly=false property enables the Android modules, which are otherwise excluded from the default module graph.
