I don't want to build on GWT anymore.

GWT, originally known as the Google Web Toolkit, is a set of tools and libraries that allows you to write frontend web applications in Java and it handles translating them to JavaScript for you. It was originally released in 2006, when writing JavaScript applications in the web browser was a miserable experience, and it made things much better, at the time. 5 or 6 years later, the landscape had changed considerably and Google lost interest. In 2013 they released it as a community project, essentially abandoning it.

At this point, it's largely supported by only one person, Colin Alworth, who maintains it as part of his software consultancy, Vertispan. There are a handful of users to hang out on the official support chat channel, but that's it. It is, in my opinion, a dead-end project, and while I feel like I'm whining saying this: I don't want to build new features on top of it, because I'm 99% sure I'll have to throw that code away in the near future.

So, while I'm prototyping things out, I figure I'll use it as a chance to give some other stuff a good shakedown. I'm fairly sure I'll end up on some permutation of TypeScript and a popular framework in the end, but for now I'm playing around.

Both prototypes right now use Shoelace for a base set of UI components: the kind of stuff you'd expect your desktop environment to provide. I need things like menus, tree views, dialog boxes, etc, and I don't want to take the time to write them myself. Shoelace provides that, along with a reasonably modern looking style by default, letting me focus on the interesting parts of the application instead of basic functionality.

The ClojureScript version (reframe) is written using Reagent (a wrapper around React) for rendering, and re-frame as an application state management framework. It is by far my favorite way to build web applications: I get rock solid state management, live reloads, and simple rendering out of the box. It's the fastest way I know of to do frontend web development.

But it's a Lisp, and I don't think I'll convince anyone else to run with it. 😂

The web components version is written in TypeScript TypeScript and at the moment is built on Web Components, a collection of technologies built into modern browsers that effectively let you define your own HTML elements. Right now I'm running without any other framework on top of that, but I'm at the point where I need to be actively thinking about state management so I'm not sure how long that will last.

The repositories for both prototypes are available on our internal Gitblit instance: