Github url


by Netflix

Netflix /falcor

A JavaScript library for efficient data fetching

9.7K Stars 457 Forks Last release: Not found Apache License 2.0 2.1K Commits 49 Releases

Available items

No Items, yet!

The developer of this repository has not created any items for sale yet. Need a bug fixed? Help with integration? A different license? Create a request here:


Build StatusCoverage Status


2.0 is the current stable Falcor release. 0.x and 1.x users are welcome to upgrade.


Issues we're tracking as part of our roadmap are tagged with theroadmaplabel. They are split intoenhancement,stability,performance,tooling,infrastructureanddocumentationcategories, with near, medium and longer term labels to convey a broader sense of the order in which we plan to approach them.

Getting Started

You can check out a working example server for Netflix-like application right now. Alternately, you can go through this barebones tutorial in which we use the Falcor Router to create a Virtual JSON resource. In this tutorial we will use Falcor's express middleware to serve the Virtual JSON resource on an application server at the URL


. We will also host a static web page on the same server which retrieves data from the Virtual JSON resource.

Creating a Virtual JSON Resource

In this example we will use the falcor Router to build a Virtual JSON resource on an app server and host it at


. The JSON resource will contain the following contents:

{ "greeting": "Hello World" }

Normally, Routers retrieve the data for their Virtual JSON resource from backend datastores or other web services on-demand. However, in this simple tutorial, the Router will simply return static data for a single key.

First we create a folder for our application server.

$ mkdir falcor-app-server $ cd falcor-app-server $ npm init

Now we install the falcor Router.

$ npm install falcor-router --save

Then install express and falcor-express. Support for restify is also available, as is support for hapi via a third-party implementation.

$ npm install express --save $ npm install falcor-express --save

Now we create an


file with the following contents:

// index.js const falcorExpress = require('falcor-express'); const Router = require('falcor-router'); const express = require('express'); const app = express(); app.use('/model.json', falcorExpress.dataSourceRoute(function (req, res) { // create a Virtual JSON resource with single key ('greeting') return new Router([{ // match a request for the key 'greeting' route: 'greeting', // respond with a PathValue with the value of 'Hello World.' get: () =\> ({path: ['greeting'], value: 'Hello World'}) } ]); })); // serve static files from current directory app.use(express.static(\_\_dirname + '/')); app.listen(3000);

Now we run the server, which will listen on port


for requests for



$ node index.js

Retrieving Data from the Virtual JSON resource

Now that we've built a simple virtual JSON document with a single read-only key


, we will create a test web page and retrieve this key from the server.

Create an


file with the following contents:

<!-- index.html --><!-- Do _not_ rely on this URL in production. Use only during development. --><script src=""></script><!-- For production use. --><!-- <script src="{VERSION}/falcor.browser.min.js"></script> --><script>
      var model = falcor({source: new falcor.HttpDataSource('/model.json') });

      // retrieve the "greeting" key from the root of the Virtual JSON resource
        then(function(response) {

Now visit


and you should see the message retrieved from the server:

Hello World

Steps to publish new version

  • Make pull request with feature/bug fix and tests
  • Merge pull request into master after code review and passing Travis CI checks
  • Run
    git checkout master
    to open
    branch locally
  • Run
    git pull
    to merge latest code, including built
    by Travis
  • Update CHANGELOG with features/bug fixes to be released in the new version
  • Run
    npm run prepare
    to build
  • Ensure the built files are not different from those built by Travis CI, hence creating no change to commit
  • Run
    npm version patch
    , etc) to create a new git commit and tag
  • Run
    git push origin master && git push --tags
    to push code and tags to github
  • Run
    npm publish
    to publish the latest version to NPM

Additional Resources

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.