close
Skip to content

virtuoushub/redwood

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9,539 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Image

Redwood

by Tom Preston-Werner, Peter Pistorius, Rob Cameron, David Price, and more than 250 amazing contributors (see end of file for a full list).

Redwood is an opinionated, full-stack, JavaScript/TypeScript web application framework designed to keep you moving fast as your app grows from side project to startup.

At the highest level, a Redwood app is a React frontend that talks to a custom GraphQL API. The API uses Prisma to operate on a database. Out of the box you get tightly integrated testing with Jest, logging with Pino, and a UI component catalog with Storybook. Setting up authentication (like Auth0) or CSS frameworks (like Tailwind CSS) are a single command line invocation away. And to top it off, Redwood's architecture allows you to deploy to either serverless providers (e.g. Netlify, Vercel) or traditional server and container providers (e.g. AWS, Render) with nearly no code changes between the two!

By making a lot of decisions for you, Redwood lets you get to work on what makes your application special, instead of wasting cycles choosing and re-choosing various technologies and configurations. Plus, because Redwood is a proper framework, you benefit from continued performance and feature upgrades over time and with minimum effort.

Redwood is the latest open source project initiated by Tom Preston-Werner, cofounder of GitHub (most popular code host on the planet), creator of Jekyll (one of the first and most popular static site generators), creator of Gravatar (the most popular avatar service on the planet), author of the Semantic Versioning specification (powers the Node packaging ecosystem), and inventor of TOML (an obvious, minimal configuration language used by many projects).

TUTORIAL: The best way to get to know Redwood is by going through the extensive Redwood Tutorial. Have fun!

QUICK START: You can install and run a full-stack Redwood application on your machine with only a couple commands. Check out the Quick Start guide to get started.

EXAMPLES: If you'd like to see some simple examples of what a Redwood application looks like, take a look at the following projects:

Technologies

We are obsessed with developer experience and eliminating as much boilerplate as possible. Where existing libraries elegantly solve our problems, we use them; where they don't, we write our own solutions. The end result is a JavaScript development experience you can fall in love with!

Here's a quick taste of the technologies a standard Redwood application will use:

Features

  • Opinionated defaults for formatting, file organization, Webpack, Babel, and more
  • Simple but powerful routing (all routes defined in one file) with dynamic (typed) parameters, custom types, and named route functions (to generate correct URLs)
  • Automatic page-based code-splitting
  • Boilerplate-less GraphQL API construction
  • Cells: a declarative way to fetch data from the backend API
  • Generators for pages, layouts, cells, SDL, services, etc.
  • Scaffold generator for CRUD operations specific to a DB table
  • Forms with easy client- and/or server-side validation and error handling
  • Fast Refresh (hot reloading) for faster development
  • Database and Data migrations
  • Envelop Plugins that enhance the GraphQL lifecycle from context to execution
  • Simple but powerful GraphQL Directives to validate access or transform resolved data
  • Logging using Pino including transports
  • Webhooks: signature verification and payload signing for handling both incoming and outgoing
  • Jest testing utilities integrated across your codebase: mocks, test DB, generated boilerplate tests, scenarios, Web (components), and API (services, serverless functions, and webhooks)
  • Page prerendering at build time
  • Built-in Storybook integration: generated boilerplate component stories, tests, graphql/api mocks (Cells), and scenarios
  • API Server using Fastify for Serverful deploys
  • First-class Jamstack-style deployment to both serverless and traditional infrastructure: Netlify, Vercel, Serverless, Render, Docker container (for AWS, Google Cloud, Azure, etc.), and many more on the way!

How it works

A Redwood application is split into two parts: a frontend and a backend. This is represented as two JS/TS projects within a single monorepo. We use Yarn to make it easy to operate across both projects while keeping them in a single Git repository.

The frontend project is called web and the backend project is called api. For clarity, we will refer to these in prose as "sides", i.e. the "web side" and the "api side". They are separate projects because code on the web side will end up running in the user's browser while code on the api side will run on a server somewhere. It is important that you keep this distinction clear in your mind as you develop your application. The two separate projects are intended to make this obvious. In addition, separate projects allow for different dependencies and build processes for each project.

