На js/ts/напишите свой транспайлер из чего угодно приложение, в котором объединен сервеный и клиентский код. В чем принципиальная разница?
разница в том, то все это говно с "транспайлерами" не должно заботить программиста. Он просто пишет приложение на Java. Внутри одного проекта внутри своей любимой IDE. В нем часть кода рисует формочки, а часть - не рисует. Ну, как если бы ты делал это на Swing каком-нибудь или SWT.