Stability and available Documentation would be two more reasons to choose Hilt over Koin.
Since I first worked with Koin I became a big fan of it. Especially compared to Dagger. However in my recent (big) project, we decided in favor of Koin (vs. Hilt/Dagger). But we also ran into an (yet unresolved) bug using koins viewModel features in conjuction with latest navigation components from google.
Hilt is officially supported by Google, which means it should have less integration issues and higher stability compared to 'outsider' frameworks.
Also a lot of standard documentation and examples you will find are based on hilt, so if you are using koin you might need to spend some time adapting them for your setting. Fortunately, Koin is pretty straightforward.
As others already have written: Another important difference you should understand: a lot of daggers magic happens during compile time vs Koin working on runtime only.
Both strategies come with their pros and cons.
Compile-time has better type safety. And the performance impact is moved to the build time instead of run time[1]. Runtime can lead to late discovery of errors (when Casting or Null Pointer Exception) but makes the framework also more flexibel (but slighty more dangerous).
(edit)
A note on Testing: I just discovered a scenario in testing where there is a big difference in convenience: When you want to access your ViewModel in an UI Test (Instrumented Android Compose Test) there is direct Hilt support afaik. It is still possible to do it using koin, but it took me a while to figure out how for my scenario.
[1] But I think performance impact of DI is minimal in most settings and mostly overrated by developers trapped in pre-mature optimization.
officially recommended
means nothing. It doesn't add any value to something. – Packton