Kotlin is pretty immature (and overhyped, IMO). Some people like Play and that&#x27;s probably the closest JVM equivalent to Rails. I find the monolithic &quot;batteries included&quot; frameworks are part of the problem with large projects and it&#x27;s better to have small well-encapsulated libraries that you can put together yourself.<p>I work in Scala and I use Wicket for HTML pages (technically a framework (though decoupled from any database access), but it gets out of your way a lot, has a very clean separation between the framework and your code (no magic)); it&#x27;s probably the best example of good OO I&#x27;ve seen, in any language, with a component model that really works where all your pages are reusable components made of reusable components that are themselves made of reusable components, and there&#x27;s a really clear separation between markup and logic.<p>If I&#x27;m writing a &quot;web API&quot; I use spray. It has this DSL that lets you write routing definitions which are as clear as a config file but are ordinary code obeying all the rules of the language, so you can safely refactor them the normal way. And it works very nicely with the scala type-system, letting you separate out cross-cutting concerns like logging or database transactions in ways that are low-overhead but visible and safe (and it&#x27;s natively async, so can be incredibly high performance, not that I&#x27;ve ever needed that). For a &quot;single page application&quot; scenario I&#x27;ve used a TypeScript frontend (in angular) talking to a spray backend (I&#x27;d like to try out Scala.js soon).