Production-shaped Android template for Principal-level teams — modular architecture, Compose UI, Hilt DI, Detekt, and CI quality gates out of the box.
New Android codebases fail when architecture decisions are deferred. This starter encodes opinionated defaults so teams ship with:
- Clear module boundaries (
app→feature→core) - Testable domain use cases
- Compose + Material 3 design system module
- Static analysis and CI from day one
Use it to bootstrap greenfield apps, align teams on conventions, or as a reference in architecture reviews.
app/ Application shell, Hilt entry point
feature/home/ Feature UI + ViewModel + navigation-ready screen
core/domain/ Models, repository contracts, use cases (JVM)
core/data/ Repository implementations, Hilt data bindings
core/designsystem/ Theme + reusable Compose components
core/common/ Shared primitives (Result, utilities)
flowchart TB
subgraph presentation [Presentation]
App[app]
Feature[feature:home]
end
subgraph core_layer [Core]
Domain[core:domain]
Data[core:data]
Design[core:designsystem]
Common[core:common]
end
App --> Feature
Feature --> Domain
Feature --> Design
Data --> Domain
Domain --> Common
| Concern | Implementation |
|---|---|
| UI | Jetpack Compose, Material 3, StateFlow UI state |
| DI | Hilt modules per layer |
| Domain | Use cases + repository interfaces |
| Data | Fake repository (swap for Retrofit/Room) |
| Quality | Detekt, JVM + Android unit tests, GitHub Actions |
Significant choices are documented as ADRs in docs/adr/. Start there when forking or reviewing this template.
Kotlin · Jetpack Compose · Hilt · Coroutines/Flow · Gradle Kotlin DSL · Detekt · GitHub Actions
- Android Studio Hedgehog or newer
- JDK 17+
- Android SDK 34
./gradlew assembleDebug
./gradlew installDebug./gradlew detekt
./gradlew :core:domain:test :feature:home:testDebugUnitTestEvery push and PR runs Detekt, unit tests, and assembleDebug.
- Add
feature:<name>modules for new user flows - Replace
FakeCatalogRepositorywith network/local data sources - Introduce
build-logicconvention plugins for org-wide Gradle policy - Run performance benchmarks (see below)
The benchmark module includes Macrobenchmark startup tests and a Baseline Profile generator.
# Compile benchmark harness
./gradlew :benchmark:assemble
# Run on a physical device (requires connected hardware)
./gradlew :benchmark:connectedBenchmarkReleaseAndroidTestThis encodes performance regression gates—the difference between "we care about architecture" and "we care about user-perceived speed."
- sliide-kmp-user-management — KMP + MVI + SQLDelight
- compose-commerce-catalog — Compose + golden tests
- compose-movies-finder — multi-module TMDB client
MIT — see LICENSE.