At the end of the day, it is a very human feeling to want to make the idea in your brain come alive.
If you're the kind of person who really likes helping people or wants something which would really help you, I bet, you've been in a situation where you come up with an idea for some form of a tool, software, website, or concept which would improve your life in some sort of a way; maybe you just want some praise and attention? I am like that, personally.
So you collect your ideas, maybe write them down, maybe not. Maybe you want to freestyle it as it go. You try to do some research, or maybe you already know. You stall a little bit, maybe you stall a lot, but eventually, you end up creating the directory for that god forsaken idea, which you've had on your mind for a very long time.
As you create the project, you realise that you need to do a little more research to have more confidence in yourself.
You're more of a visual person, and you have a preference towards frontend work, so maybe you want to start on the frontend first. Regardless, you want to make a frontend of some sort.
You know a bunch of stuff about frontend stuff, you don't think you're "amazing" at it, but you're fairly confident about it.
But, here's the thing. You know of Svelte, Vue, React, SolidJS, Qwik, Angular, Preact, and etc and etc. You've been looking for the frontend framework you want to be proud of, the one you want to be familiar with and which you can use for anything.
Your list of frontend frameworks you would be reasonably happy with is Svelte, Vue, SolidJS and Preact, for several practical reasons.
They're small, fast, they don't suffer from stagnation and you know they will only evolve and get better.
But at the end of the day, the underlying web platform is super stable and has maintained compatibility with old code for ages, and you find that to be super appealing. Super old JavaScript which doesn't have any dependencies is practically guaranteed to work.
You know you're the type of person to work on things on and off, and the velocity of the ecosystem scares you. Whether for the good or for the bad, things will always change and mutate.
You get into a rabbit hole of research about alternative programming languages which compile to JavaScript, such as ReScript, Elm, Imba and Mint. And all of these programming languages suffer from the same kinds of problems.
You dabble in functional programming concepts, but you can't help but gravitate towards familiarity. You don't know whether you would be just as good at any of those languages as you are in normal JavaScript. And frankly, you don't actually know whether any of these languages, pretty much besides Elm, will make you end up with a bunch of code you're gonna have to rewrite in something else.
You live in the state of melancholy, you're in unfamiliar lands wherever, and unfortunately, or perhaps, just as you're used to, you end up not doing anything at all. Personally, that's my problem.
The Elm programming language is super interesting to me, I love functional programming language concepts, but it's just so alien, unfamiliar, inconvenient.
I tried making a small Elm project recently, surprisingly, I got pretty far. But the problem is, despite the Elm developers specifically making the language so it's very easy for you to modify in the future, I can't help but feel as if something is wrong. It feels so manual, and yet, so magical, at the same time.
The Elm programming language has been sitting in my mind for a very long time, and I really want to do more stuff with it. If only it wasn't so unfamiliar and alien.
Imba is pretty much abandoned, and even then, it seems kinda outdated.
Mint seems cool but not in the kind of state I would consider using it in. It has no ecosystem at all. The tooling is fairly primitive, but I guess, it's an easy enough language where it could get away with that.
I actually find ReScript to be pretty cool, and their React integration seems to be super neato, but, unfortunately, that React integration is pretty much all they have, and I do not want to end up in a world where I have to use React, and at the same time, use React in a language which doesn't have any of it's ecosystem.
I actually admire how different ReScript is from JavaScript compared to TypeScript, it's simplified type system is super nice and significantly easier to learn. I love relying on their optionals, enums, matches, and all of that goodness I am used to from better programming languages.
But yeah, with ReScript, your current best options are either the mature React bindings, or scrapping together Preact bindings, and while I do find it to be kinda appealing, I really just, Don't Like React.
So, what are the best viable options?
I feel like, for me right now, my best options are using TypeScript, and using Vue, Svelte, or SolidJS, or using Elm. The problem is, if I am building something with Elm, I have to know, that that means I will scare away 99.9% of people who may want to contribute to the project, and I need to be okay with that.
Everyone I know uses Svelte and TypeScript and they love it a lot.
I personally feel like, with the exception of Elm, I will at some point end up being left in a situation where I'll have to spend time to update and maintain the website. I'll have to update each and every dependency and that will happen with all JavaScript dependencies.
And even then, the dependencies are actually a big problem too. A lot of JavaScript dependencies has like 30 other dependencies they rely on, which makes supply chain attacks super rewarding for attackers.
At the end of the day, I guess, no matter what it is, the only way to not have to be concerned with synchronisation is to have one worker at a time. That worker is me. What I mean, is that, I'd basically need to create my own ecosystem of libraries. It sounds very fun, actually, but I don't have the time for that.
At the end of the day, I just want to make all those ideas a reality, so I guess I need to learn to accept mediocrity. Of some sort. I still don't know what to pick.
I guess I'll just try to learn more Elm. Maybe it'll stick.