I have written a DSL that allows you to write the markup for Apache Wicket in Kotlin. It makes navigation between code and markup, and refactoring (e.g. renaming a component ID) a lot easier. But the biggest advantage is that you no longer have to keep the component hierarchy in sync between the code and the markup. The hierarchy only has to be specified in the markup. So moving components around becomes a lot less cumbersome.
Translating existing markup is easy, as the DSL allows (almost) all markup constructs that Wicket supports with HTML files. Existing code bases can be migrated component for component; a big bang migration is not necessary.
Additionally, there are base classes that make the component code a bit shorter. These base classes can be used for new components.
Functions are provided for all (non-deprecated) HTML elements and attributes, but these are all simple (extension) functions. It is easy to customize the DSL for your use case by writing your own functions.
It is open source under the MIT license. Contributions are welcome. The Kotlin Wicket markup DSL can be found on GitHub. There are multiple examples that give you an idea of what the DSL can do.