UPDATE: I've found the very useful comment under my post that I want to share with you as a complementary thing to the main content:
Regarding lack of examples, you can find the awesome-falcorjs repo userful, there are different examples of a Falcor's CRUD usage:
https://github.com/przeor/awesome-falcorjs ... Second thing, there is a book called "Mastering Full Stack React Development" which includes Falcor as well (good way to learn how to use it):
ORGINAL POST BELOW:
FalcorJS (https://www.facebook.com/groups/falcorjs/) is much more simpler to be efficient in comparison to Relay/GraphQL.
The learning curve for GraphQL+Relay is HUGE:
In my short summary: Go for Falcor. Use Falcor in your next project until YOU have a large budget and a lot of learning time for your team then use RELAY+GRAPHQL.
GraphQL+Relay has huge API that you must be efficient in. Falcor has small API and is very easy to grasp to any front-end developer who is familiar with JSON.
If you have an AGILE project with limited resources -> then go for FalcorJS!
MY SUBJECTIVE opinion: FalcorJS is 500%+ easier to be efficient in full-stack javascript.
I have also published some FalcorJS starter kits on my project (+more full-stack falcor's example projects): https://www.github.com/przeor
To be more in technical details:
1) When you are using Falcor, then you can use both on front-end and backend:
import falcor from 'falcor';
and then build your model based upon.
... you need also two libraries which are simple to use on backend:
a) falcor-express - you use it once (ex. app.use('/model.json', FalcorServer.dataSourceRoute(() => new NamesRouter()))). Source: https://github.com/przeor/falcor-netflix-shopping-cart-example/blob/master/server/index.js
b) falcor-router - there you define SIMPLE routes (ex. route: '_view.length'). Source:
https://github.com/przeor/falcor-netflix-shopping-cart-example/blob/master/server/router.js
Falcor is piece of cake in terms of learning curve.
You can also see documentation which is much simpler than FB's lib and check also the article "why you should care about falcorjs (netflix falcor)".
2) Relay/GraphQL is more likely like a huge enterprise tool.
For example, you have two different documentations that separately are talking about:
a) Relay: https://facebook.github.io/relay/docs/tutorial.html
- Containers
- Routes
- Root Container
- Ready State
- Mutations
- Network Layer
- Babel Relay Plugin
- GRAPHQL
- GraphQL Relay Specification
- Object Identification
- Connection
- Mutations
- Further Reading
API REFERENCE
Relay
- RelayContainer
- Relay.Route
- Relay.RootContainer
- Relay.QL
- Relay.Mutation
- Relay.PropTypes
- Relay.Store
INTERFACES
RelayNetworkLayer
- RelayMutationRequest
- RelayQueryRequest
b) GrapQL: https://facebook.github.io/graphql/
- 2Language
- 2.1Source Text
- 2.1.1Unicode
- 2.1.2White Space
- 2.1.3Line Terminators
- 2.1.4Comments
- 2.1.5Insignificant Commas
- 2.1.6Lexical Tokens
- 2.1.7Ignored Tokens
- 2.1.8Punctuators
- 2.1.9Names
- 2.2Query Document
- 2.2.1Operations
- 2.2.2Selection Sets
- 2.2.3Fields
- 2.2.4Arguments
- 2.2.5Field Alias
- 2.2.6Fragments
- 2.2.6.1Type Conditions
- 2.2.6.2Inline Fragments
- 2.2.7Input Values
- 2.2.7.1Int Value
- 2.2.7.2Float Value
- 2.2.7.3Boolean Value
- 2.2.7.4String Value
- 2.2.7.5Enum Value
- 2.2.7.6List Value
- 2.2.7.7Input Object Values
- 2.2.8Variables
- 2.2.8.1Variable use within Fragments
- 2.2.9Input Types
- 2.2.10Directives
- 2.2.10.1Fragment Directives
- 3Type System
- 3.1Types
- 3.1.1Scalars
- 3.1.1.1Built-in Scalars
- 3.1.1.1.1Int
- 3.1.1.1.2Float
- 3.1.1.1.3String
- 3.1.1.1.4Boolean
- 3.1.1.1.5ID
- 3.1.2Objects
- 3.1.2.1Object Field Arguments
- 3.1.2.2Object Field deprecation
- 3.1.2.3Object type validation
- 3.1.3Interfaces
- 3.1.3.1Interface type validation
- 3.1.4Unions
- 3.1.4.1Union type validation
- 3.1.5Enums
- 3.1.6Input Objects
- 3.1.7Lists
- 3.1.8Non-Null
- 3.2Directives
- 3.2.1@skip
- 3.2.2@include
- 3.3Starting types
- 4Introspection
- 4.1General Principles
- 4.1.1Naming conventions
- 4.1.2Documentation
- 4.1.3Deprecation
- 4.1.4Type Name Introspection
- 4.2Schema Introspection
- 4.2.1The "__Type" Type
- 4.2.2Type Kinds
- 4.2.2.1Scalar
- 4.2.2.2Object
- 4.2.2.3Union
- 4.2.2.4Interface
- 4.2.2.5Enum
- 4.2.2.6Input Object
- 4.2.2.7List
- 4.2.2.8Non-null
- 4.2.2.9Combining List and Non-Null
- 4.2.3The __Field Type
- 4.2.4The __InputValue Type
- 5Validation
- 5.1Operations
- 5.1.1Named Operation Definitions
- 5.1.1.1Operation Name Uniqueness
- 5.1.2Anonymous Operation Definitions
- 5.1.2.1Lone Anonymous Operation
- 5.2Fields
- 5.2.1Field Selections on Objects, Interfaces, and Unions Types
- 5.2.2Field Selection Merging
- 5.2.3Leaf Field Selections
- 5.3Arguments
- 5.3.1Argument Names
- 5.3.2Argument Uniqueness
- 5.3.3Argument Values Type Correctness
- 5.3.3.1Compatible Values
- 5.3.3.2Required Arguments
- 5.4Fragments
- 5.4.1Fragment Declarations
- 5.4.1.1Fragment Name Uniqueness
- 5.4.1.2Fragment Spread Type Existence
- 5.4.1.3Fragments On Composite Types
- 5.4.1.4Fragments Must Be Used
- 5.4.2Fragment Spreads
- 5.4.2.1Fragment spread target defined
- 5.4.2.2Fragment spreads must not form cycles
- 5.4.2.3Fragment spread is possible
- 5.4.2.3.1Object Spreads In Object Scope
- 5.4.2.3.2Abstract Spreads in Object Scope
- 5.4.2.3.3Object Spreads In Abstract Scope
- 5.4.2.3.4Abstract Spreads in Abstract Scope
- 5.5Values
- 5.5.1Input Object Field Uniqueness
- 5.6Directives
- 5.6.1Directives Are Defined
- 5.7Variables
- 5.7.1Variable Uniqueness
- 5.7.2Variable Default Values Are Correctly Typed
- 5.7.3Variables Are Input Types
- 5.7.4All Variable Uses Defined
- 5.7.5All Variables Used
- 5.7.6All Variable Usages are Allowed
- 6Execution
- 6.1Evaluating requests
- 6.2Coercing Variables
- 6.3Evaluating operations
- 6.4Evaluating selection sets
- 6.5Evaluating a grouped field set
- 6.5.1Field entries
- 6.5.2Normal evaluation
- 6.5.3Serial execution
- 6.5.4Error handling
- 6.5.5Nullability
- 7Response
- 7.1Serialization Format
- 7.1.1JSON Serialization
- 7.2Response Format
- 7.2.1Data
- 7.2.2Errors
- AAppendix: Notation Conventions
- A.1Context-Free Grammar
- A.2Lexical and Syntactical Grammar
- A.3Grammar Notation
- A.4Grammar Semantics
- A.5Algorithms
- BAppendix: Grammar Summary
- B.1Ignored Tokens
- B.2Lexical Tokens
- B.3Query Document
It's your choice:
Simple sweet and short documented Falcor JS VERSUS Huge-enterprise-grade tool with long and advanced documentation as GraphQL&Relay
As I said before, if you are a front-end dev who grasp idea of using JSON, then JSON graph implementation from Falcor's team is best way to do your full-stack dev project.