Key takeaways
- Choose a web development framework from your project’s traits, not from rankings.
- The team’s existing skills are the strongest single factor.
- Content sites need server-rendered HTML; logged-in apps care more about interactivity.
- Check real-time needs, data and admin needs, the hiring market and the support policy.
- Shortlist two, prototype the hardest feature in each, then write the decision down.
Every web framework list ranks the same names, and none of them can tell you which one fits your product. The honest answer to “which framework should I use?” is a set of questions about your project, your team and the next five years. Answer those, and the shortlist usually narrows to two options on its own.
This guide sets out those questions, then compares the widely used front-end frameworks side by side and gives short “fits when” profiles of the back-end ones, without rankings. It ends with a short process for making the decision and recording it, so the next person on the project knows why it was made.
What does a web development framework decide for you?
A web development framework decides how your code is organised and which common jobs are already solved: routing requests to the right page, rendering HTML, talking to a database, handling forms, signing users in and protecting against common attacks. You trade some freedom for a large amount of work you no longer have to write, test and secure yourself.
What a framework does not decide is whether your product is well designed, fast or maintainable. Those come from the team and the decisions they make inside the framework. A good team can ship a reliable product on any of the mature options below, and a poor fit only makes that harder.
There are three broad kinds:
- Front-end frameworks run in the browser and build the interface: React, Angular and Vue are the most widely used.
- Back-end frameworks run on the server and handle data, business rules and APIs: Django, Flask and FastAPI in Python; Express and NestJS in Node.js; Ruby on Rails; Laravel and Symfony in PHP.
- Full-stack or meta-frameworks combine both, rendering pages on the server and adding interactivity in the browser: Next.js (built on React) and Nuxt (built on Vue) are common examples. Rails, Django and Laravel can also serve complete pages themselves.
The project traits that decide the choice
Work through these eight traits in order. Each one either narrows the options or tells you it doesn’t matter for this project. Tick each one you can already answer for your product; the ones you can’t are the questions to settle before anyone picks a framework.
The second trait is closely tied to the choice between a single-page and a multi-page structure. Our guide to single-page or multi-page application covers that decision in detail.
Still choosing a stack?
Tell us what the product must do and who will maintain it, and we’ll talk through which stack fits.
React, Angular or Vue: which front end fits?
React, Angular and Vue each fit a different kind of team and product; none is better in general. The table sets out where each tends to fit. They are not rankings: each is mature and widely used, and a skilled team can build a good product with any of them.
No front-end framework fits when the site is mostly content with a little interactivity. Server-rendered HTML with small amounts of plain JavaScript is faster to load and simpler to maintain.
Back-end frameworks: when each one fits
Common, widely used options in each ecosystem (not a list of what any one team uses):
Python: Django, Flask or FastAPI
- Django fits data-rich products that need user accounts, permissions, an admin interface and many database models from the first release.
- Flask fits small to medium apps, internal tools and services where you want to choose each part yourself.
- FastAPI fits APIs, especially ones that serve machine learning models or call other services, with type hints, async support and automatic API documentation.
- Python as a whole fits when data processing, analytics or AI sits close to the product. See pick a technology by project for how the language options compare by project type.
Node.js: Express or NestJS
- Express fits small APIs and services where a minimal framework is enough.
- NestJS fits larger back ends that benefit from a structured, module-based design.
- Node.js as a whole fits real-time features and teams who want one language, JavaScript or TypeScript, across the front end and the back end.
Ruby on Rails
- Rails fits products that need to move from idea to working software quickly, with strong conventions for databases, forms, background jobs and email.
- It suits small teams that want to build a full product without assembling many separate tools. For a closer look, see is Ruby on Rails still relevant?
PHP: Laravel or Symfony
- Laravel fits web apps that want a full set of built-in tools (database access, queues, authentication, scheduling) with a large ecosystem of packages.
- Symfony fits large, long-lived applications that need reusable, well-separated components.
- PHP as a whole fits when the hosting, the existing systems or the team’s experience are already PHP, or when the product sits alongside a PHP content management system.
Do you need a framework at all?
Most products beyond a simple website do need one, because the work a framework does (routing, security, database access, sessions) is substantial and easy to get wrong. You can skip a framework when the site is a handful of static pages, when a hosted content management system already covers what you need, or when the “product” is a small script or a single function with no interface.
Mistakes to avoid when choosing
The five mistakes below come down to three things: choosing for the wrong reason, deciding without checking, and adding more than the product needs.
A short process for making the decision
Five steps take you from a long list to a decision you can explain: list the must-haves, shortlist two, prototype the riskiest feature, check the long-term picture, then write the decision down.
If you are taking over an existing product, start with a review of the product and its plan before choosing anything new.
How we’d approach it
If more than one option fits, we pick the stack in a Discovery Sprint, based on your users, features, budget and the team who will maintain it.
Once the stack is chosen, the build itself is what our custom software development page covers.
