1.0.0 is the current stable Falcor release. 0.x users are welcome to upgrade, with 1.0.0 representing the typical backwards compatibility guarantees of a major semver release.
Breaking changes from 0.x can be reviewed here.
A 2.x release candidate is also currently available in npm. This is a fast-follow release after 1.0.0 so that Netflix internal teams can incrementally adopt breaking changes in the 2.x release.
Breaking changes from 1.0.0 can be reviewed here.
You can check out a working example server for a Netflix-like application here 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 /model.json. We will also host a static web page on the same server which retrieves data from the 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 /model.json. 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 initNow we install the falcor Router.
npm install falcor-router --saveThen 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 --saveNow we create an index.js file with the following contents:
// index.js
var falcorExpress = require('falcor-express');
var Router = require('falcor-router');
var express = require('express');
var 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: function() {
return {path:["greeting"], value: "Hello World"};
}
}
]);
}));
// serve static files from current directory
app.use(express.static(__dirname + '/'));
var server = app.listen(3000);Now we run the server, which will listen on port 3000 for requests for /model.json.
node index.jsNow that we've built a simple virtual JSON document with a single read-only key "greeting", we will create a test web page and retrieve this key from the server.
Now create an index.html file with the following contents:
<!-- index.html -->
<html>
<head>
<!-- Do _not_ rely on this URL in production. Use only during development. -->
<script src="https://netflix.github.io/falcor/build/falcor.browser.js"></script>
<!-- For production use. -->
<!-- <script src="https://cdn.jsdelivr.net/falcor/{VERSION}/falcor.browser.min.js"></script> -->
<script>
var model = new falcor.Model({source: new falcor.HttpDataSource('/model.json') });
// retrieve the "greeting" key from the root of the Virtual JSON resource
model.
get("greeting").
then(function(response) {
document.write(response.json.greeting);
});
</script>
</head>
<body>
</body>
</html>Now visit http://localhost:3000/index.html and you should see the message retrieved from the server:
Hello World
For detailed high-level documentation explaining the Model, the Router, and JSON Graph check out the Falcor website.
For API documentation, go here
For a working example of a Router, check out the falcor-router-demo.
For questions and discussion, use Stack Overflow.
