I’m an experienced backend developer. To me, the backend world seems super simple compared to the frontend world.
It seems like there are a million options and I don’t have the experience to say what’s good and what’s not. I’m hit with major choice paralysis, basically.
I don’t have any special requirements - I “just” want to build a pretty standard, responsive, modern-looking UI. Ideally without too much boilerplate, in a framework that “feels good”, in a way that might at some point attract other contributors as well, if I get to the point of open sourcing.
Of course I could just reach for the most popular thing i.e. React, but that doesn’t seem to be the “hip” thing to use nowadays (or maybe I’m wrong? What do I know, I’m a backend dev).
But even if I choose a framework, there’s a million other libraries out there to choose as well. For instance, which UI library to choose? What about observability and state management and authentication and so on?
Sorry if this is a bit ranty. I am honestly just looking for an experienced frontend developer to point me in some direction (i.e. some set of frameworks/libraries; a “stack” if you will), so I can get out of this choice paralysis.
What would be your go-to stack for a new frontend project today?
If you don’t care too much and don’t have experience yet, why not go for native browser and HTML/CSS/JavaScript?
Even if you eventually migrate to other web UI libs and frameworks, the foundations knowledge will be useful.
Aye. K.I.S.S. has been forgotten in frontend. Its so simple to make basic sites. No need for huge ass frameworks or complicated build pipes most of the time.
why not go for native browser and HTML/CSS/JavaScript?
I guess because you end up rewriting a lot of stuff manually, rather than going for tried-and-true solutions that work out of the box? I mean isn’t that the same as every framework, regardless if we’re talking JS or frontend or backend or whatever. I mean I use a framework in the backend as well, I’m not about to roll my own routing system and manually listening to a socket and everything.
I totally get the sentiment of KISS, but if you know that your site will not be super simple and will need interactivity and the possibility of complex workflows, isn’t the raw HTML/CSS/JS kinda limiting? That’s the impression I’m getting from what I’ve read online.
But you (almost certainly) started using those backend frameworks after you had experience. You learned the basics first, and then incorporated frameworks when you got to larger projects.
I came here to say the same thing as the original reply in this thread, albeit with slightly different justification:
If you don’t know the basics, and can’t build a functional site with just HTML/CSS/JavaScript, all of the frameworks will be a nightmare. You should really learn those first, even if it means building a practice site, or completely rebuilding your frontend when you decide to use a framework.
The frameworks can make your life easier, but there’s a learning curve, and a huge cognitive burden especially when you are just starting. You’ll fight them more than work with them at the start.
That all said, never use what’s “hip” on the frontend. JS frameworks typically have the lifespan of a house fly. React is one of very, very few that has remained popular, and continued to get updates for a long time (at least in JS framework terms). It’s a solid choice with a huge community, good docs, good tooling, etc. There may be other valid choices, but seriously - avoid anything new and flashy, because that usually just means its deficiencies haven’t been found yet, and as soon as they are, there will be a new framework.
If you don’t know the basics, and can’t build a functional site with just HTML/CSS/JavaScript, all of the frameworks will be a nightmare. You should really learn those first
I maybe should’ve lead with that in my post, but I do know HTML/CSS/JS on a basic level. Again, as I thought I laid out in my post and as I have said in other comments, I’m not really here to ask for advice on learning these things. I’m asking for advice on a stack choice.
never use what’s “hip” on the frontend
Some other people mentioned Svelte. Would you say that’s too “hip”? What other options are there than React, if we exclude all the hip stuff?
Are you building something for fun, or something meant to last? If you want it to last, I’d be looking at old frameworks - obviously React, and Vue has also been around a long time. Angular is also old, but Google maintains it, so they could kill it at any moment (and personally I hated it when I had to use it).
I’ve never used Svelte, and don’t know much about it. From a quick look online, primarily what it does differently than other frameworks is use a compiler. I’d be a little concerned here, because what it compiles to is JS, as that’s what runs in your browser. This can make debugging more challenging, because when you pull up the debugger in the browser, it’s not your code, it’s the compiled code. They may have solved this problem, they may have browser extensions and IDE plugins to help with this, but find out before you start. If you can’t use a debugger, use a different framework.
I’d argue Svelte’s main differentiator is its simplicity compared to many frameworks. The syntax is essentially just an html page, with <script> tags for reactive code and normal HTML markup with additions like {#if} or {#each}.
As for debugging, a typical Svelte project ran with Vite will have debug mappings that makes the console debug window look very close to your actual code.
I don’t know what you’re looking for, and what your “not super simple” is, but baseline browser tech provides various controls, layout mechanisms, styling, interactivity, etc.
Do you have a concrete idea of what and where specifically you hope for gains by using frameworks? Do you plan to hold a lot of state on the client that needs state separated from the DOM and its mechanisms? Do you want a standard library of styled components instead of using the native ones or styling them yourself? Do you want more robust JavaScript? Those are all very different concerns and requirements.
I like the low complexity, low barrier, low requirements of baseline web tech. The native html form controls may arguably look “ugly”, but those can be styled, individually or through a style-only CSS lib.
Using ‘raw’ JS/CSS/HTML is a coveted skill. A lot of people forgot and/or never learned how to do that. Those over engineered frameworks are essentially a form of premature optimization, and in many cases obsolete because modern browsers already implement their whole reason for existing.
It just doesn’t seem like best practice to do raw JS/CSS/HTML from what I read online? I get that for maybe small sites where you just need mostly static pages, that might be fine, but if you want any complexity and flexibility, isn’t raw JS/CSS/HTML sort of limiting? I.e. you’d end up doing lots of complicated stuff that you’d build yourself instead of using a framework.
What’s “complicated stuff”? Your business logic will probably be complicated regardless of what you use. A framework will just add a few more layers of complexity and introduce a (usually fragile) build process.
Idk what you’re trying to build, but from this:
I “just” want to build a pretty standard, responsive, modern-looking UI. Ideally without too much boilerplate,
It doesn’t sound like you need a framework. Want responsive? Learn how to use flexbox. Want a “modern” look? Learn design, or find some CSS templates to start from.
If you’re trying to make a SPA (which a lot of beginners/insane people seem to think is a good default, which it definitely is not), then a framework might make it easier, or it might not. It depends on what you’re building. You may be able to use HTMX with a light sprinkling of JavaScript, or may need a full-blown batteries-included framework.
So. What are you building?
Web components exist.
Front end is such a wasteland of overdoneness now. It used to be fun :/
Try Svelte
I’m also a backend dev that hates how many frameworks there are. At my last company i built a small tool and chose svelte. I’m glad i did. It is so easy for a backend dev to learn in comparison to react or angular or vue. I wouldn’t touch those three with a 50 ft poll in this day and age. There’s several good articles on why in the !webdev@programming.dev community a few days ago.
https://programming.dev/post/39156162
https://programming.dev/post/39374784
I would choose HTMX, Astro, Quik, or Sveltekit. I really like svelte, and it’s been at the top of stack overflow’s “beloved” chart for several years now. It really is a joy to use compared to react or angular (at least for a backend dev like me). I know they’re not nearly as popular, but using react is like using J2EE, you don’t need it, like 99.99% of the time.
Svelte(Kit?) does look pretty nice. I guess I’ll try it out, but even then there are many UI libraries and other libraries that need decisions. It seems like in the frontend world, I never run out of choices 😅.
With svelte I’ve only found like two “component” libraries and I’m not sure I’m going to continue to use them. Essentially they just are drop in components so you don’t have to write them yourself. But svelte really seems to like it when you just write the css yourself. I’ve been using tailwind with it and I honestly think I’m going to stop, because it’s harder than just writing normal css that covers either a specific component or the whole app.
Interesting, my impression is very much that the days of writing “pure CSS” is at an end, and that UI libraries and CSS frameworks like Tailwind is the way forward. But that is just my impression.
Tailwind is an example of those frameworks fighting against/crossing the native web technologies referenced further up with the links to webdev posts.
The idea of shifting CSS declaration into the DOM element class attribute seems flawed to me. You lose what CSS provides natively.
My impression is that writing “pure CSS” has been replaced by writing !important selectors that undo all of your component library’s auto-generated CSS, and then write your own CSS selectors on top, after trying to figure out the theming system for half a day… /rant
Those articles I linked have a good discussion of it, but pure css has come a very very long way and a lot of these frameworks aren’t even necessary anymore. You just bloat the browser, and for little good reason. Tailwind is nice to use if you don’t know much CSS, but still know some, since you can just look at a giant list of “what does this do” and choose one that looks good. But yeah, I think I’m going to cut back on my usage of Tailwind massively, it’s just annoying a lot of the time.
I haven’t used them much recently but aren’t vue and svelte very similar in terms of difficulty and philosophy?
I’ve heard that the original Vue was like Svelte, but I’ve heard that later Vue versions drastically switched to something like the React model. I’ve never used Vue though, so don’t listen to me about that. Really anything going in the React direction is bad in my mind.
Devographics has been running these popular “State of X” surveys (State of JS, State of CSS, etc) that have been useful for tracking trends in frontend framework usage:
https://www.devographics.com/
https://stateofjs.com/en-US
https://stateofcss.com/en-US
https://stateofhtml.com/en-US
https://stateofreact.com/en-USThe StackOverflow survey is also somewhat useful:
https://survey.stackoverflow.co/2025What I’m mostly getting from the state of JS survey is that React is extremely dominant and “good enough” it seems like, for most cases.
Yeah, I’d say that’s true. I think the alternatives may be just as good, but React was the first mover in its category, gained and maintained popularity for years, is battle-tested, and the improvements they’ve made over the years has kept it fresh.
My understanding is that one of the benefits of Svelte, for example, is that it eliminates the virtual DOM abstraction that React uses, so if you cared enough to shave milliseconds off your frontend rendering time for a complex site, then you may want to look into Svelte, but the reality is that React is already very good.
In reality, your choice of framework is usually already dictated by whatever project you’re contributing to, and for most fairly modern projects that ends up being React, and sometimes Vue or Angular. Beyond that, I personally just try these new libraries occasionally, build a toy project to see if they solve some pain point that I have, and determine if that is good enough for me to switch or recommend.
Maybe you are looking for a component library, something like Bulma or Bootstrap, rather than a JS framework. Your primary problem may be design, UX layout and learning basic CSS/HTML.
But if you want one of the lighter frameworks, I’d try Vue. But it is increasingly possible to do stuff without a framework, especially if your needs are not too complex. I’d start by looking into Vite, and use one of its simpler templates. You may want to select typescript instead of JS if you get the option.
Also… when you say “Frontend” we don’t know if you’re going to do a visualization-rich 3D application with touch gestures, or a business CRUD applications with lots of forms and tables and paginated lists filtered server-side, or a content-heavy web page with lots of articles to read…?
component library
Yea definitely. But even here there are many choices. I’ve tried Bulma before and it’s “okay” but I feel it still takes a whole lot of tweaking with lots of small classes to get something that looks decent.
when you say “Frontend” we don’t know [what exactly you need]
As I said above, I have no special requirements. Think about any “usual” website you visit, even something like Lemmy or Piefed, or other social media, or Wikipedia or YouTube or whatever. I don’t need anything particularly fancy. Probably closest to the “content-heavy web page” thing you mentioned?
If you want to try another, maybe Material. (The design guidelines or the components. But IMO the component docu has gotten worse.) But if you are going to overwrite the styles anyway, it may be easier to write your own CSS instead of debugging someone else’s.
So learn the HTML/CSS basics that you are missing, mostly on MDN. (CSS: selectors, pseudo-classes, flexbox, grid, css variables, units like rem/px/vh, media queries, collapsing of the margin, css reset and box-sizing, overflow, display, positioning, …; HTML/Web APIs: CSP, self-closing tags, fetch() API, querySelect(), URL.parse(), sessionStorage, form submit, form validation, blob, event bubbling, your browser’s inspect tools, …).
Even if you use a framework you will generally have to learn all this stuff anyway.
The backend you are working on can also help narrow down what front end you may want to try. I am a “full-stack” .NET (i.e. I do backend but I’m stubborn enough to touch and make choices on our front end vs other members on my team). Naturally, our apps are ASP.NET MVC/Razor pages, and I’ve dragged a few things over to Blazor for some of our new apps. One could still add vanilla JS / Browser APIs on top of this and cover most needs. Bootstrap consider what you need to keep you app mobile-friendly (usually described as “responsive”), and can be used with just data- attributes.
My opinion is the front end should be quick and should also be light on business logic. Then you are just making http requests for data retrieval or requesting the server to do something. Then you can break out your backend methods/services to handle your data persistence > business logic > shaping the results for what your front end needs
Sorry that got long TL;DR see what front end usually seems paired with your backend and start there. For example, try .NET/ASP.NET Core
That seem reasonable. Don’t add more to learn before you know you need it. Is there an http server that is built in to Rust?
I’m very experienced with Rust and yea there’s quite a few web server frameworks available actually. Axum is the prime choice.
We use Leptos at work, which is similar to Dioxus and Yew.
Main downsides:
- You can’t really pull in component libraries, where someone has implemented more complex UI elements before. You will need to code more of these yourself.
- Because it’s mostly delivered as a big WebAssembly blob, it’s only really suitable for Single-Page-Application-style webpages (SPAs).
Main upsides:
- You get to use similar syntax and libraries as you do in the backend. Frontend code still has a very different paradigm, so it’s not completely free to jump between the two, but the hurdle is definitely lower.
- You can share code between frontend and backend. In particular, this means it is enforced at compile-time that frontend and backend share the same API.
- Some of the common code patterns benefit quite a bit from Rust’s design.
For example, for conditionally displaying different UI elements, rather than JavaScript’s multi-line ternaries, you can use Rust’s normal if-else expressions as well as match-blocks.
And when you make a request to the backend, you get back aResult. You can pass that up into the display code. If it contains anOkvalue, you display the rendered component with the data inside. If it contains anErr, you render the error where the component would normally be.
We use Leptos at work
Wow that’s bold! Sounds like a cool place to work. Is your workplace by any chance looking for new Rust developers? 😆
How did you come to that decision? From a sort of business standpoint, it seems very risky to adopt technology such as Leptos in a production setting. Or perhaps you only use it for smaller things internally or something?
Well, it’s only my current project that uses Leptos. I didn’t mean for it to sound like the whole shop does.
But yeah, to be allowed to do that in our project, us coders put in the legwork and assumed responsibility for that decision. Like, we started into this project with three seniors, all of us with a backend focus, but two of us had built a Leptos UI in our freetime, while none of us felt confident in being able to put out a JS frontend.
To some degree, yeah, it is cool that management does allow us to take responsibility for technical decisions. But well, it’s not like they had frontend devs layin’ about that they could’ve swapped into the project, so when we told them we can make it work with Leptos, they were like, sure, make it work.
I also have to say that the project is not yet technically in production. It should be by the end of the year. But yeah, the UI was pretty much done two years ago.
We only had one really gnarly Leptos upgrade at the start of this year, where they made lots of breaking changes and it took three consecutive days to get our UI to compile again.
But hopefully Leptos won’t need larger breaking changes for a while and, aside from two logic bugs we introduced during the upgrade, it did work flawlessly once it compiled, so in some ways that did increase my confidence in it. Like, if it was JS or TS, we would’ve just not done a similarly large upgrade.
Since you mentioned Rust is your backend, take a gander at Leptos. I’ll admit that i’m not quite versed in it yet but what I’m doing is learning React and building my apps on React while also learning Leptos.
Leotos takes heavily after React but isn’t actually like React. I know that doesn’t make much since so you will have to read the docs but it does seem to be a more efficient FE.
And to be clear, I absolutely hold my nose while working with React as that was actually my last choice of the big 4 front ends but since my end goal is Leptos and documentation and information online is widespread, it’s something I can live with
EDIT:
I am mistaken. Leptos takes after AwesomeJS, not react.
EDIT 2
I meant Solid.js
I’ve considered it yea, but again, I just feel the ecosystem isn’t there yet. It really saddens me, cause WebAssembly is such a cool idea, but the dominance of JavaScript/TypeScript on the web is just too much. The amount of developers and tools and libraries for JS/TS on the web is just immense compared to what you have with Rust, and I don’t really feel like reinventing the wheel.
Respectable response. This helps me with my decision making too.
As someone self taught in both (okay some schooling but I don’t use much beyond some of the principles/design I learned), even learning frameworks you need to understand HTML, CSS and JavaScript. Okay maybe less JavaScript with something but I don’t know them.
I picked Angular for something, maybe not the best, uses typescript which I like. But in the end it’s just to hold variables. After awhile I could easily write something to dynamically create a form in the way I wanted. There are other things I use but if I really wanted I could probably do it all my own in JavaScript anyways.
That’s why you learn them, without HTML you don’t know not to put things on a screen, without css you can’t organize or style it, without JavaScript you have no interaction. Learn them and you’ll figure it out.
If you already an expert in python, you can keep doing that and build a frontend in python using Dash. They have bootstrap components and mantine (React) components for options of style you might prefer. Don’t need to write JS or HTML. It’s enterprise grade and widely used by large enterprise projects.
Another is Reflex but their open source version is tricky to run in production. They promote more of their cloud version or enterprise license.
I know Python but I don’t like using it 😅. I’ve definitely considered going the non-JS/TS route and using something like Dioxus, since I know Rust very well, but I’m not sure that really a super viable way as it’s still quite early for that sort of approach in the Rust ecosystem.
I would first ask what you expect your frontend to do. Will your UI get live updates? What do you expect will be an average session time, minutes or hours?
I “just” want to build a pretty standard, responsive, modern-looking UI.
You can accomplish that with plain HTML, CSS and JavaScript. https://developer.mozilla.org/en-US/docs/Learn_web_development can be a good place to start.
Ideally without too much boilerplate
What is considered boilerplate, and too much of it, is a bit subjective.
in a framework that “feels good”
That is very much subjective. Also, you might not need a framework.
in a way that might at some point attract other contributors as well
Now you’re considering your own tastes, as well as the tastes of an unknown future stranger :D I’d say don’t worry about it.
I would first ask what you expect your frontend to do. Will your UI get live updates? What do you expect will be an average session time, minutes or hours?
I forgot to elaborate why. My point being you might get what you need from fairly static HTML generated by a backend, with a sprinkling of JavaScript for interactivity (Progressive enhancement, gov.uk has more on that as an approach )
fairly static HTML generated by a backend
I don’t think this is a scalable, futureproof option. Neither is pure HTML/CSS/JS. I know you can get far with those things, but as another comment mentioned, what if I at some point want to turn it into a mobile app? What if I want to do some complicated thing that I didn’t anticipate ahead of time? An established framework seems more futureproof in that aspect.
Counterpoint, what if you don’t end up doing or needing that? Then you’ve paid the cost of complexity and added maintenance burden to update dependencies for no reason.
If you do end up needing a complex feature, perhaps the complexity can be isolated to just the part of your application that needs it? For example React can be used to render just parts of one page.
For mobile apps, perhaps all you need can be accomplished as a progressive web app (which is “just” regular HTML, CSS and JS at the end of the day)? That way you don’t have to deal with or pay for app store distribution.
This is orthogonal. If you want to do anything custom, it will often be easier to not use your JS framework at all for that part of the App. If you are going to use Tauri you will be using the Tauri API not the API of your framework. If you want stuff like touch input or show system notifications, you’ll use the browser’s APIs for that. If anything the framework will be in the way for lower-level stuff, and you always have the option to not use it for some part of your App.
Maybe try a full stack option like NextJS/NuxtJS, as a sideways step into frontend





