Intro to Redwood.js: Rapid application development with React

Intro to Redwood.js: Rapid application development with React

One particular of the largest difficulties of constructing a world wide web application is choosing the technologies you can use and integrating them into a doing the job stack. Redwood.js is a React-centered framework that provides an out-of-the-box stack, so you can just work with proven systems that are now perfectly integrated in the framework.

Redwood.js unites Respond, GraphQL, and Prisma to tackle your application’s UI, API, and facts persistence. Around this main are helper tools and designed-in capabilities like testing and logging command-line support for frameworks like Auth0 and TailwindCSS and the capability to target both of those serverless and IaaS (Infrastructure-as-a-Company) deployments.

If you are hunting for an less complicated way to establish React-dependent apps, Redwood.js could be a good selection. Study on for a fingers-on introduction to Redwood.

Established up the Redwood illustration application

To set up a new Redwood project, you’ll want Yarm and the latest, active LTS edition of Node.js installed on your improvement machine. Create a new software by moving into the command shown in Listing 1.

Listing 1. Produce a new Redwood.js software

yarn create redwood-application ./redwood-demo
cd ./redwood-demo
yarn rw dev

You’ll get the welcome screen demonstrated in Figure 1 when you visit localhost:8911 in your browser. (Parameters like the port are configured with the redwood.toml configuration file.)

Screenshot of the Redwood.js welcome screen. IDG

Determine 1. The Redwood.js welcome display.

Add a web site on the Redwood command-line

Redwood.js incorporates the means to insert webpages and routes from the command-line. The welcome page in Figure 1 is developed-in by the framework—there is no actual file backing it. We can make our own landing website page by getting into the adhering to command:

yarn redwood create page welcome /

Listed here, you see the standard kind for Redwood instructions. It claims: make a web page called “welcome” with the root route (/). Now, if you take a look at localhost:8910, you will get a really basic site indicating “WelcomePage.” Redwood employs PascalCase in its translation of routes, and it appends the phrase Website page. So, our “welcome” route has turn into “WelcomePage.” You can come across the website page resource at /website/src/web pages/WelcomePage/WelcomePage.js.

Routing with Apollo GraphQL

The WelcomePage itself is not nevertheless incredibly intriguing, but we are far more fascinated in how Redwood handles the routing. You can obtain your application’s routes in /website/src/Routes.js, as proven in Listing 2.

Listing 2. /world wide web/Routes.js

import  Router, Route  from '@redwoodjs/router'

