HackerReposA FIELD GUIDE TO OPEN SOURCE
ProSponsor the shelf♧ 0
← Back to top all-time
rendrjs
rendr
JavaScript2013–2015
rendrjs / rendr

rendr

Render your Backbone.js apps on the client and the server, using Node.js.

17Distinct people
25Mentions
0Explicit recommenders
4KGitHub stars
REPOSITORY AT A GLANCE

What to know before exploring

What it is

Render your Backbone.js apps on the client and the server, using Node.js.

GitHub

Where it is used

No documented product use was verified in the last source check.

What people are saying

No recommendation phrase was found in the indexed comments.

No classified warning is attached to this page. Read the discussions before treating silence as approval.

Also in these discussions

No other repository is repeatedly linked in the same discussions.

This week on Hacker News

Nov 7–Nov 14 UTC · Direct repository links and separately labeled related project stories. Indexed through 11/14/2026, 3:56:07 PM UTC.

No direct repository links were found in the indexed HN discussions over the past seven days. Older discussions are available below.

Mentions over time

HN mentions by month25 dated mentions

Observed mentions: 2013-04-02 02:20:10 UTC to 2015-06-15 04:35:49 UTC.

012342013-04-01 00:00:00 UTC to 2013-05-01 00:00:00 UTC (exclusive): 4 mentions; 1 submissions, 3 commentsApr 20132013-05-01 00:00:00 UTC to 2013-06-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2013-06-01 00:00:00 UTC to 2013-07-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2013-07-01 00:00:00 UTC to 2013-08-01 00:00:00 UTC (exclusive): 3 mentions; 0 submissions, 3 comments2013-08-01 00:00:00 UTC to 2013-09-01 00:00:00 UTC (exclusive): 2 mentions; 0 submissions, 2 comments2013-09-01 00:00:00 UTC to 2013-10-01 00:00:00 UTC (exclusive): 2 mentions; 0 submissions, 2 comments2013-10-01 00:00:00 UTC to 2013-11-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments2013-11-01 00:00:00 UTC to 2013-12-01 00:00:00 UTC (exclusive): 2 mentions; 0 submissions, 2 comments2013-12-01 00:00:00 UTC to 2014-01-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2014-01-01 00:00:00 UTC to 2014-02-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments2014-02-01 00:00:00 UTC to 2014-03-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments2014-03-01 00:00:00 UTC to 2014-04-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2014-04-01 00:00:00 UTC to 2014-05-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2014-05-01 00:00:00 UTC to 2014-06-01 00:00:00 UTC (exclusive): 2 mentions; 0 submissions, 2 commentsMay 20142014-06-01 00:00:00 UTC to 2014-07-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments2014-07-01 00:00:00 UTC to 2014-08-01 00:00:00 UTC (exclusive): 2 mentions; 0 submissions, 2 comments2014-08-01 00:00:00 UTC to 2014-09-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2014-09-01 00:00:00 UTC to 2014-10-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2014-10-01 00:00:00 UTC to 2014-11-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2014-11-01 00:00:00 UTC to 2014-12-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments2014-12-01 00:00:00 UTC to 2015-01-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2015-01-01 00:00:00 UTC to 2015-02-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments2015-02-01 00:00:00 UTC to 2015-03-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments2015-03-01 00:00:00 UTC to 2015-04-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2015-04-01 00:00:00 UTC to 2015-05-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2015-05-01 00:00:00 UTC to 2015-06-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2015-06-01 00:00:00 UTC to 2015-07-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 commentsJun 2015

Counts come from the repository’s dated source evidence. Index cutoff: 2026-11-02 08:16:59 UTC.

