I let AI rebuild a dead Java desktop app for the web. Here's where it broke. | Vaadin
Vaadin Create 2026: The full-stack Java conference - Join the best Java devs →
Contact us
Start building
Blog
I let AI rebuild a dead Java desktop app for the web. Here's where it broke.
By
Enver Haase-Beer
On Jul 16, 2026 11:39:14 AM
In Development
I came to RSS about twenty years late. When I finally went looking for a good reader, one beloved old Eclipse desktop app kept turning up on every "best of" list—RSSOwl—and it wouldn't even launch on my Mac. I'm a developer, so instead of shrugging I got nosy: how hard would it actually be to rebuild its main screen for the browser? Here's what I found, what came across in an afternoon, what fought me, and what turned out to be impossible.
I read a fair amount of developer stuff (the Vaadin blog, the Spring blog, a couple of Java ones, Hacker News), and half of it only really comes in email now. My inbox had become a graveyard of unread content. RSS promised to put it all in one place, newest first, without giving my email address to anyone – and let me actually get through it.<br>So I looked around for something to read it in. One name kept coming up, on nearly every "best RSS reader" list (it's still near the top of SourceForge's Java RSS readers for Mac) and in half the old forum threads: RSSOwl, a gorgeous Eclipse desktop reader with a classic three-pane layout — a tree of feeds on the left, a sortable table of headlines top-right, an article reader below. The lists tended to add the same asterisk — needs Java, looks dated — which I ignored. I downloaded it. Nothing happened. It just won't run on a 2026 Mac.<br>The dead binary (and the plot twist)<br>The official Mac build of RSSOwl won't start at all on a modern Mac. It’s an old 32-bit binary linked against Carbon, a UI layer Apple killed years ago Rosetta can't help it — it only translates 64-bit Intel code. The flagship download of the app simply cannot run on a 2026 machine. That's what "stranded on a dying desktop toolkit" actually feels like.<br>Then along came the maintained community fork of RSSOwlnix, distributed on GitHub, building a 64-bit Intel binary. That one does run on a current Mac, but under Rosetta, which itself is on the way out.
So I built it myself from source, and in just over two minutes I got a native Apple Silicon app that runs with no Rosetta at all because modern SWT ships a current aarch64 build. It took changing one line in the build config (a Tycho target environment from x86_64 to aarch64) to get it.
"You cannot run SWT on Apple Silicon" is simply false. The problem is not the toolkit, but the distribution.
That distinction has stuck with me and is a good reason to move something like that to the web. It's not that the desktop toolkit can't keep up — it can. The problem is that the only build a normal person can actually get is a crumbling 32-bit relic (or an Intel one riding Rosetta, itself on the way out), and getting a modern native build requires source access, a whole Maven/Tycho toolchain, the right JDK, and knowing exactly which knob to turn. No one who downloads a feed reader is going to do that. But you just opened a web app.<br>So, as a web developer, I couldn't help but ask myself:
Could I take that exact screen — a feeds tree, a sortable headlines table with a right-click menu, and an article reader — and have an AI rebuild it in the browser? Maybe even make it multi-user, so friends could have their own feed lists? And where could it fall apart?
So I decided to find out, using Claude Code to do the typing and keeping a tally of what worked and what didn't. I was targeting Vaadin 25 (Java, server-side UI — not a JS rewrite, that was the point). Short version: the screen is moving. Much of it moves surprisingly fast. But “where does it fall apart” has some real answers. And the most interesting answer has nothing to do with widgets.<br>What came across clean and fast<br>The headlines table is the core of RSSOwl. It looks like a plain table, but it's secretly a tree (so it can group rows), with sortable columns, bold unread rows, custom row colors, clickable in-cell icons, and a right-click menu. That's the part I didn't think would be easy to move.
Most of it came fast:
Selecting a headline updating the reader "just worked" — via Signals.<br>The AI was trying to peddle me something stale here at first: it wired the master→detail link with old-style change listeners. Vaadin 25 has a better solution — Signals . The headline that is selected lives in a ValueSignal, and the reader binds to it reactively (Signal.effect(...)); there's no manual plumbing of "when the selection changes, go update the reader." Better than the desktop original, though, but I only found it because I checked, which is a theme below.
Sorting was almost free. You get the built-in click-to-sort headers, and the little sort arrow. Just give each column a Comparator.
The right-click menu was rendered faithfully. A...