Kotlin/Native already has its place. We use it for Localazy CLI - a command-line tool that is used by thousands of users in production without any issues.
We decided to use Kotlin because it allowed us to make the CLI tool available for our users in their preferred variant.
At the moment, we have a single code base with JVM, JS, and native implementation for I/O, HTTP, ZIP, and a few smaller things. All the logic and processing are written in pure Kotlin - in the common module. Typically, we don’t need to touch anything else than the common module when adding new features.
This way, we can build native Windows, Linux, and macOS binary, JVM, and JS versions. We make all these files available for download directly as well as through Brew, APT, YUM, NPM, Docker, etc. This helps us to cover all our users with a single code base.
As for drawbacks, it would be helpful to have more examples. We had to discover a lot of things on our own and it consumed more time. Also, there are still not enough libraries for Kotlin/Native, so we needed to wrap some of the native libraries.
We couldn’t use recommended Ktor Clients for the Windows binary because it would introduce too many dependencies, it was hard to link it statically and it led to a huge binary. So we write our own code using Windows’ WinInet API.
Also, it’s a bit painful to upgrade to newer Kotlin versions since it needs libraries to be recompiled.
However, I would recommend it for sure because once we have built the foundation, it’s a joy to improve the tool and add more features.
Wherever the JVM version is possible, I would go with JVM Kotlin. It’s definitely better, but as said in my first sentence, Kotlin/Native has its place and it’s an awesome tool already.