Vue
The most common follow-up question I got about the post I wrote on Django last month had nothing to do with Django at all. It was about a comment I tossed off about React and Vue, and my regret in choosing Vue all those years ago.Which is a far cry from 2017, when I called Vue pragmatic and meant it as the highest compliment.
I don't want this to be a particularly harsh or negative essay, so let me start with how I made the decision — which was, in retrospect and given how Buttondown has grown, laughably naive. I chose Django and Vue because I had just started a job in which I would be writing Django and Vue, and I didn't want to have to context switch. I was a pretty mature Django developer at that point but an immature Vue developer, so I thought of this as a great opportunity to learn the framework.In a fit of cosmic irony, said company has since gone under. Buttondown persists.
To be clear: on the scale of poor technical choices I've made with Buttondown, Vue is certainly not in the top three. It might not even be in the top ten.
What I do find myself ruing about Vue falls into two buckets: minor aesthetic differences, and what I would describe as a permanently lagging ecosystem.
In the realm of minor aesthetic differences, I've found the core SFC abstraction painfully limiting. It introduces weight — a tax, really — on component refactors and small bits of shared code.
Vue's clumsy migration from 2 to 3, and its inability to rip the Band-Aid off and get everyone onto the <script setup> style, has also fragmented the documentation and the general zeitgeist. I think this compounds what was already a problem even back then: the sheer enormity of React's user base makes its ecosystem that much better.I don't think it's a coincidence that Evan's most successful projects — Vite and, more recently, VoidZero — have been the ones that target the entire JavaScript ecosystem rather than just Vue.
We've had to reinvent things that would be trivial dependencies to pull in over in React land, like sprites and Storybook. We've had to completely shift our use of libraries that originally targeted both React and Vue, because they eventually abandoned Vue (Headless UI being the most painful example).
None of this is dramatic or exponentially painful. Buttondown as a business would probably be somewhere between 5—15% larger if we were using React instead of Vue — which is non-trivial, but not worth rewriting the entire author-facing application over.