View mention counts and date ranges
UTC ranges include their start and exclude their end. Select a period to filter the source evidence.
PeriodStart (UTC)End (exclusive, UTC)MentionsSubmissionsComments
Apr 20132013-04-01 00:00:00 UTC2013-05-01 00:00:00 UTC413
May 20132013-05-01 00:00:00 UTC2013-06-01 00:00:00 UTC000
Jun 20132013-06-01 00:00:00 UTC2013-07-01 00:00:00 UTC000
Jul 20132013-07-01 00:00:00 UTC2013-08-01 00:00:00 UTC303
Aug 20132013-08-01 00:00:00 UTC2013-09-01 00:00:00 UTC202
Sep 20132013-09-01 00:00:00 UTC2013-10-01 00:00:00 UTC202
Oct 20132013-10-01 00:00:00 UTC2013-11-01 00:00:00 UTC101
Nov 20132013-11-01 00:00:00 UTC2013-12-01 00:00:00 UTC202
Dec 20132013-12-01 00:00:00 UTC2014-01-01 00:00:00 UTC000
Jan 20142014-01-01 00:00:00 UTC2014-02-01 00:00:00 UTC101
Feb 20142014-02-01 00:00:00 UTC2014-03-01 00:00:00 UTC101
Mar 20142014-03-01 00:00:00 UTC2014-04-01 00:00:00 UTC000
Apr 20142014-04-01 00:00:00 UTC2014-05-01 00:00:00 UTC000
May 20142014-05-01 00:00:00 UTC2014-06-01 00:00:00 UTC202
Jun 20142014-06-01 00:00:00 UTC2014-07-01 00:00:00 UTC101
Jul 20142014-07-01 00:00:00 UTC2014-08-01 00:00:00 UTC202
Aug 20142014-08-01 00:00:00 UTC2014-09-01 00:00:00 UTC000
Sep 20142014-09-01 00:00:00 UTC2014-10-01 00:00:00 UTC000
Oct 20142014-10-01 00:00:00 UTC2014-11-01 00:00:00 UTC000
Nov 20142014-11-01 00:00:00 UTC2014-12-01 00:00:00 UTC101
Dec 20142014-12-01 00:00:00 UTC2015-01-01 00:00:00 UTC000
Jan 20152015-01-01 00:00:00 UTC2015-02-01 00:00:00 UTC101
Feb 20152015-02-01 00:00:00 UTC2015-03-01 00:00:00 UTC101
Mar 20152015-03-01 00:00:00 UTC2015-04-01 00:00:00 UTC000
Apr 20152015-04-01 00:00:00 UTC2015-05-01 00:00:00 UTC000
May 20152015-05-01 00:00:00 UTC2015-06-01 00:00:00 UTC000
Jun 20152015-06-01 00:00:00 UTC2015-07-01 00:00:00 UTC101

From the project README

An excerpt from the repository, fetched Nov 13, 2026.

