Boilerplate + examples for React Native (iOS, Android), React (isomorphic, Material-UI), Relay, GraphQL, JWT, Node.js, Apache Cassandra, other databases.
Please follow @CodeFoundries and our blog if you are interested in news about the boilerplate.
For the most up to date list of technologies used please go to CodeFoundries.com.
Technology | Description |
---|---|
React JS | Library for building Single Page Applications and apps. Often called the 'V' in the MVC model. |
react-router | React Router keeps your UI in sync with the URL. It has a simple API with powerful features like lazy code loading, dynamic route matching, and location transition handling built right in. Make the URL your first thought, not an after-thought. |
React Native | React Native enables you to build world-class application experiences on native platforms using a consistent developer experience based on JavaScript and React. |
react-native-router-flux | Router for React Native based on new React Native Navigation API. |
Relay | A Javascript framework for building data-driven react applications. |
Material UI | Library for implementing Material Design in React. All user interface in this kit is built exclusively with Material UI components. |
material-ui-country-flags | Library with flag icons for Material-UI, used for the language selector. |
material-ui-credit-card-icons | Library with icons for all major credit cards. |
Technology | Description |
---|---|
Node.js | Event-driven, non-blocking I/O runtime based on JavaScript that is lightweight and efficient. |
GraphQL | A query language created by Facebook in 2012 for describing the capabilities and requirements of data models for client‐server applications. |
GraphiQL | An 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. |
Express GraphQL | A Node.js express library that allows the creation of GraphQL servers. |
Isomorphic Relay | Adds server side rendering support to React Relay. The boilerplate fully utilizes this library. |
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. |
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. |
JWT | JSON Web Tokens is an industry standard RFC 7519 method for representing claims securely between two parties. |
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. |
Technology | Description |
---|---|
Flow | Static type checker, designed to find type errors in JavaScript programs. |
ESLint | Pluggable linting utility for JavaScript and JSX. |
Babel | Compiles ES6/ES7 to ES5. Allows using features from ES6 and ES7 today. Also, used by Relay. |
Webpack | Bundles npm packages and the application Java Script into a single file. Includes hot reloading via react-transform-hmr. Also, Webpack can bundle any required CSS. |
NPM Scripts | Glues all this together in a handy automated build. |
For the most up to date setup instructions please go to the development setup instructions.
The setup is for OS X only. Prerequisites:
- Install Node.js.
- Install Git.
- Make sure that Node.js is at least version 6.0 and NPM is at least version 3.
- In order to speed up NPM run
npm set progress=false
. This speeds up NPM significantly. - Install react-native-cli run
npm install -g react-native-cli
In order to set up the project locally, perform the following steps:
Action | Notes |
---|---|
git clone https://github.com/codefoundries/UniversalRelayBoilerplate |
Clone from github. Alternatively, you can download the source and update in some different way. |
npm install |
Install node packages. You will see errors like Error: ENOENT: no such file or directory, open '.env' . They can be ignored. |
npm run setup-local |
Perform initial setup. |
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.
In order to develop, three servers need to be started:
- Web server.
- Webpack server.
- React Native packager.
This can be done with one command:
- Start application HTTP and Webpack server:
npm run dev
.
To open the app:
- Navigate to
http://localhost:4444
, unless you specified a different IP and/or port either manually or by usingnpm run update-ip
.
To run the iOS app in the emulator:
- Run
react-native run-ios
.
- 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:
CASSANDRA_CONNECTION_POINTS=localhost
CASSANDRA_KEYSPACE=urb
- Configure to use Cassandra as default persister:
npm run update-default-persister -- cassandra
. - Create the database with
npm run setup-database
.
- Install Docker.
- Navigate to the docker-compose.yml file
cd units/urb-persister-dynamodb
. - Then run
docker-compose up
in a new terminal to start up a local dynamo db (or start it via docker Kitematic). - Configure to use DynamoDB as default persister:
npm run update-default-persister -- dynamodb
.
Instructions for other databases will be added as support for those is added.
We keep the information about the Universal Relay Boilerplate and Rebar updated on our website:
- Environment Variables Configuration.
- Customizing Material-UI Look and Feel.
- Configuration Folder.
- NPM Tasks.
- Project Structure.
- Troubleshooting.
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.