It’s 2019. Next.js/Nuxt.js are pushing the boundaries of what SSGs are capable of, and are surging in popularity. The ‘Let’s Recreate Rails’ era questions if we can take this paradigm even further. Why don’t we create full-stack applications in one framework, in the same vein as Rails?
Redwoodjs
by Tom Preston-Werner, Peter Pistorius, David Price & Rob Cameron
Eleven years after the launch of Jekyll, Tom Preston-Werner et al started working on a new project in the SSG space, Redwoodjs. Calling Redwoodjs a static site generator is misleading, however. The ambition for the project is far greater:
We’re looking to be a modern replacement for something like Ruby on Rails, so think full-on web application vs a blog or simple eCommerce site.”
Redwoodjs is about bringing the full stack to the Jamstack. It has a React frontend, talks via GraphQL to a backend running on serverless functions, and is all deployed with a Git push. It’s an opinionated framework that puts developer experience at its heart.
Like many popular SSGs, Redwoodjs started with a set of core philosophies:
- Jamstack architecture is the best way to write and deploy web applications.
- Strong conventions help developers organize and collaborate on web projects.
- Traditional, relational databases like PostgreSQL and MySQL are still the workhorses of today’s web applications.
- You should be able to operate in a serverless mindset and deploy to a generic computational grid.
- Deployment and scaling should be super easy.
- The framework should be equally useful for writing both simple, toy applications and complex, mission-critical applications.
- Use JavaScript for both the frontend and backend. Using a single language simplifies everything from code reuse to hiring developers.
Just like Rails, Redwoodjs makes heavy use of CLI generators to rapidly create boilerplates for your components, layouts, data migrations, and more. You can also use the CLI to deploy your site directly to popular hosting providers.
Redwoodjs is purposefully pushing the boundaries of what’s possible with Jamstack. It’s a new approach to building web applications and has flexible solutions for Auth, makes accessibility a first-class citizen, and uses the popular database toolkit library Prisma for your data layer. The project is aiming to have a production-ready 1.0 launch in early 2022.
Scully
by Aaron Frost, Sander Elias, and Jorge Cano
The Angular community finally had their answer for SSGs in 2019 with Scully. Scully follows a similar model to Gatsby:
- Write your views using Angular.
- Scully renders these into static web pages.
- On page load, the static HTML turns into an interactive web app or SPA through hydration.
The idea is to give the best of both worlds — a fast page load for SEO and user experience, followed by loading hundreds of KBs of JavaScript to enable client-side interactions.
The magical part of Scully is its use of the Guess.js library and machine learning. Scully automatically finds all the routes in an existing Angular project and prerenders an HTML page for each. If you have an Angular project you’re looking to bring to the Jamstack world, look no further than Scully.
Blitz.js
Blitz.js started when Brandon Bayer conversed with his friend about the pros and cons of Ruby on Rails versus React. He realized that while the development community has made a tremendous amount of progress on JavaScript frameworks, these frameworks can’t compete with the simplicity and developer experience offered by Ruby on Rails. Monolithic applications — for all their shortcomings — are easier to get your head around and give far greater flexibility to the developer.
Prisma 2 had recently been released; Next.js was seeing massive success. Brandon thought if he could pull all these pieces together into a full-stack framework, he could bridge the best of both worlds between Ruby on Rails and React.
Brandon started with a set of core philosophies for the new framework:
- Fullstack monolithic — monoliths are faster and easier to scale.
- API not required — APIs add complexity and slow you down.
- Convention over configuration — By default, things should just work.
- Loose opinions — Gives you a happy path on routine decisions. Gives you a choice when there’s no consensus.
- Easy to start, easy to scale — Easy for beginners, yet scalable for large-scale organizations.
- Stability — Predictable release cycles.
- Community over code — People are far more important than anything else.
Before long, Brandon had the first version of Blitz.js.
Blitz.js shares many similarities with Redwoodjs:
- They’re both heavily inspired by Ruby on Rails.
- They’re full-stack React frameworks.
- They make heavy use of Prisma for their data layer.
- They use code scaffolding to get you developing rapidly.
- They have built-in authentication.
- They value convention over configuration.
Their vision is slightly different, however. For one, Blitz.js sits on top of Next.js, whereas Redwoodjs is a standalone tool. Brandon himself differentiates the two:
Redwood is tooling & conventions for traditional SPAs. Blitz is not a traditional SPA. The end UX of a Blitz app is the same or better than an SPA, but the DX is like a traditional server-rendered MVC app.
The emergence of these full-stack frameworks may feel like we’ve come full circle. In many ways, we have. This time around, we have tooling that blurs the line between frontend and backend. One language, one framework, with batteries included. It’s going to be exciting watching these frameworks evolve.
Top comments (2)
See Redwood.JS is absolutely fascinating one to me,
Background) When I was in collage study web development around years of 2015-2019, I remember learning my school first taught me PHP development with MySQL. Obviously I was not used to writing code like that yet anyway. Late 2016 and early 2017 I started to learn react, create-react-app has just been released. Brad Traversy released his 90min long video on youtube how to build a CRUD using these tech-stack React.JS on Frontend and Express.JS on Backend.
Doing this myself back then was tough though and the fact it should take that long?
I also remember being really into the movie social network being inspired by it and telling myself. I'm using the same top-tier technology by Facebook create-react-app and Express.JS to build my app. The thing was the more I was using React.JS they more I felt it was missing things and bunch of things too.
The thing was at that time it was really hard to know what it's missing exactly because you're still junior developer. You have not been exposed to much but the fact that I have to install a routing library in order to get routing capabilities was sign even for a junior back then.
Fast forward to year 2018, I discovered something called Ruby on Rails, and Rails let me tell you. It was magical, suddenly watching the social network movie felt like I can do all that myself now. Ruby on Rails came with nearly everything that I could ask for + more. I could never use something like create-react-app again not even for fun anymore.
You know how I used to ask myself, well how would I do authentication, authorization, upload-files, sending emails and generating pdf? Well the thing was Ruby on Rails actually included all of that out-the-box, on the view-layer alone Rails provided my than react ever did namely routing and form-builders and various integration. Rails did like 1000 things well versus something like react that might have concern itself with 0.5% of building a web application. Building a CRUD app now just took merely a few seconds to do, thanks to rails scaffold command. Rails also introduced me to testing and different pattern in software like DRY, MVC, TDD and in some part OOP.
There was a problem though, I was not a ruby developer. I could not find any ruby jobs in my local area no matter how hard I tried and I was still mostly writing javascript. Another problem was very few people were even aware about rails existence. You always had explain to a Javascript tech lead but well why don't you just use RoR instead? He looks back at you with big weird eyes. What is Ruby on Rails?
It was quite frustrating and sad looking back at it now, some how I was starting feel like it should be the other way around. It made no sense why people around insisting to use crabby tools like CRA when RoR was available? It still makes no sense for me but it just the way it’s I guess. It is one of those things that are utterly surprising to me. Granted any good developer can turn water into redwine but create-react-app was rough though.
Sometime late 2019 Redwood.JS was announced even just being a 3-days old github repo. I could see that the dark days of create-react-app being the State Of Web was finally over. Now we finally had our own rails like experience and still using modern tools like react & graphql.
I'm just glad that developers in the future are going to have much better tools then I had starting out.
You're right — Redwoodjs is incredibly promising. It's opinionated as all get-out, but convention and the accompanying dependability can be a really powerful selling point. (And the release candidate from December '21 was already exciting enough, so the prospect of a production-ready 1.0 in the first half of '22 is just the icing on the cake.)