Read the project’s introduction
Rendr is a small library that allows you to run your Backbone.js apps seamlessly on both the client and the server. Allow your web server to serve fully-formed HTML pages to any deep link of your app, while preserving the snappy feel of a traditional Backbone.js client-side MVC app. Documentation The documentation website is: rendrjs.github.io. If you have any feedback or changes for the documentation please create an issue. The documentation is easy to submit changes to as well! Simply create a fork and use the Github Markdown editor to make and preview any changes, then open just open a Pull Request. Reporting problems and getting help Please use the issue tracker to report bugs. For support with using rendr, try asking in the Google group or join #rendr on irc.freenode.org. Getting Started To see how to use Rendr to build a simple web app, check out the examples repository for a number of different ways to set up a Rendr app. Check out the blog post for a more thorough introduction to Rendr. The Premise Our hypothesis is that there has to be a better way to build rich web apps today. In the last few years, we've seen more of the application moved to the client-side, with JavaScript representations of views, templates, and models. This can result in interactive, native-style apps, but it also poses challenges. SEO, performance, and maintainability become issues with splitting up your app into two distinct codebases, often in different languages. The Goals Rendr is intended to be a building block along the way to this envisioned future of web apps that can be run on either side of the wire according to the needs of your application. Some specific design goals: Write application logic agnostic to environment Minimize if (server) {...} else {...} Talk to RESTful API Library, not a framework Hide complexity in library No server-side DOM Simple Express middleware What's Included Rendr does not attempt to be a fully-fledged, batteries-included application framework. Instead, it follows Backbone's lead by imposing minimal structure, allowing the developer to use the library in the most appropriate way for their application. Base classes BaseView Inherits from Backbone.View. Public methods view.initialize() Environment: shared. This is where you put any initialization logic. view.preRender() Environment: shared. view.render() Environment: client. You should never have to override view.render() unless you're doing something really custom. Instead, you should be able to do anything you need using view.postRender(), view.postRender() Environment: client. Here is where you'd put any initialization code that needs to access the DOM. This is a good place for jQuery plugins, sliders, etc. view.getTemplateData() Environment: shared. The default implementation returns something reasonable: essentially view.model.toJSON() or {models: view.collection.toJSON()}. This method is easy to override in order to pass custom data to the template, or to decorate the model data. var MyView = BaseView.extend({ getTemplateData: function() { // Get `super`. var data = BaseView.prototype.getTemplateData.call(this); return _.extend({}, data, { someOtherProperty: 'something custom' }); } }); Methods you can override for custom view behaviors view.getTemplate() Environment: shared. You should never need to touch this, unless you're heavily customizing the view. Return a function that gets executed with a single data object as an argument. view.getTemplateName() Environment: shared. You'll probably never touch this unless you're heavily customizing the view. This defaults to view.constructor.id. You can return a string to render a different template. This is used by the default implementation of view.getTemplate(). view.getInnerHtml() Environment: shared. view.getHtml() Environment: shared. view.getAttributes() Environment: shared. Gets HTML attributes for outer DOM element. Used by view.getHtml(). BaseModel Inherits from Backbone.Model. BaseCollection Inherits from Backbone.Collection. BaseApp Inherits from Backbone.Model. BaseAppView Inherits from BaseView. You can change your main content container from this view by changing the contentEl key in the options object when extending BaseAppView var AppView = BaseAppView.extend({ options : { contentEl : "#mainContent" } }) BaseRouter ClientRouter Inherits from BaseRouter. ServerRouter Inherits from BaseRouter. Rendr Options Server Config ####Example var config = { dataAdapterConfig: { 'default': { host: 'api.github.com', protocol: 'https' } }, apiPath: '/api', appData: { myAttr: 'value'}, dataAdapter: myDataAdapterInstance, defaultEngine: 'js', entryPath: process.cwd() + '/myapp' errorHandler: function (err, req, res, next){}, notFoundHandler: function (req, res, next){}, viewsPath: "/app/views", }; rendr.createServer(config); Either a dataAdapter or dataAdapterConfig must be present. dataAdapterConfig - This is the standard way of configuring Rendr's built in DataAdapter. See DataAdapter Config dataAdapter - Allows you to override the default DataAdapter and provide your own. The dataAdapterConfig will be ignored. Default: RestAdapter which enables Rendr to speak basic REST using HTTP & JSON. This is good for consuming an existing RESTful API that exists externally to your Node app. apiPath Optional - Root of the API proxy's virtual path. Anything after this root will be followed by a -. Example: /api/-/path/to/resource. Allows the proxy to intercept API routes. Can also be a full path to a remote API http://api.myserver Default: api appData Optional - Pass any data that needs to be accessible by the client. Accessible from within your Handlebars context app.attributes.myAttr, and also within your views and models this.app.attributes.myAttr. defaultEngine Optional - Tell the ViewEngine to load different file types. Example: coffee Default: js entryPath Optional - Root p
Read the full README on GitHub

What Hacker News says

