- same code on the client and server
- usable by non-JS clients (crawlers etc)
- initially render app on the server, then run client side
- 'portable' Javascript
- SEO
- fast time til content visible
- fast time to interactivity?
- DRY
- minimise non-portable code
- render initial state on server
- server bootstraps client side data
- application boots up on client and just works
- use pushstate rather than hashchange
- hijack links with e.preventDefault()
- use package.json "browser" field to switch code implementations
- pretend the server renderer is a client - both talk to API
- server must know when data is finished loading before responding
- data requirements must be observable by server
- flux must be modified - no singletons (in the case of write actions)