BowlerKitBowlerKit

CLI Reference

10/11/2026

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-app

Select 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 setup

bowler 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 kmp

It 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 verify

These 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 sync

sync 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 release

It 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:iosSimulatorArm64Test

The 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.