The api side is an implementation of a GraphQL API. Your business logic is organized into "services" that represent their own internal API and can be called both from external GraphQL requests and other internal services. Redwood can automatically connect your internal services with Apollo, reducing the amount of boilerplate you have to write. Your services can interact with a database via Prisma's ORM, and Prisma's migration tooling provides first-class migrations that take the pain out of evolving your database schema.

The web side is built with React. Redwood's router makes it simple to map URL paths to React "Page" components (and automatically code-split your app on each route). Pages may contain a "Layout" component to wrap content. They also contain "Cells" and regular React components. Cells allow you to declaratively manage the lifecycle of a component that fetches and displays data. Other Redwood utility components make it trivial to implement smart forms and various common needs. An ideal development flow starts with Storybook entries and Jest tests, so Redwood closely integrates both, making it easy to do the right thing.

You'll notice that the web side is called "web" and not "frontend". This is because Redwood conceives of a world where you may have other sides like "mobile", "desktop", "cli", etc., all consuming the same GraphQL API and living in the same monorepo.

Roadmap

A framework like Redwood has a lot of moving parts; the Roadmap is a great way to get a high-level overview of where the framework is relative to where we want it to be. And since we link to all of our GitHub project boards, it's also a great way to get involved! Roadmap

Why is it called Redwood?

(A history, by Tom Preston-Werner)

Where I live in Northern California there is a type of tree called a redwood. Redwoods are HUGE, the tallest in the world, some topping out at 115 meters (380 feet) in height. The eldest of the still-living redwoods sprouted from the ground an astonishing 3,200 years ago. To stand among them is transcendent. Sometimes, when I need to think or be creative, I will journey to my favorite grove of redwoods and walk among these giants, soaking myself in their silent grandeur.

In addition, Redwoods have a few properties that I thought would be aspirational for my nascent web app framework. Namely:

  • Redwoods are beautiful as saplings, and grow to be majestic. What if you could feel that way about your web app?

  • Redwood pinecones are dense and surprisingly small. Can we allow you to get more done with less code?

  • Redwood trees are resistant to fire. Surprisingly robust to disaster scenarios, just like a great web framework should be!

  • Redwoods appear complex from afar, but simple up close. Their branching structure provides order and allows for emergent complexity within a simple framework. Can a web framework do the same?

And there you have it.

Contributors

A gigantic "Thank YOU!" to everyone below who has contributed to one or more Redwood projects: Framework, Website, Docs, and Create-Redwood Template. 🚀

Co-founders

Image
Tom Preston-Werner

founder, leadership
Image
Peter Pistorius

founder
Image
Rob Cameron

founder
Image
David Price

founder, leadership

Core Team: Lead Maintainers and Community Leads

Image
Dominic Saadi

maintainer
Image
David Thyresson

maintainer
Image
Daniel Choudhury

maintainer
Image
Tobbe Lundberg

maintainer
Image
Kris Coulson

maintainer
Image
Keith T Elliot

community
Image
Barrett Burnworth

community
Image
Josh Walker

maintainer
Image
Amy Haywood Dutton

maintainer

Core Team: Alumni

Image
Aldo Bucchi

Image
Aditya Pandey

Image
Amanda Giannelli

Image
Alice Zhao

Image
Simon Gagnon

Image
Chris van der Merwe

Image
Ryan Lockard

Image
Peter Colapietro
Image
noire.munich
Image
Forrest Hayes

Image
Robert

Image
Anthony Campolo

Image
Claire Froelich

Image
Kim-Adeline Miguel

All Contributors

