v7.0.0 + a note on new PRs
IMPORTANT June 2026: Until the next major version v7.0.0 is released, it would not be possible to accept code contributions (PRs) that involve changes to the admin frontend/UI. The entire Vue/Buefy frontend is being removed completely in favour of a server-side-rendered admin UI that eliminates the Javascript-ecosystem lockin. listmonk admin UI will no longer be a Vue SPA (Single-page App) after v7.
6+ years ago, I was forced to spend close to 100 hours on completely rewriting the entire listmonk frontend from React+AntDesign UI to Vue 2+Buefy UI (https://github.com/knadh/listmonk/commit/97583fe4b415d73b80ba8a5ee1b101d423e66657). That was the price I had to pay for making the mistake of choosing React originally--a terrible, clunky, overengineered, bloated piece of technology that has contributed significantly to the bloating and enshittification of the WWW in general.
Fast forward a few years, Vue 2 has moved on to Vue 3. Buefy (which is built on top of the CSS library Bulma) has obsoleted the version listmonk uses, and has moved on to a hard dependency on Vue 3, leaving listmonk stranded.
- What listmonk has: Vue 2 app -> Buefy pre-v1 -> Bulma 0.xxx
- What Buefy v1 depends on: Vue 3 -> Bulma v1+
- Want improvements in Buefy? Must move the entire app to Vue 3.
- Want improvements in Bulma v1? Must move to the new Buefy and Vue 3.
- Can't upgrade to Vue 3? Stuck on old Buefy + old Bulma forever.
I wasted several hours trying to upgrade/rewire these dependencies, and it broke way too many things. It also surfaced terrible technical choices in the Bulma library. I couldn't make it work despite LLM assistance (!). Yet again, the hot mess and dependency hell that is the Javascript "ecosystem" is a curse that keeps on giving.
After reaching my wits' end, a couple of months ago, I made Oat, an ~8KB, zero-dependency, semantic JS+CSS UI library. I've been using it in many of my projects and have gained significant confidence in it. I'm personally done with framework-loaded SPAs (Single Page Apps) for good. Very few apps out there have the legitimate need of being an SPA.
So, for listmonk v7, I'm going to get rid of the Buefy UI library as a dependency completely (including the SASS compilation bloat) and port the UI to Oat. This is a serious effort that involves significant risk for the product, but I'm convinced that it must be done. With LLM assistance, I've already prototyped it and have found it feasible. For developers, the frontend build time will reduce significantly, and for end users, the UI will appear far snappier. I'm also going to use this opportunity to focus on design, aesthetics, and UX improvements.
In future versions, I will work on completely getting rid of the Vue frontend and switching to server-side rendered pages with simple JS for dynamic UI elements on the frontend.
I am now working on completely getting rid of the Vue frontend and switching to server-side rendered pages with simple JS for dynamic UI elements on the frontend. Done with the NodeJS garbage and its "ecosystem" for good. What a waste of time and energy, literally and metaphorically.
Source: knadh/listmonk