Note: Rook is still beta software.
Rook's goal is to solve this for you by:
Although you can read the docs directly on the GitHub repository, the generated GitBook is much easier to navigate.
You can find the docs at http://apazzolini.github.io/rook/
The easiest way to learn Rook is to jump in and get started. However, you should be at least a little bit familiar with the below libraries.
Rook adds minimal functionality on top of its core components. You will be utilizing these libraries directly, and it's important to understand them. We will only briefly explain capabilities of these libraries.
At its core, this project revolves around React.
Hapi is the backing Node.js server for the application. You will use Hapi for your server-side logic, and Rook will use Hapi for server-side rendering. Hapi is also responsible for serving static files, such as images.
This is a production-ready library created by Walmart to handle Black Friday traffic, and it also has a rich ecosystem. If you're not familiar with Hapi, you will also want to check out Joi and Boom for extra documentation.
Immutable.js is used to ensure your Redux reducers are, well, immutable.
Besides hot reloading of JS, we also hot reload CSS courtesy of PostCSS and PreCSS webpack loaders. If that wasn't sweet enough, Webpack also minifies and bundles everything together for production.
Testing is important. Testing can also be annoying. Rook comes preconfigured to make testing as frictionless as possible.
Towards the end of 2015, I decided to learn React and started on a long journey through READMEs, blogs, and tutorials. After developing a basic idea of the libraries I wanted to combine, I started building my personal website. It's certainly over-engineered, but it was a great learning experience.
There are a few excellent projects in the same vein as Rook I'd like to acknowledge.
First, we have erikras' react-redux-universal-hot-example. This is certainly one of the most prominent projects combining a similar stack, and was highly used as a reference. However, I think it's a difficult starting point. There's a lot to remove to get to a clean slate, and you're left with all of the wiring pieces in your project.
Second, bdefore's universal-redux has the same idea as Rook. In fact, Rook uses code from universal-redux for some configuration merging and general setup. It's a great project that abstracts away the core wiring of React/Redux. If you're looking for something more minimal and less opinionated than Rook, check it out.
Finally, I'd like to give a shoutout to Henry Smith for releasing the Rook package name on NPM for this project.