Universal Relay Boilerplate (URB)
Boilerplate + examples for universal web application with React, Material-UI, Relay, GraphQL, JWT, Node.js, Apache Cassandra / Elassandra.
Live demo I - uses in-memory persister, old verison.
Technologies used in Rebar and Universal Relay Boilerplate
For the most up to date list of technologies used please go to CodeFoundries.com.
|Express||Fast, unopinionated, minimalist web framework for Node.js|
|found||Extensible route-based routing for React applications.|
|Material UI||Library for implementing Material Design in React. All user interface in this kit is built exclusively with Material UI components.|
|React||The best library for building modern browser-based and mobile UIs.|
|React Helmet||Reusable React component will manage all of your changes to the document head with support for document title, meta, link, script, and base tags.|
|Apache Cassandra||The right choice when you need scalability and high availability without compromising performance. Linear scalability and proven fault-tolerance on commodity hardware or cloud infrastructure make it the perfect platform for mission-critical data. Cassandra's support for replicating across multiple datacenters is best-in-class, providing lower latency for your users and the peace of mind of knowing that you can survive regional outages.|
|Data Loader||Generic utility to be used as part of your application's data fetching layer to provide a consistent API over various backends and reduce requests to those backends via batching and caching.|
|Elassandra||Elassandra Combines Cassandra And Elasticsearch In A Single Powerful Integrated Solution. URB works well with Elassandra.|
|Express GraphQL||A Node.js express library that allows the creation of GraphQL servers.|
|GraphQL||A query language for describing the capabilities and requirements of data models for client‐server applications.|
|JWT||JSON Web Tokens is an industry standard RFC 7519 method for representing claims securely between two parties.|
|Babel||Transpiles ESX to ESX and performs relay transformations.|
|GraphiQL||Graphical interactive in-browser GraphQL IDE. It allows to test the entire schema provided by GraphQL and can be an excellent tool for exploring the boilerplate, as well as a part of applications built on top of it.|
|Husky||Git hooks for eslint and prettier.|
|React Hot Loader||Allows tweaking of React components in real time.|
|Webpack||Bundles npm packages, application Java Script, CSS, images, etc. into bundles.|
For the most up to date setup instructions please go to the development setup instructions.
Initial Development Machine Setup
The setup is for OS X only. Prerequisites:
- Install Node.js minimum version:
- Install Git minimum version:
- (currently not available) Install react-native-cli run
npm install -g react-native-clifor app development with React Native only.
- Install yarn run
npm install -g yarn
Initial Project setup on local machine
In order to set up the project locally, perform the following steps:
||Clone from github. Alternatively, you can download the source and update in some different way.|
||Install node packages.|
||Set up default configuration for running the boilerplate.|
In addition to the above, you might want to specify
JWT_SECRET by modifying the
.env file. This step can be skipped if you do not care about the actual security and simply want to get the project running.
Running in development mode
In order to develop, three servers need to be started:
- Web server.
- Webpack server.
- (currently not available) React Native packager.
This can be done with one command:
- Start application HTTP and Webpack server:
To open the app:
- Navigate to
http://localhost:26005, or whatever IP was assigned when running
yarn update-ipor after installation.
(currently not available) To run the iOS app in the emulator:
- If the IP of your development machine has changed, run
Configuring Cassandra locally
- Install and configure Cassandra following the steps in Cassandra Installation on Mac.
- Update the name of the database and the database server in
/.env, or use the defaults. The defaults are:
- Configure to use Cassandra as default persister:
yarn update-default-persister -- cassandra.
- Create the database with
We keep the information about the Universal Relay Boilerplate and Rebar updated on our website:
Architecture and Developer Resources
The following documents explain in detail certain aspects of the architecture in depth:
- Cassandra, meet Relay. Relay, meet Cassandra. Explanation of how Cassandra and Express GraphQL work together.
- Isomorphic React Relay. Explains the approach to isomorphism taken in implementing the starter kit.
- Isomorphic Server Variables. Using variables and settings in an isomorphic application - client rendering, server rendering.
- SEO Using Isomorphic Application With Relay and Helmet. How to make SEO-friendly pages with React, Relay and Helmet.
The following documents, while not explicitly related to the boilerplate, can be useful while running and modifying the kit:
- Cassandra Cheatsheet. List of common commands in CQL.
- Cassandra Installation on Mac. Simple steps for setting up an instance of Cassandra for development.
- Git Cheatsheet. Some useful git commands.
- React Cheatsheet. Techniques for working with React used in the starter kit.
- Where to Store Your JWTs - Cookies vs HTML5 Web Storage. Explains the advantages of using HTTP only cookies.
Universal Relay Boilerplate (URB) Classic
The previous version of this repository with Material-UI
0.18.x and Relay
0.10 is available at Universal Relay Boilerplate Classic. The current version is unfinished and under heavy development. Additional units with Windows support and DynamoDB support can be found at Universal Relay Boilerplate Extra.
The following mostly apply to URB classic. Will be removed once updated versions are created.