Project-agnostic, production-ready Kotlin Multiplatform starter for Android & iOS.
KMP Starter Template is a multi-module boilerplate built with:
- Clean Architecture (data / domain / presentation)
- Compose Multiplatform
- Koin (DI)
- RevenueCat (In-App Purchases)
- Mixpanel (Analytics)
- Remote Config
- Room Database
- DataStore
- Modular Navigation
- Notifications
- Logging
- Platform utilities
It removes the repetitive setup work (analytics, purchases, remote config, etc.) so you can focus on building your app.
Each feature is isolated in its own module:
features/
analytics/
core/
database/
navigation/
purchases/
remoteconfig/
your-feature/
Every feature follows:
data/
domain/
presentation/
You can easily swap implementations (e.g., replace Mixpanel with PostHog) by changing the data layer.
Start with the CLI —
@devatrii/starter .
It scaffolds a full project under your app name and package, rewires modules and namespaces for you,
and typically saves 2–3 hours of manual rename and setup work.
The CLI is in alpha — it generates projects successfully, but expect rough edges. If you hit an issue, please report it on GitHub Issues.
Requirements: Node.js 18+, Java 17
# Install globally
npm install -g @devatrii/starter
# Interactive create (prompts for name, package, modules, etc.)
starter create
# Or with flags
starter create \
--name MyApp \
--package com.example.myapp \
--feature notes \
--modules all
# Init starter.json in an existing project
starter init
# Add a starter module to an existing project
starter include --module purchases
# Print CLI version
starter -vCommands: create, init, include, version (-v / --version).
Open the generated project in Android Studio (KMP Plugin required).
Open iosApp/iosApp.xcodeproj in Xcode to run on iOS.
We are working to ship KMP Starter as published Maven libraries so existing projects can adopt modules incrementally (starter utilities, UI, and feature layers) without cloning the full template.
Artifacts are published under io.github.devatrii. They are not fully stable yet—APIs and
module boundaries may change between releases.
**Example libs.versions.toml for consumers:
**
[versions]
starter = "x.x.x"
[libraries]
# Starter
starter-core = { module = "io.github.devatrii:starter-core", version.ref = "starter" }
starter-utils = { module = "io.github.devatrii:starter-utils", version.ref = "starter" }
starter-native-bindings = { module = "io.github.devatrii:starter-native-bindings", version.ref = "starter" }
starter-ui-utils = { module = "io.github.devatrii:starter-ui-utils", version.ref = "starter" }
starter-ui-components = { module = "io.github.devatrii:starter-ui-components", version.ref = "starter" }
starter-ui-layouts = { module = "io.github.devatrii:starter-ui-layouts", version.ref = "starter" }
# Features
starter-feature-navigation = { module = "io.github.devatrii:feature-navigation", version.ref = "starter" }
starter-feature-analytics-data = { module = "io.github.devatrii:feature-analytics-data", version.ref = "starter" }
starter-feature-analytics-data-firebase = { module = "io.github.devatrii:feature-analytics-data-firebase", version.ref = "starter" }
starter-feature-analytics-domain = { module = "io.github.devatrii:feature-analytics-domain", version.ref = "starter" }
starter-feature-core-data = { module = "io.github.devatrii:feature-core-data", version.ref = "starter" }
starter-feature-core-domain = { module = "io.github.devatrii:feature-core-domain", version.ref = "starter" }
starter-feature-core-presentation = { module = "io.github.devatrii:feature-core-presentation", version.ref = "starter" }
starter-feature-locale = { module = "io.github.devatrii:feature-locale", version.ref = "starter" }
starter-feature-remote-config-data = { module = "io.github.devatrii:feature-remote-config-data", version.ref = "starter" }
starter-feature-remote-config-domain = { module = "io.github.devatrii:feature-remote-config-domain", version.ref = "starter" }
starter-feature-remote-config-presentation = { module = "io.github.devatrii:feature-remote-config-presentation", version.ref = "starter" }
starter-feature-purchases-data = { module = "io.github.devatrii:feature-purchases-data", version.ref = "starter" }
starter-feature-purchases-domain = { module = "io.github.devatrii:feature-purchases-domain", version.ref = "starter" }
starter-feature-purchases-presentation = { module = "io.github.devatrii:feature-purchases-presentation", version.ref = "starter" }
starter-feature-notifications-core = { module = "io.github.devatrii:feature-notifications-core", version.ref = "starter" }
starter-feature-notifications-local = { module = "io.github.devatrii:feature-notifications-local", version.ref = "starter" }
starter-feature-notifications-push = { module = "io.github.devatrii:feature-notifications-push", version.ref = "starter" }Example dependency:
implementation(libs.starter.core)
implementation(libs.starter.feature.purchases.presentation)Catalog aliases use dots in Kotlin (starter-core → libs.starter.core). Adjust names to match
your catalog if you prefer different aliases.
You are free to:
- Use this template in personal or commercial projects
- Modify it
- Ship apps built with it
You are not allowed to:
- Resell this template (partially or fully) as another boilerplate
- Repackage and distribute it as a competing starter template (paid)
See the full license here: https://github.com/DevAtrii/Kmp-Starter-Template/blob/main/LICENSE
