Kite Ssot Extension
The single source of truth for your app's identity.
Apply the plugin to the root project and describe your app once. KiteSSOT carries those values out to Android and Apple for you, so the same name, version, and bundle id cannot drift apart across platforms.
Three lines are a complete setup:
kiteSsot {
appName = "Jetzy"
version = "1.4.0"
appId = "com.example.jetzy"
}Everything else is optional. Locales are discovered from your Compose resources, the shared module is detected when there is only one, and the Android application project is found the same way.
How the blocks work
Shared facts live here at the top. Anything that is genuinely Android-only or Apple-only lives in android or ios. Feature blocks such as logo and buildConfig switch themselves on simply by being configured, so there is no second flag to remember.
What runs, and when
Applying identity happens during an ordinary build. Changing files on disk never does. Logo installation and the Apple source tasks only run when you invoke them by name, and dryRun, backups, and the conflict policy still apply when you do.
Wiring values into your own build logic
Every input is a lazy Gradle Property, so you can hand one to another task without resolving it early:
val minSdk = kiteSsot.android.minSdk // Provider<Int>, still lazyProperties
Android-only settings. Configure with kiteSsot { android { } }.
Use modules { androidAppDirectory = ... }.
Android application id: appId plus KiteSsotAndroidExtension.idSuffix.
Use android { idSuffix = ... }.
Use modules { androidApps(...) }.
Use logo { androidSafeZone = ... }.
Use logo { backgroundColor = ... }.
Use logo { background = ... }.
Use logo { foreground = ... }.
Use backups.
Generated runtime constants for commonMain. Configure with kiteSsot { buildConfig { } }.
Use appId.
Normalized, de-duplicated locale tags.
Use logo { takeOverLegacyIcons = ... }.
Use modules { composeResources = ... }.
Use nativeOptIns { add(...) }.
Use android { filterResourcesToLocales = ... }.
Use nativeOptIns { projects(...) }.
Apple-only settings. Configure with kiteSsot { ios { } }.
Use ios { appDirectory = ... }.
Use ios { appIconDirectory = ... }.
Use ios { buildNumber = ... }.
Apple bundle id: appId plus KiteSsotIosExtension.bundleIdSuffix.
Use ios { bundleIdSuffix = ... }.
Use ios { infoPlist = ... }.
Use ios { marketingVersion = ... }.
Use ios { pbxproj = ... }.
Use ios { podfile = ... }.
Use ios { sync { renameSharedModule(from, to) } }.
Use ios { sync { renameSharedModule(from, to) } }.
Use jvmTarget.
App icon installation. Configure with kiteSsot { logo { } }.
Where your modules live. Configure with kiteSsot { modules { } }.
Kotlin/Native interop opt-in markers. Configure with kiteSsot { nativeOptIns { } }.
Which values KiteSSOT is allowed to apply. Configure with kiteSsot { propagate { } }.
Use android { applySdkLevels = ... }.
Use propagate { appName = ... }.
Use propagate { bundleId = ... }.
Configure nativeOptIns { } instead. Configuring the block is the opt-in.
Use propagate { locales = ... }.
Configure logo { } instead. Configuring the block is the opt-in.
Call ios { sync { renameSharedModule(from, to) } } instead.
Use propagate { version = ... }.
The selected shared KMP project path.
Use ios { sync { sanitizePlist = ... } }.
The one formula that turns version into a store build number.
Use modules { shared = ... }.
The resolved Android versionCode for this build.
Use android { versionCode = ... }.
Use version.
Browser Kotlin/JS helpers. Configure with kiteSsot { web { } }.
Functions
Configure SDK levels, the Android id suffix, and the Play re-upload dial.
Generate a Kotlin object of public runtime configuration.
Configure the Apple bundle suffix, build number, paths, and source sync.
Point KiteSSOT at your foreground and background art.
Tell KiteSSOT where the shared and Android application projects are.
Add opt-in markers to the selected Kotlin/Native compilations.
Turn individual value categories off without deleting their configuration.
Set the shared build-number formula. See scheme.
Configure optional browser Kotlin/JS source generation.