A Web development stack or tech stack consists of a set of web frameworks, programming languages, servers, and databases that when combined help in producing seamless, fully-fledged web applications. Choosing the right stack is crucial because this determines the speed, security, scalability, and overall efficiency of your app.
Here are the best and most popular tech stacks:
1. MERN STACK
This stack consists of:
- MongoDB: NoSQL database
- ExpressJs: A nodeJs backend framework
- React: A frontend Javascript library
- NodeJs: Javascript runtime-environment
2. MEAN STACK
This stack is quite similar to MERN except that it uses Angular instead of React.
Technologies:
- MongoDB: NoSQL database;
- ExpressJs: A nodeJs backend framework
- Angular: A frontend Javascript library
- NodeJs: Javascript runtime-environment
3. LAMP STACK
- Linux: Open-source operating system
- Apache: Free and open source HTTP web server
- MySQL: Relational database Management System
- PHP: Backend language
4. SERN STACK
- SQL: Language of relational databases
- ExpressJs
- React
- NodeJs
5. Vue.js STACK
- Vuejs: A frontend javascript framework
- NodeJs
- MongoDB
- ExpressJs
6. SERVERLESS STACK
- AWS lambda: According to Amazon, is an event-driven serverless computing platform provided by Amazon
- API Gateway: As per Nginx, it receives and directs client API requests, effectively routing them to the relevant Microservice using techniques such as request routing, composition, and protocol translation.
- DynamoDB: NoSQL database by Amazon designed to run high performance applications at any scale
- React: Frontend library
7. ASP.NET STACK
- ASP.Net: Microsoft framework for building web apps with .NET and C#
- C#: programming language
- SQL Server: Relational database
8. JAVA STACK
- Java: Programming language
- Spring boot: Java framework
- MySQL/PostgreSQL: Relational Databases
9.Ruby on Rails
- Ruby: programming language
- Rails: Ruby Framework
- SQLite: C library that has a server and database
10. JAMstack
- Javascript: programming language
- API: Application Programming Interface
- Markup: Generated by static site generators like Jekyll, Gatsby, etc
In conclusion
The choice of a tech stack really boils down to what you want to achieve. Some of the factors to consider are scalability, security, cost and availability of integration tools, and ease of solving a problem.
Top comments (36)
Where's Django or Flask?
python? no need it .ç.
And fastapi!
Ohh, no, avoid Spring Boot as a plague. There are countless number of frameworks which will not be digging holes in your pocket for hosting or cloud services.
How is hosting price related to the stack you use? Java and Spring Boot are actually fairly efficient in resources consumption. You can serve many thousands of requests per minute on a cheap 5$ VM... What costs are you talking about?
Spring not even close to "fairly efficient" regarding resources. It requires much more memory and CPU than actually necessary. The vast majority of other frameworks consume much less memory and require much less CPU to handle the same load as Spring.
Besides these inefficiencies, Spring makes apps much harder to support, evolve and maintain.
I don't know what kind of experience you had with spring boot, but I had the opposite experience. I find it very productive and efficient. More so than the Python/JS ecosystem. Perhaps it's also because I'm more experienced with it. It is IMHO very mature and stable regarding long term support too.
Edit: it's also a question of size. Spring Boot is like a truck while Python/JS is more like a scooter. So depending on the complexity of the task at hand, one or the other might be more practical.
I've worked with Spring for about 15 years and decided that I just don't want to waste time on it anymore. It is prone to subtle, hard to nail down and fix issues. Simple adding of a dependency (not even using it!) can render an entire project unusable. Annotation abuse results in unreadable code. Bad practices are ubiquitous - from AOP expressions in strings to exception handlers and validation teared off from main business logic. Vast number of errors are shifted from compile time to run-time - maintainability killer "feature". Etc., etc., etc.
And no, Spring is not a truck. It's a 19th century bike. Any other Java web framework (even Spring-lookalike Micronaut) is a StarShip compared to Spring.
I got ~10 years boot and the code still feels well organized now. Whatever, let's agree to disagree. Out of curiosity, what's your go-to framework(s) ?
Actually, I'm doing some other stuff lately, using JS/TS edge for hobby stuff and some other non-spring J2EE stuff for work ...and I suffer. :( There is not a single week going by where I thing "OMG, this could be done so much easier in Spring instead". At the end of the day, it's just a big toolbox, with kind of everything in it. Heck, you aren't forced to use any of those tools, and I guess it can end up pretty bad if you use all the tools carelessly. But they are here, and used wisely, they are very handy. Perhpas I should do a small tutorial someday to show my appreciation for it ;P
"So much easier" usually means "I already know how to do it and used to that approach".
Heavily depends on the task - from Vert.x to Jooby or even bare undertow.
Vert.x and undertow are too bare bones for me. You're either hunting libs or reinventing the wheel. Jooby looked promising, but it's risky since it's a one-man team. For hobby purposes it may do, but otherwise I'd rather pass. I also thought you'd suggest non-java stuff since they're typically more on the lightweight side. Spring is rather heavyweight, I grant you that.
Vert.x is not even close to bare bones. But if even this is not enough, you can always use Quarkus.
Again, it heavily depends on the project. For example, none of the existing frameworks support functional style without falling into inconvenient reactive streams. So, any framework is "bare bones" in this regard because significant amount of gluing code is necessary. Spring here looking worse than others because its "features" require a lot of workarounds.
As for non-Java stuff: I see no need for them as Java has great combination of high performance and ergonomics. If you look at the Techempower benchmark, you'll see many Java frameworks at the top, along with C/C++ and Rust, but none of them are even close in regard to ergonomics and ecosystem to Java. And Spring is near the bottom, competing with interpreted languages. That's the price of Spring "magic".
You cite so many frameworks, but have you really built something large with them? Quarkus has no reflection, so it's a no-go. Dunno about vert.x. Techempowers benchmarks are also flawed and should be taken with a grain of salt. Some frameworks do simply more effort to game the system, like writing contrived code, disabling input validation, optimizing Linux settings and many other stuff. Lured by the promise of performance, I once used FastAPI for some small project. Out of the box, without heavily tweaking, the performance was abyssal. Way worse than the Spring counterpart, despite the benchmark promised otherwise.
Anyway, Spring Boot has everything I need, including enough performance, so I'm happy with it. Also, regarding your 15 years of experience with Spring Boot, I guess you rather mean the older Spring MVC, since Boot was released 9 years ago. Perhaps that's one of the reason the experience was less smooth for you.
Reflection is a platform feature, not a framework feature. If you mean dependency injection, then Quarkus has its own DI container based on Jakarta DI.
Vert.x, strictly speaking, not a framework but a toolkit. You can use any DI container with it, for example Google Guice.
Techempower benchmarks are open source. If you believe that they are flawed, you can easily propose your changes to it and fix the flaws, if any. Also, all test conditions are identical for all frameworks and described at Techempower website.
I've mentioned Spring, not Spring Boot. Spring Boot makes things only worse, not better. And no, this is not the reason why I don't like Spring. My main dissatisfaction comes from its poor design and how it transforms each application into a set of barely related to each other pieces. It substitutes lack of coupling with lack of cohesion. Most Spring "best practices" are antipatterns. Another source of dissatisfaction - reluctance to adopt modern approaches. When something like that finally happens, they adopt the worst possible option, to discourage its use. Spring WebFlux is a great example of this behavior. Reactive streams are known for their complex API and inconvenient artificial mental model, unusable for most use cases. Yet, Spring adopted exactly this model and WebFlux remains a niche solution, despite sensible performance benefits (even with Spring abuse of run-time reflection, WebFlux is much faster than standard Spring MVC).
I indeed meant reflection. Due to Quarkus compiling into "native images" (faster to start, slower to run btw) it breaks all libs relying on reflection. Nevermind.
I already thought about improving the benchmark, but it's time consuming and life is short. I just wanted to say they should be taken cautiously and a quick self test is recommended.
I'm also curious about what use case prompted you to use webflux. Somehow I never really needed it. I also wonder if the upcoming virtual threads in Java make it obsolete altogether. After all, it's main purpose was dealing with blocking IO.
Native image is not a requirement. And even for native image, there are workarounds which allow libraries which rely on reflection to work properly. Even Spring Boot apps can be compiled to native image, although Spring is entirely built on reflection.
I think that Spring authors and enthusiasts already did their best to improve the benchmark as much as possible. Results remain disappointing. But at least it does not fail in the middle of the test, as it was in previous rounds.
WebFlux is much better at handling load from highly interactive apps like, for example, chats. Such a load has random spikes and usually requires supporting a high number of connections. And, well, compared to regular Spring MVC it is blazingly fast. Performance still poor compared to, for example, Vert.x + Mutiny (for same API style) though. I really don't understand how they were able to screw performance so badly because Project Reactor uses Netty under the hood (just like Vert.x).
They are not "upcoming" anymore since Java 21 release. My experiments show, that while virtual threads allow the application to survive under peaks, but they do not improve performance.
Good info, thx. Check your lamp stack image though..
Why these are "10 best"?
This .NET stack graph is 10+ years old. Meanwhile there has come all popular frontend frameworks (react, vue, angular, svelte...) and also on C# side Blazor, Razor Pages, ASP.NET WebAPI etc.
Also, among many more Django is not mentioned...
Vue.js is moving from Webpack to Vite.
Also Nuxt (not to be confused with Next.js) deserves to be mentioned here as it allows to incorporate both frontend and backend into one codebase with its own runtime server (Nitro).
vue.js, vite, django, django rest framework and postgresql combination is powerfull
Sure
Good ~
Missing the best stack ever
TALL stack
Tailwind Alpine Laravel Livewire
Check your image again, they are not showing, nice article.
Okay, thanks for the feedback. Appreciated
Fastapi, MySql, React?