Image
Anton Moiseev
Image
Mohsen Azimi
Image
Christopher Burns
Image
Terris Kremer
Image
James George
Image
Brett Jackson
Image
Guilherme Pacheco
Image
Kasper Mikiewicz
Image
chris-hailstorm
Image
Jai
Image
Lachlan Campbell
Image
Satya Rohith
Image
Steven Normore
Image
Mads Rosenberg
Image
Ted Stoychev
Image
eurobob
Image
Vikash
Image
Adrian Mato
Image
Anirudh Nimmagadda
Image
Ben McCann
Image
Chris Ball
Image
Suvash Thapaliya
Image
Thieffen Delabaere
Image
swyx
Image
Max Leon
Image
Maxim Geerinck
Image
Niket Patel
Image
0xflotus
Image
Anthony Powell
Image
Aryan J
Image
Brian Ketelsen
Image
Dominic Chapman
Image
Evan Moncuso
Image
Georgy Petukhov
Image
Gianni Moschini
Image
Giel
Image
Jani Monoses
Image
Johan Eliasson
Image
Leonardo Elias
Image
Logan Houp
Image
Loren ☺️
Image
Mark Pollmann
Image
Matthew Leffler
Image
Michele Gerarduzzi
Image
Nick Gill
Image
Nicholas Joy Christ
Image
Olivier Lance
Image
Phuoc Do
Image
Rocky Meza
Image
Sharan Kumar S
Image
Simeon Griggs
Image
Taylor Milliman
Image
Zach Hammer
Image
Przemyslaw T
Image
Hemil Desai
Image
Alessio Montel
Image
Anthony Morris
Image
Beto
Image
Turadg Aleahmad
Image
Paul Karayan
Image
Nikolas
Image
guledali
Image
Yong Joseph Bakos
Image
Gerd Jungbluth
Image
James Highsmith
Image
Troy Rosenberg
Image
Amr Fahim
Image
dfundingsland
Image
Eduardo Reveles
Image
Jeffrey Horn
Image
matthewhembree
Image
Robert Bolender
Image
Shivam Chahar
Image
Aaron Sumner
Image
Alvin Crespo
Image
Chris Ellis
Image
Colin Ross
Image
Dennis Dang
Image
Derrick Pelletier
Image
Jeroen van Baarsen
Image
Matan Kushner
Image
Matthew Rathbone
Image
Michal Weisman
Image
Miguel Oller
Image
Mudassar Ali
Image
Nate Finch
Image
Paweł Kowalski
Image
Punit Makwana
Image
Scott Chacon
Image
scott
Image
Scott Walkinshaw
Image
Stephan van Diepen
Image
bpenno
Image
Tim Trautman
Image
Zachary McKenna
Image
Ryan Hayes
Image
Evan Weaver
Image
cr1at0rs
Image
qooqu
Image
Android Dev Notes
Image
Jeremy Kratz
Image
Monica Powell
Image
Ganesh Rane
Image
Ryan Doyle
Image
Matt Reetz
Image
Punit Makwana
Image
shzmr
Image
esteban-url
Image
Kurt Hutten
Image
António Meireles
Image
Brent Guffens
Image
Santhosh Laguduwa
Image
Marco Bucchi
Image
Johnny Choudhury-Lucas
Image
Steven Almeroth
Image
lumenCodes
Image
_robobunny
Image
Kevin Poston
Image
Davy Hausser
Image
Mohinder Saluja
Image
Lamanda
Image
ryancwalsh
Image
Nick Geerts
Image
miku86
Image
Krisztiaan
Image
Jonathan Derrough
Image
Asdethprime
Image
Brian Solon
Image
Chris Chapman
Image
Joël Galeran
Image
Mariah
Image
Tyler Scott Williams
Image
Vania Kucher
Image
Viren Bhagat
Image
William
Image
dcgoodwin2112
Image
Bennett Rogers
Image
Daniel O'Neill
Image
David Yu
Image
Adithya Sunil
Image
Edward Jiang
Image
Manuel Kallenbach
Image
Nick Schmitt
Image
Jon Meyers
Image
Matthew Bush
Image
Patrick Gallagher
Image
Himank Pathak
Image
Morgan Spencer
Image
Pedro Piñera Buendía
Image
Matt Sutkowski
Image
Justin Etheredge
Image
Zain Fathoni
Image
Shrill Shrestha
Image
Brent Anderson
Image
Vinaya Sathyanarayana
Image
Will Minshew
Image
Tawfik Yasser
Image
Sébastien Lorber
Image
Charlie Ray
Image
Kim, Jang-hwan
Image
TagawaHirotaka
Image
Andrew Lam
Image
Brandon DuRette
Image
Curtis Reimer
Image
Kevin Brown
Image
Nikolaj Ivancic
Image
Nuno Pato
Image
Renan Andrade
Image
Sai Deepesh
Image
bl-ue
Image
Sven Hanssen
Image
Mudassar Ali
Image
SangHee Kim
Image
Subhash Chandra
Image
KimSeonghyeon
Image
Zhihao Cui
Image
Kyle Corbitt
Image
Sean Doughty
Image
Zak Mandhro
Image
bozdoz
Image
Isaac Tait
Image
Jace
Image
Noah Bernsohn
Image
rene-demonsters
Image
Sergey Sharov
Image
Tim Pap
Image
in-in
Image
mlabate
Image
Pablo Dejuan
Image
bugsfunny
Image
Luís Pinto
Image
Leigh Halliday
Image
BlackHawkSigma
Image
Devin MacGillivray
Image
Francisco Jaramillo
Image
Orta Therox
Image
Tharshan Muthulingam
Image
Brian Liu
Image
allen joslin
Image
Ryan Wang
Image
Vashiru
Image
Ron Dyar
Image
Todd Pressley
Image
Zack Sheppard
Image
AlbertGao
Image
vchoy
Image
Daniel Macovei
Image
Peter Perlepes
Image
Benedict Adams
Image
Hampus Kraft
Image
Harun Kilic
Image
Mike Nikles
Image
Mohammad Shahbaz Alam
Image
Moulik Aggarwal
Image
Omar El-Domeiri
Image
Paul McKellar
Image
Sarthak Mohanty
Image
Justin Jurenka
Image
Jens Lindström
Image
Hampus Kraft
Image
Ryan Chenkie
Image
George Cameron
Image
John
Image
Shannon Smith
Image
Bob
Image
facinick
Image
Teodoro Villaneuva
Image
Sarvesh Limaye
Image
Shantanu Zadbuke
Image
Duke Manh
Image
Michael Marino
Image
Igor Savin
Image
Jacob Arriola
Image
Jingying Gu
Image
Tim Kolberger
Image
nzdjb
Image
Hannah Vivian Shaw
Image
usman kareemee
Image
watway
Image
Edward Mason
Image
Mateo Carriquí
Image
kataqatsi
Image
Jeff Schroeder
Image
mnm
Image
BBurnworth
Image
Jonathan
Image
Rishabh Poddar
Image
Vitalii Melnychuk
Image
Buck DeFore
Image
Kamarel Malanda
Image
Manuel Vila
Image
Arda TANRIKULU
Image
Tristan Lee
Image
Agustina Chaer
Image
Charles Tison
Image
Josema Sar
Image
Ken Greeff
Image
Wiktor Sienkiewicz
Image
Alejandro Frias
Image
Aleksandra
Image
Ian McPhail
Image
Kyle Stewart
Image
Laurin Quast
Image
Martin Juhasz
Image
Odee
Image
Stephen Handley
Image
Syeda Zainab
Image
joriswill
Image
szainab
Image
twodotsmax
Image
Michael Shilman
Image
nickpdemarco
Image
davidlcorbitt
Image
ROZBEH
Image
Anh Le (Andy)
Image
IsaacHook
Image
Matt Sears
Image
MthBarber
Image
Safi Nettah
Image
dietler
Image
Guedis
Image
rkmitra1
Image
m3t
Image
Brandon Bayer
Image
Matt Murphy
Image
jessicard
Image
Pete McCarthy
Image
Philzen
Image
Vik
Image
Carl Hallén Jansson
Image
Chen Liu
Image
Manish
Image
Zach Peters
Image
Benas Mandravickas
Image
COCL2022
Image
Ella
Image
Eric Kitaif
Image
Giuseppe Caruso
Image
Ian Walter
Image
Jedde Bowman
Image
Johan Eliasson
Image
Lee Staples
Image
Leo Thorp
Image
Matthieu Napoli
Image
Nik F P
Image
Olyno
Image
Robert Tirta
Image
The Ape Collector
Image
ccnklc
Image
cremno
Image
dkmooers
Image
hbellahc
Image
hello there
Image
llmaboi
Image
Changsoon Bok
Image
Kristoffer K.
Image
Justin Kuntz
Image
Paine Leffler
Image
Paul Venable
Image
Peter Chen
Image
Yann
Image
Andre Wruszczak
Image
Anton Mihaylov
Image
Miguel Parramón
Image
Fabio Lazzaroni
Image
Rushabh Javeri
Image
Anders Søgaard
Image
kunalarya
Image
Aleph Retamal
Image
Alon
Image
Bouzid Badreddine
Image
Charly POLY
Image
Guillaume Mantopoulos
Image
Jan Henning
Image
Jonas Oberschweiber
Image
Jordan Rolph
Image
Jorge Venegas
Image
Kolja Lampe
Image
Leon
Image
Masvoras
Image
Min ho Kim
Image
Pin Sern
Image
RUI OKAZAKI
Image
Syahrizal Ardana
Image
craineum
Image
hello there
Image
Matt Driscoll
Image
paikwiki
Image
Mark Wiemer
Image
Alex Hughes
Image
Erica Pisani
Image
Fatih Altinok
Image
Kris
Image
Krupali Makadiya
Image
Malted
Image
Michelle Greer
Image
Nikola Hristov
Image
Swarit Choudhari
Image
Lina
Image
pwellner
Image
Jay O'Conor
Image
Stan Duprey
Image
Victor Savkin
Image
Łukasz Sowa
Image
Andrew Lam
Image
Daniel Jalkut
Image
Eli
Image
NoahC5
Image
Tommy Marshall
Image
Zachary Vander Velden
Image
pantheredeye
Image
Kirby Douglas Ellingson
Image
Sergio Guzman
Image
Eric Howey
Image
Erik Guzman
Image
IRSHAD WANI
Image
Niall
Image
Nikola Hristov
Image
Rui Okazaki
Image
Sunjay Armstead
Image
Justin
Image
kam c.
Image
makdeb
Image
payapula
Image
willks
Image
Josh GM Walker
Image
Ari Mendelow
Image
Jake Zhao
Image
psirus0588
Image
Eric Rabinowitz
Image
Maximilian Raschle
Image
nikolaxhristov
Image
Alon Bukai
Image
Han Ke
Image
Matt Chapman
Image
Rowin Mol
Image
Christopher Burns
Image
Alex Lilly
Image
dphuang2
Image
Daniel Escoto
Image
James Hester
Image
Guillaume Mantopoulos
Image
Linus Timm
Image
Mina Abadir
Image
Tom Dickson
Image
Tyler
Image
Christian Bergschneider
Image
Emre Erdoğan
Image
Toshinori Tsugita
Image
Ajit Kumar Goel
Image
Tai Vo
Image
Sam Huang
Image
Stefanos Anagnostou
Image
dennemark
Image
Aaron Rackley (EverydayTinkerer)
Image
Brent Scheibelhut
Image
Cal Courtney
Image
Jai Srivastav
Image
Tilmann
Image
cheddar
Image
Bryan Clark
Image
Carl Lange
Image
Chris Davis
Image
David Kus
Image
Flouse
Image
Hannes Tiede
Image
Lucas-Bide
Image
Martin Váňa
Image
Chris Rogers
Image
Samanvay Karambhe
Image
alireza rais sattari
Image
aslaker
Image
zach-withcoherence
Image
tuxcommunity
Image
Ted
Image
Dalton Craven
Image
Drikus Roor
Image
Eka
Image
ModupeD
Image
Nemi Shah
Image
Rodrigo Medina
Image
Russell Anthony
Image
Jason Daniel
Image
ray hatfield
Image
swyx.io
Image
BWizard06
Image
Bigood
Image
Cristi Ciobanu
Image
Gilliard Macedo
Image
Lee Ravenberg
Image
Matthew Phillips
Image
Rui Lima
Image
Sheng Chou
Image
yahhuh

Redwood projects (mostly) follow the all-contributions specification. Contributions of any kind are welcome.

About

Bringing full-stack to the Jamstack.

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages

  • TypeScript 57.5%
  • JavaScript 42.2%
  • CSS 0.2%
  • HTML 0.1%
  • XS 0.0%
  • Prolog 0.0%