25 sources
I've been doing something similar using Backbone and Ezel[1] (I first started using Rendr[2], but couldn't get into it): As the OP says, it can be a bit confusing to get your mind around. Particularly the routing; part of my intention was to use the "isomorphic" technique -- btw, as a mathematician, I really hate that this term is used...but I digress -- to create a SPA that falls back to a traditional multipage site if/when JavaScript is disabled. It was a bit of a hurdle, but ultimately proved possible. I might give React a closer look, having read this. [1] http://ezeljs.com/ [2] https://github.com/rendrjs/rendr
In Presenting the Most Over-Engineered Blog Ever
Node is not going anywhere. It may not be cool anymore, but like the old cool kids (Rails, Java, Perl), it has achieved critical mass, and still has some killer features. Node makes SOA (service oriented architecture) a lot easier. SOA is what all the cool kids are moving to, and is one of the reasons why it's so easy for big companies with lots of legacy code to switch to Go. Once your code is appropriately partitioned into services, it's easy to write a single service in Go, and go is a nice language for writing services. That being said, Node is particularly well suited for consuming services. You'll necessarily have lots of client code written to consume and use these services from your webapp. So whenever you write a batch job or notification system or anything else that is primarily server side consumption of services or glu
Read the rest
e between services, node.js is a natural fit. The other natural advantage of Node is that your business logic can run on both the server and the client. Your standard client-side web app (angular, backbone, ember etc.) has the bulk of the business logic in the client-side models. On the server side, the corresponding models are mostly just shims to the database, but they will also contain some business logic. If your code is written in Node.js, you just instantiate the client side model to be access the business logic. The other killer feature for node.js has already been mentioned: combining both server and client side rendering with https://github.com/rendrjs/rendr or https://github.com/wvl/highbrow.
In Why I’m staying with Node
Shared code can be a huge win in certain scenarios. 1. the server can run the client code to render and serve HTML, so you get all the benefits of server side rendering as well as client side rendering. [1][2] 2. imagine you have an architecture that allows multiple clients to simultaneously modify a single document, like google docs, or like all your standard cookie-cutter enterprise form & report interface to records in a database database. Now imagine that you need to do some sort of batch operation to these documents. If your code is written in Node, you just run your client code on the server. Instead of directly manipulating the database from your batch workers, you use the standard REST & WebSocket API that your clients do. This is called a service-oriented code structure, and there are huge advantages to this; so big that
Read the rest
everybody is switching to it. Node makes it almost free. 1: https://github.com/rendrjs/rendr 2: https://github.com/wvl/highbrow
In Why I’m staying with Node
Sending the framework of a page to your users and expecting them to do all the heavy lifting and slow loading of constructing the page and fetching the data is still rather unfriendly if you can afford a server to construct it. If you love your users, give them HTML and let the Javascript enhance it. Projects like Facebook's React ( http://facebook.github.io/react/docs/top-level-api.html#reac... ) and Rendr (https://github.com/rendrjs/rendr/) let you use server rendering as well as the single page technologies on the client side.
In Googlebot's recent improvements might revolutionize web development
First famo.us employee here, want to give people some food for thought to consider as you gripe about things like zoom and and the scrollbar (rightfully so). Some of the more controversial points, especially those regarding accessibility and progressive enhancement, made below are my own. I think I'm the only person at the company that browses the web with JavaScript disabled, so I know how broken the original world wide web from when I first went online in 1994 is. I also remember using text-only browsers like lynx, and demonstrate it to co-workers on occasion. Lastly, I've been doing the web app development schtick for several years now and seen the good and the bad. With all that in mind, the push towards progressive enhancement starting in 2003 when AJAX was just starting to become popular has proven to be a false prophet. IMHO, no id
Read the rest
ea has done more to make the web less accessible while also holding it back in terms of interactivity. You simply cannot use the same abstraction for both documents and applications and expect decent results for either. What we should have done instead is allowed the two to diverge long ago and especially after 2007 when mobile computing took off and that change in screen size afforded us the opportunity to return to screens not all that dissimilar from those I remember using in '94. The first iPhone had a effective resolution of 320×480. You can effectively show as much on an iPhone as a 1994 computer monitor and have it be readable on both. In fact that's basis of the "Mobile First" design paradigm that frameworks like Zurb Foundation have pushed for. Designing content for a single-wide column that scrolls up and down, that you can jump backward and forward on via anchor hypertext references was a really smart abstraction for lots of content. The site http://www.motherfuckingwebsite.com/ illustrates this poignantly. The technology direction we should have taken should have made sure that search engines, the blind (or otherwise disabled or dexterally challenged) actually remained the first class citizens on the web instead of taking the back seat to print designers and interaction designers. It's easy to take the content designed for those constitutents and make it available via APIs that can then be consumed by people making rich web apps. We even had something like that, it's called RSS and it is glorious. RSS may have actually survived if it had not been for progressive enhancement which was crap but just good enough that people could get away with killing RSS off. Every technologist should make themselves familiar with the concept of path dependency (this Slate articles on the persistence of rockets as our primary way of putting objects in space is illustrative: http://www.slate.com/articles/technology/future_tense/2011/0... ). Had progressive enhancement not become the road taken, no one would have ever argued to kill off RSS in favor of a hack jobbed DOM implemented where maybe 1 in 100 developers actually understood how to actually implement accessibility. RSS and other means of programmatic content consumption would have become the prime way of being indexable by search engines. Everyone would have maintained content that way because it would have been in their self interest to do so. Not only that, progressive enhancement is just usable enough to not get sued under the ADA. Without progressive enhancement, businesses (read: at least every fortune 500 company and then some) would have poured gobs money to into making sure they have the digital equivalent of wheelchair ramps. Progressive enhancement gave everyone the opportunity to do the least amount of effort and still maintain a defensible position if challenged legally. The screen reading experience has been shit for like for ever and it's only gotten worse as designs have become more complex. Skipping over the level of abstraction that made content usable programmatically not only impoverished those that need it, but those who don't as well because we're deprived of richer, more flexible APIs. Having worked with webapps for a while, I think one of the most amazing improvements in the last 5 years has been the move towards displaying content on many more screens than just the desktop. This has forced us to go back to API solutions (usually REST, but sometimes RPC over websockets) that often ape what we originally tried to accomplish with RSS. This is the only sane way to provide content that needs to be displayed in different ways, from a Mobile First single long scroll page rendered by the server to a Famous/Ember/Angular/Backbone/React app that takes that server-rendered page and replaces it entirely with a rich interactive experience in the browser. We (at famo.us) don't yet have a solution for this future that treats everyone as a first class citizen, but we eventually plan to address this if the community doesn't tackle it first. We've been inspired by a few attempts at figuring out how to achieve this. Spike Brehm and crew over at AirBnB have been exploring this with Rendr, that works with Backbone.js, https://github.com/rendrjs/rendr , and August Lilleaas has worked on a solution for React, http://augustl.com/blog/2014/jdk8_react_rendering_on_server/ . We feel like there is potential for a generalized solution that doesn't need to be necessarily tied to how one framework works. If you look deep at Famo.us, we don't throw out the DOM wholesale, instead we use the DOM where it matters. In Famo.us, there is a concept of a Surface (which is similar to Layers in CoreAnimation). The Surface is basically a container for HTML Document Fragments, usually fragments that are very strongly structured semantically. The entire scene graph above each Surface node basically helps you programmatically abstract away all the bullshit that many today handle awkwardly with levels and levels of DIV hell controlled by JavaScript. This is not only the abstraction that makes building things in Famo.us easy and fast, but also provides a boundary where content gets lumped into semantic chunks that oftentimes should be consumable for use in a long-scroll, semantically rich, Mobile First design where navigation is hyperlinked anchor based instead of spatial navigation. When browsers were first designed, they made a decision to have a 1 to 1 relationship between the window object and the document object. While reasonable at the time (remember: small screens, low bandwidth, high latency), this proved unscalable to larger screens, greater bandwidth and lower latency. Take Twitter for example. Twitter.com is basically an application for displaying a tiny document called a Tweet. There hundreds of tweet documents shown at a time. The code for tweets is semantically rich. The code for the twitter app? That's DIV hell. This is what Famo.us helps with. Like Flash and Silverlight before it, it helps apps be apps, but unlike its predecessors, it allows documents to be documents. Keeping these two separate keeps abstractions from leaking into each other in the code you write. So while some things may be broken, and the way its broken may inspire ire, it's important to understand that it's not where the puck is that matters, but where it is going. The scrollview we've made is still inferior to the native scroller in a few ways, such as missing keyboard bindings, but are temporary shortcomings that we and the community are going to address in time. Eventually the feature and quality gap will narrow and the Famo.us scrollview(s) will reach parity with native scrollers. Furthermore, some of the abstractions in the Famo.us scroller are remarkable for their programmatic flexibility. When most people think of a scroller, they only think of three scenarios: vertical scrolling, horizontal scrolling and a pannable tiled area (like Google Maps or Open Street Maps). This is actually a pretty limited view of what's possible to explore if you abstract a scroller to its essence. A scroller at is essential is a mathematical set with a curser and that all scrolling does (whether by mouse or keyboard) is move the cursor position in that set. When you think about it that way, many more things you've seen are scrollers. For example, the Apple Time machine view is a scroller in the Z-direction. CoverFlow is another scroller that is horizontal, but where the affine matrix transform applied to a surface is based on the distance of a surface from the cursor and inverts on each side of the cursor. One team of beta testers used the scroll view to display a DNA double helix. It was basically two position linked vertical-scrollers, where the positioner function didn't just set the position on the Y-axis, but also manipulated the affine matrix to create the helix shape. While probably not the best approach, even Google's new interactive Rubik's cube doodle could probably be implemented as a series of Famo.us scrollers. Each scroller would contain 12 surfaces (doubly linked in a ring), with pagination occurring at every three surfaces. The pagination function instead of translating the surfaces along only one axis instead rotates all the surfaces 90 degrees around an axis. All surfaces would belong to two scrollers "perpendicular" to one another at any given time, being lifted from one to the other and back depending on which one was in motion. And since all this is based on the same scroller, which will eventually reach parity with native scrollers, it means that they get all the same features. Home goes to the top of a vertical scroller, the left of a western horizontal scroller, the beginning of the double helix or the begging of time in z-axis time machine like scroller. End does the opposite. These examples just begin to scratch the surface of what's possible when you expose primitives that map to mathematical concepts like a set and current index to developers. Last, but not least, we're going to look at all the feedback on the scrollview and try to address all the issues you all have encountered.
In Famo.us open to everyone
Try prerender [1]. We use it in production with backbone. This combined with keeping the most content not-client-rendered has alleviated most of our issues. In the long-term I'd love to see a web framework that uses react on the server-side, kind of like how rendr uses backbone on the server-side [2]. Seems to make sense because react works against a virtual DOM, so it would allow you to avoid the hacky ways of working with an actual DOM in node. 1: https://github.com/prerender/prerender 2: https://github.com/airbnb/rendr
In Why we left AngularJS
1) Search engine indexing is broken with client-side rendering There is no rule stating that an API must be consumed client-side, and obviously a great many can't be (depending on how auth is set up, etc). For projects where SEO matters but where an API will also be useful (or if you've just gotten into the habit of building user-facing bits around an API) you can render everything server-side, or first loads server-side and subsequent loads client-side. Airbnb's Rendr (https://github.com/airbnb/rendr) is neat for this, although there are a million other ways to do it. If you combine this approach with something like CouchDB, your API can basically just be your DB interface and you can focus on building the user-facing bits. EDIT: Sorry, everyone wrote the same thing at the same time :)
In Why We Chose API First Development at Our Startup
AirBnB's Rendr library is not a JavaScript, and only JavaScript solution. It is however a library that allows you to mostly unite your web rendering layers on the web client and application server. Look at the first diagram in the article and you'll notice that the author shows 3 environments: 1. Client (obviously the browser is JS) 2. Application Server (the server-side rendering environment = what he says can now change to JS thanks to Rendr) 3. API Server (use whatever you want here - JS, Java, Ruby, Python...) And, in production you will no doubt need a "static" server as well (for rendering privacy, tos, etc. pages). Plus all of the other production systems (like a queue, stream processing, and so on) that are not JavaScript environments. If you check out his example code you'll see that he actually sets up example 04 (https://github
Read the rest
.com/airbnb/rendr/blob/master/examples/04_entr...) with a subapp for a static page. Also, if you look at the react-moment branch in the isomorphic tutorial repo (https://github.com/spikebrehm/isomorphic-tutorial/blob/react...) you'll see that he's proxying a dummy API server to a route on the application server.
In Isomorphic JavaScript: The Future of Web Apps

Showing the 15 most recent of 25 sources. Enable JavaScript to search and browse every indexed mention.

MAKE YOURSELF AT HOME

A few shortcuts

/
Search the collection
?
Open this guide
Esc
Close dialogs and navigation

Your saved repositories and interests stay in this browser.