Toly Pochkin
06/29/2026, 3:58 PMroutes/ directory becomes the visible app map, and Laydr generates the Kotlin destinations, path builders, route maps, Compose entrypoints, and (optionally) Nav3 wiring that usually drifts when maintained by hand.
Repo: github.com/mobiletoly/laydr
It supports:
- Compose Multiplatform on Android, desktop/JVM, iOS, and WasmJS
- plain Compose hosting
- JetBrains Nav3 KMP via laydr-nav3-kmp
- Android-only AndroidX Navigation 3 via laydr-nav3-androidx
If you have dealt with copied route strings, duplicated graph setup, repeated argument parsing, layout wrappers, or stale tab/stack glue in Compose apps, this is the problem Laydr is trying to make boring.Toly Pochkin
06/29/2026, 3:59 PMsrc/commonMain/kotlin/routes/
contacts/
Route.kt
Screen.kt
by_id/
Route.kt
Screen.kt
generates typed APIs like:
LaydrRoutes.Contacts
LaydrRoutes.Contacts.ById
So app code can navigate with generated destinations instead of raw strings:
navigator.push(
LaydrRoutes.Contacts.ById.destination(
id = LaydrRoutes.Contacts.ById.id("ada"),
),
)
Laydr does not try to own your whole app architecture. Your app still owns Compose UI, state, DI, ViewModels, repositories, tabs, labels, chrome, auth, deep links, platform policy, and NavDisplay.
It just gives those pieces stable generated route values and route-local Compose entrypoints.Alexander Hinze
06/29/2026, 7:32 PM