const Routes = () => 
  return (

export default Routes

Listing 2 displays that you are working with the Redwood.js router, which is similar to other options like React Router, but has some exclusive characteristics. In standard, every single Route entry gives a mapping between the URL path and the webpage ingredient that provides the content material for that route. 

One particular unique characteristic about the router is that it is pushed by the Apollo GraphQL state library. You can see how this is established up in /website/src/App.js, which is the application’s most important element. Listing 3 reveals the related component of the code.

Listing 3. Routing by using Apollo GraphQL


Redwood hides most of the aspects from the application developer. It makes use of Apollo GraphQL to control the application state, including the routing.

Increase and backlink a site

We’re likely to develop a new webpage to list track lyrics. To start out, incorporate the web page by getting into the next on the command-line:

yarn redwood crank out site tunes

Now, you can produce a backlink on the WelcomePage by working with the Website link part, as revealed in Listing 4.

Listing 4. Linking to the SongsPage

import  Hyperlink, routes  from '@redwoodjs/router'

Go to Tracks

Now, you can click the backlink and go to the Music website page, which also involves a essential welcome monitor. While we will never get into it here, Redwood.js supports layouts, which you can implement across many webpages to lessen the need for boilerplate code.

Doing the job with the Redwood.js back again stop

Now, let’s take a appear at the Redwood.js back again stop. Redwood utilizes Prisma ORM to map to a database, and it consists of SQLite as an in-location database for improvement. (Notice that Redwood resembles Blitz.js in this regard.) We can insert a schema for our Tracks web page by opening the file at api/db/schema.prism and introducing the entry revealed in Listing 5. (You can delete the pre-current sample, UserExample product.)

Listing 5. Adding the Music and Songwriter types to Prisma/SQLite

design Track 
  id Int @id @default(autoincrement())
  name String @exclusive
  writers SongToWriter[]

If you are not common with object-relational mapping instruments like Prisma, you could possibly ponder what Listing 5 does. In essence, it produces a Tune facts model, which is utilised to translate amongst the application and the information shop. (See the Prisma documentation to master additional about information types in Prisma.)

Prisma will implement this new model to the SQLite schema when we enter the command: yarn rw prisma migrate dev. This command applies the schema for the dev database. (Note that Prisma will request for a title for the migration. Any worth will do. In a actual venture, you could use this name for rollbacks.)

Incorporate CRUD capabilities

As soon as Prisma is carried out, we can start making use of the design objects in our software for the reason that Prisma does the perform of mapping to and from the databases. But Redwood.js does some of the large lifting for us by producing the build, read through, update, and delete (CRUD) scaffolding. Just enter the next on your command-line: yarn redwood crank out scaffold Music.

Now, if you return to the /tunes website page, you can expect to see that Redwood has designed us a basic consumer interface centered on the schema. Figure 2 shows an instance of a standard UI.

Redwood.js scaffolds CRUD operations for a new page. IDG

Figure 2. CRUD scaffolding on the Tracks site.

So, the scaffold command produces a easy established of web pages and components that we can use to develop, update, and delete a Music entity. You can see the web site documents Redwood.js employs to achieve the consumer interface in /internet/src/web pages/Song/*. These page files, in turn, depend on the factors identified in /website/src/elements/Track/*

For instance, get a glimpse at /Song/SongPage/SongPage.js in Listing 6.

Listing 6. SongPage.js

import SongCell from 'src/components/Tune/SongCell'

const SongPage = ( id ) => 

export default SongPage

A mobile is a exclusive element that Redwood.js gives to simplify the managing the different states of a see (loading, vacant, mistake, and regular). It’s a handy way to handle condition in a typical style. You can study far more about cells in the Redwood.js documentation.

The SongCell seems to be like what you see in Listing 7.

Listing 7. SongCell.js

import Tune from 'src/factors/Track/Song'

export const Query = gql`
  query FindSongById($id: Int!) 
    track: music(id: $id) 
export const Loading = () => 
export const Vacant = () =>
Track not located
export const Failure = ( error ) => (
) export const Achievements = ( music ) => return

In this article, the element exports many distinct capabilities, which output varying JSX things. These capabilities are utilized by the Redwood.js layouts to output the suitable UI depending on the state. Notice that in the scenario of results, Redwood.js hands off the large lifting to the principal Tune component, where all the actual perform is carried out. The Music component is effective in a equivalent template, employing GraphQL to get and manipulate information from the information keep primarily based on a knowledge item that drives the watch. (If you are common with the MVC pattern, very well listed here it is again.) 


The software utilizes GraphQL to populate the details objects made use of by the UI. For instance, in the SongCell component, the Tune element is parameterized with the song variable, which is hydrated by the graphql question (Query) at the commencing of the supply. The question will use the ID slug from the URL.

As demonstrated in Listing 8, Redwood.js generates GraphQL queries to support these use scenarios. The queries are stored in api/src/graphql/music.sdl.ts.

Listing 8. tunes.sdl.ts

export const schema = gql`
  variety Music 
    id: Int!
    identify: String!

  sort Query 
    music: [Song!]! @requireAuth
    tune(id: Int!): Tune @requireAuth

  enter CreateSongInput 
    identify: String!

  input UpdateSongInput 
    identify: String

  variety Mutation 
    createSong(enter: CreateSongInput!): Music! @requireAuth
    updateSong(id: Int!, enter: UpdateSongInput!): Music! @requireAuth
    deleteSong(id: Int!): Music! @requireAuth

SDL documents are schema descriptions for the GraphQL API. The primary takeaway from Listing 8 is that a GraphQL endpoint exists for each and every little bit of performance about the Tune‘s CRUD functions. These actions are the conversation stage from the entrance stop to the again stop. 


The wonderful matter about Redwood.js is that it is not frightened to make a variety of critical development choices for us. From a developer’s point of view, that means an simple liftoff and much more efficient advancement, particularly at the commencing. Like all speedy application development frameworks, what is essential is comprehending how a variety of software factors hold alongside one another as your application gets extra intricate. At some place, you will possible require to make modifications that are outside the house of what the framework understands. 

Fortuitously, Redwood.js stays largely in the confines of properly-recognised technologies and conventions. You can use Redwood to establish a React-GraphQL-Prisma-RDBMS software with practical defaults, which can provide as a start pad for building additional precise prerequisites.

Redwood is developed to make it easy to deploy to distinct host forms. In unique, it is feasible to deploy to serverless environments like Netlify or Vercel. 

As a sidenote, I discovered developing with Redwood.js was reminiscent of Ruby on Rails. It’s been a moment considering that I employed that framework, but it arrived to head. As it turns out, Ruby on Rails was an inspiration for Redwood.js. So, if you are a Rails lover, absolutely have a search at Redwood.js.

Copyright © 2022 IDG Communications, Inc.