Since then a lot has changed. I'm curious what people consider the fastest/easiest way to build a full-stack SaaS app in 2020.
Assume the following:
- Can be picked up by almost anyone (assume basic HTM/CSS/JS understanding), doesn't require any deep CS understanding (think how easy Rails was in 2006)
- Has full-stack capabilities, not just front-end
- Is open source and can be deployed anywhere
- Is complex enough to rule our no code solutions like Bubble or Webflow
It can do anything you could possibly want to do with a standard web app and if you really want to do crazy Javascript things you can always just use it as an extremely powerful backend for whatever the frontend framework of the day is. The admin site alone has saved me weeks of work and I keep finding amazing features in it that often just seem like magic (formsets!!).
- React for the front end (https://reactjs.org)
- Node.js for your back end (https://nodejs.org)
- Deploy using Adapt, which ties your front and back end together using React-like components. (https://adaptjs.org).
- (Optional) If this project is larger or commercial, definitely use TypeScript on all 3 of the above (http://www.typescriptlang.org/)
[Disclosure: I'm a maintainer of Adapt, but a strong believer in the React model and ecosystem]
So while I'm not sure Rails is easiest to pick up for a complete newbie, I am sure that there is still no framework that can touch Rails when it comes to fast/easy to build an entire web application from scratch that is truly broadly deployable and maintainable for years to come and won't cause you to tear your hair out every other day. :)
I think you're not going to see much consensus to this question, merely a comment-based list of all possible frameworks that people know.
User joshmn had it right in his reply:
> If you know something now, use it.
Anything your team already knows will be easiest and fastest for you to use. Any new person you hire will have a lot to learn no matter which one you choose, unless you hire people for the framework/stack you chose.
There is no "right" answer to this, and there probably never will be, and that's not a bad thing. Trying to find the "perfect" solution is a futile effort.
If you don't, Rails or Laravel are both good options. I'm partial to Ruby, its syntax, its expressiveness; the ecosystem cannot be beat, and the tooling is stable and mature. There's nothing not to like.
PostgREST or Serverless framework for the backend.
Avoid middle ware all together!
Stimulus Reflex for real-time dynamic updates without the complexities of React components. https://github.com/hopsoft/stimulus_reflex
Python => Django
PHP => Laravel
Ruby => Rails
Node/JS => ExpressJS
Elixir => Phoenix
My personal opinion on building web applications the quickest way. I mostly use Laravel.
https://wordpress.tv/2019/04/23/corey-maass-build-a-web-app-...
There are a number of large web apps that use it, so it's not just for MVP's. I also heard the book "Building Web Apps with WordPress: WordPress as an Application Framework" will be getting a second edition this year.
It's not the coolest, shiniest option, but a solid one, I think.
You can indeed use Express.js for the HTTP part, but you’ll need to pick an ORM, a rest framework, etc and make sure they integrate properly which might include writing “glue” code to bring them together.
Unless you’re knowledgeable about Javascript I suggest you avoid this option and instead pick another language you know that happens to have a batteries-included framework like Django, Laravel or Rails just to make development faster as these frameworks include everything you need out of the box and are tested to work well out of the box.
Disclaimer, biased as I am the lead maintainer for the project ;)
- Tight integration with React, Vue, Svelte - Natively supports Mongo, but there are good GraphQL and SQL integrations these days - Plug 'n play user accounts (customisable) - Easy to deploy - Builds to Android, iOS, even desktop these days. - Tight integration between back and frontend. Extremely simple to write API's or realtime applications - It's simply Node on backend, do whatever you're used to - Still a very active community - Tons of apps running happily in production (the myth of it not scaling is due to developers not understanding, not the framework itself)
We continue using it, nothing develops as fast and easy - at least in the Node world.
The nice part about Node is that you'll have JS on both the front and back ends.
It really scalable and if you use typescript, you can get type safety as well :)
There is your answer!
But for anyone with a decent amount of programming experience in a mainstream high level language like C# / Java / JS / Python / Ruby etc. it's probably best to stick to your own language and pick it's stack, if it is dev speed you are after. Some might be easier to set up than others, but there are plenty of example github repos you can clone to get started anyway.
For (what I'll call.. sue me) "systems" languages C, C++, Haskell, Rust, GO etc, I'd probably move over to one of the mainstream stacks for getting things done fast, as they will have a better ecosystem. Also if you already know one of those languages you can easily work with the mainstream ones!
Next.js is react + ssr + routing and more. Hasura exposes an auto-generated graphql API in front of a postgres instance, with hooks for auth/authz and much more.
- Front-End: Vue.js with Bulma.css - Webpack/Gulp for building JavaScript/SCSS. (I have the blueprint here: https://github.com/omarabid/front-root but there is still no docs and rough edges). The website is/will always be static files generated by Gulp. First frontier for scaling is eased.
- API: I use a GraphQl server. This avoid the mess that is RESTful. It also give me a nice explorer, so I can make my application and be able to roughly work with it before I have an interface ready. This part is also easy to scale.
- Application: Rust. Technically, you can use anything here. But since I don't have any web components (the site is static and the API is served through GraphQl) then I use Rust which I find very productive. Rust generates a compiled program which run inside a container and makes deployment more enjoyable.
- Database: Postgres/Redis.
- Deployment: Everything runs in a container. I use Hashicorp software for deploying and orchestrating the servers. Terraform if I have a simple single server app. Or Consul/Nomad/Vault if I'm running multiple servers.
It might sound complicated but beyond the initial investment to set things up, you have a stable/reliable micro-services app.
It has a great ecosystem and lots of great packages and tools to make it fun and easy to develop web applications.
Authentication, file upload, admin interface ... are some of those.
https://www.simplecto.com/django-my-go-to-application-framew...
Following on that, enough HNers have laid out the Django story, but I want to give some more depth to it. This is my entire stack:
- Linux Server/VM Hosted anywhere (I like Azure, Digital Ocean, or Scaleway) - Docker. Just plain docker - Postgresql running in docker - Django in a container - Intercoolerjs for easy and slick Ajax-like front-end work - Traefik for reverse proxy and TLS with LetsEncrypt - Sentry for catching production bugs (easy three-lines added to your config) - Bitbucket pipelines for CI/CD
For smaller projects I run tests locally in docker containers and then push directly into produciton. I dont bother with full CI/CD because I don't need the complexity of it all.
If you know JS, just stick to Node + Express.
I stick to Go or Node for the backend, and create-react-app for the web client. I prefer Go in most cases because I don't need to rely on many external deps, and I have my own starters for both Go and Node to create services quickly (rest, real time, assets, data/repository)
It does have graphQL which can get a little tricky, but the constantly rebuilding dev environment and GitHub hook driven deployments make running a site a breeze.
For back-end I'm currently favouring F#/Giraffe. I'm new to .NET Core but F# is reason enough to try it out. Previously I've used Go or Kotlin/Java with Javalin/JDBI which I find lighter and simpler than Spring/Boot.
I'm a front-end developer looking to get serious about practicing my back-end development skills. Any recommendations for a language/framework with static typing (outside of Node + TS)? Spring Boot and Kotlin? .NET Core? Go?
Back: FastAPI
So why not use Rails?
Plus the advantage is ES6 all around. Node utilizes the host resources much more effectively than PHP. And PHP requires Laravel/Artisan to make up for its shortcomings, IMHO. It feels like those to extensions were built for people with extensive PHP backgrounds, and not newcomers. Whereas Node does a better job onramping IMHO.
I find using JS on both ends is much easier than trying to bring in a bigger system like Rails/Django/Apache+PHP.
Especially if you are starting from Square One.