salomonbrys
11/03/2026, 8:58 AMNetworkModule.httpClient(), not just any HttpClient. The meaning of a dependency comes from the member's name.
• _Composable modules_: modules are interfaces, so interface AppModule : NetworkModule, DatabaseModule just works.
• _Light presence_: your business classes do not know about the modules. @DIFactory builds them from a module for you (no more uggly KodeinAware).
• Bindings are values, with native support for suspend bindings, extension and overwrite, and per-module scoping.
Inara is also opinionated, which is the biggest change in philosophy: no mutable modules, no global modules. With Kodein, I wanted a "universal" tool, and I made concessions along the way (especially by adding new behavior every time I was asked to). A good tool is defined as much by what it does not do as by what it does. In short, I want to write code that is, in order of importance, correct, isolated, idempotent, and only then easy to write.
That is why we see more future in Inara: Kodein was my first library, and Inara is the one I would write today.
Links
• Announcement article: Inara: Inject your dependencies at compile time
• Inara on GitHub
• Inara documentation
Moving to Koin
If you like how Kodein worked and how it architected your modules and applications, we warmly encourage you to migrate to Koin. It supports everything Kodein does, and much more, with better optimizations and integrations. Here is a guide to get started: Introducing the Koin migration skills.
Thank you
A heartfelt thank you to every developer who trusted us with Kodein DI over the years: for using it, for reporting issues, for your contributions and for your patience. Kodein exists because of you, and we are very grateful.
I would love to hear what you think of Inara. Questions and feedback are very welcome in this channel!ian.shaun.thomas
11/04/2026, 12:24 AM