Home

Awesome

<p align="center"><img src="docs/img/telavivjs.png" width=220></p> <p align="center"><a href="https://github.com/facebook/react">React</a> Universal Rendering</p> <p align="center"><a href="https://travis-ci.org/dustin-H/telaviv"><img src="https://travis-ci.org/dustin-H/telaviv.svg"/></a>&nbsp;<a href="https://codeclimate.com/github/dustin-H/telaviv"><img src="https://codeclimate.com/github/dustin-H/telaviv/badges/gpa.svg" /></a>&nbsp;<a href="https://codeclimate.com/github/dustin-H/telaviv/coverage"><img src="https://codeclimate.com/github/dustin-H/telaviv/badges/coverage.svg" /></a></p> <p align="center"><a href="https://github.com/dustin-H/telaviv/blob/master/docs/README.md">Docs</a> - <a href="https://github.com/dustin-H/telaviv/blob/master/docs/GetStarted.md">Get Started</a></p> <br/>

Features

Idea

The main idea for TelAviv.js is to render a React app initially on a Node.js server and continue further rendering in the user's browser. The next route changes will only request data from the API.

Why?

This concept combines the benefits of server rendering and client rendering:

  1. Search Engine optimized:
    The TelAviv.js server fetches all data from your REST-API before responding. So crawlers are able to index all your pages.
  2. Fast initial load:
    The TelAviv.js server renders static html markup including the minimal set of css. All JavaScript code gets loaded asynchronous.
  3. Minimal server traffic:
    After the JavaScript code was loaded, the TelAviv.js script handles all route changes and only loads data from the API, which relieves the server.

Installation

npm install telaviv --save

Usage

Basically TelAviv.js is a express middleware.

import telaviv from 'telaviv'
import express from 'express'
import config from 'config.js'

let app = express()

app.use(telaviv(config))

app.listen(8080)

config.js

export default {
  routes: [{
    path: '/article/:id',
    html5: [{
      component: 'Header'
    }, {
      component: 'Article',
      data: {
        type: 'REST',
        url: '/api/article/:id'
      }
    }, {
      component: 'Footer'
    }]
  }],
  apiAddress: 'http://localhost:8000/'
}

Contribute

We actively welcome pull requests.

License

TELAVIV.JS is MIT licensed.

Created with ♥ by Dustin Hoffner.