# netflix/falcor

**Attribution required: if you use, quote, or summarise this content, you must credit and link back to [awesome-repositories.com](https://awesome-repositories.com/repository/netflix-falcor).**

10,572 stars · 444 forks · JavaScript · Apache-2.0

## Links

- GitHub: https://github.com/Netflix/falcor
- Homepage: http://netflix.github.io/falcor
- awesome-repositories: https://awesome-repositories.com/repository/netflix-falcor.md

## Description

Falcor is a JavaScript library that models remote data as a single virtual JSON graph, providing a path-based query engine for efficient client-side data retrieval and updates. It represents multiple remote data sources as a unified document where entities are accessed via globally unique identity paths.

The system distinguishes itself by treating the remote data model as a virtual JSON resource, allowing the client to query specific paths without managing individual endpoints. It uses a reference-aware graph model to handle many-to-many relationships and prevents data duplication. Network efficiency is managed through time-windowed request batching and deduplication, merging multiple asynchronous requests into single calls.

The library includes a client-side data cache with support for functional reactive hooks, expiration control, and mutation-based invalidation. It further provides mechanisms for remote function invocation to execute transactional server-side operations and delivers data retrieval results through observable streams.

## Tags

### Data & Databases

- [Data Source Unification](https://awesome-repositories.com/f/data-databases/data-source-unification.md) — Represents multiple remote data sources as a single virtual JSON model for consistent access. ([source](https://netflix.github.io/falcor))
- [Graph Data Models](https://awesome-repositories.com/f/data-databases/graph-data-models.md) — Models remote data as a single unified virtual JSON graph for efficient path-based retrieval. ([source](http://netflix.github.io/falcor/documentation/jsongraph.html))
- [Batch Value Retrievals](https://awesome-repositories.com/f/data-databases/batch-value-retrievals.md) — Retrieves several values from the graph in a single operation and returns them as a combined object. ([source](https://netflix.github.io/falcor/doc/Model.html))
- [Batch Value Updates](https://awesome-repositories.com/f/data-databases/batch-value-updates.md) — Updates several values in a single request using path-value pairs or a JSON envelope. ([source](http://netflix.github.io/falcor/documentation/model.html))
- [Client-Side Cache Invalidations](https://awesome-repositories.com/f/data-databases/client-side-cache-invalidations.md) — Maintains a local cache and supports invalidating stale paths following mutation operations.
- [Graph Querying](https://awesome-repositories.com/f/data-databases/graph-querying.md) — Allows queries to traverse a virtual JSON graph using path arrays to automatically resolve references.
- [Path-Based Value Updates](https://awesome-repositories.com/f/data-databases/in-memory-caches/cache-replacement-algorithms/value-update-policies/path-based-value-updates.md) — Updates a specific value in the data source and reflects the change in the local cache. ([source](http://netflix.github.io/falcor/documentation/model.html))
- [Path-Based Value Retrieval](https://awesome-repositories.com/f/data-databases/key-value-stores/cache-key-management/cache-value-retrievals/path-based-value-retrieval.md) — Fetches a specific value from the data source or local cache using a provided path. ([source](http://netflix.github.io/falcor/documentation/model.html))
- [Reference-Aware Caching](https://awesome-repositories.com/f/data-databases/local-first-storage/local-caching-layers/reference-aware-caching.md) — Stores graph fragments in a local cache with path-based invalidation and timestamp-based race condition prevention.
- [Graph Reference Management](https://awesome-repositories.com/f/data-databases/many-to-many-associations/graph-reference-management.md) — Implements a reference-aware graph model to handle many-to-many relationships and prevent data duplication. ([source](http://netflix.github.io/falcor/documentation/model.html))
- [Path-Based Data Access](https://awesome-repositories.com/f/data-databases/path-based-data-access.md) — Retrieves specific data values using path syntax to read, update, or trigger actions. ([source](https://netflix.github.io/falcor))
- [Unified Virtual JSON Graphs](https://awesome-repositories.com/f/data-databases/virtual-graph-projections/unified-virtual-json-graphs.md) — Represents remote data as a single unified document where entities are accessed via globally unique identity paths.
- [Virtual JSON Graph Clients](https://awesome-repositories.com/f/data-databases/virtual-json-graph-clients.md) — Models remote data as a single virtual JSON graph for efficient path-based querying.
- [Virtual Graph Querying](https://awesome-repositories.com/f/data-databases/virtual-query-abstractions/virtual-graph-querying.md) — Queries a unified virtual JSON document through a single endpoint to retrieve data from various backend services. ([source](https://cdn.jsdelivr.net/gh/netflix/falcor@master/README.md))
- [Collapsing Batch Requests](https://awesome-repositories.com/f/data-databases/batch-processing/batch-matrix-multiplication-utilities/query-batching/api-call-batching/collapsing-batch-requests.md) — Merges multiple concurrent requests within a time window into a single network call to eliminate redundancy.
- [Asynchronous Write Operations](https://awesome-repositories.com/f/data-databases/concurrent-write-optimizations/asynchronous-write-operations.md) — Updates values in a graph object at specified paths and returns the modified subset asynchronously. ([source](http://netflix.github.io/falcor/documentation/datasources.html))
- [Graph-to-JSON Converters](https://awesome-repositories.com/f/data-databases/custom-type-converters/json-converters/graph-to-json-converters.md) — Converts internal graph formats into standard JSON objects after retrieving multiple values. ([source](http://netflix.github.io/falcor/documentation/model.html))
- [Cache Priming](https://awesome-repositories.com/f/data-databases/data-caching/cross-request-data-caches/cache-priming.md) — Supports pre-populating the local cache by fetching specified paths from the remote source. ([source](https://netflix.github.io/falcor/build/falcor.browser.js))
- [Graph Data Retrieval](https://awesome-repositories.com/f/data-databases/data-retrieval-pipelines/http-content-retrievers/graph-data-retrieval.md) — Fetches JSON graph data from remote servers using HTTP or HTTPS protocols. ([source](http://netflix.github.io/falcor/documentation/datasources.html))
- [Change Notifications](https://awesome-repositories.com/f/data-databases/key-value-pair-managers/prefix-based-scanning/change-notifications.md) — Triggers callback functions whenever data in the local cache is modified. ([source](https://netflix.github.io/falcor/doc/Model.html))
- [Cache Expiration Management](https://awesome-repositories.com/f/data-databases/metadata-caching/cache-expiration-management.md) — Uses metadata to manage the time-to-live and expiration of cached graph fragments. ([source](http://netflix.github.io/falcor/documentation/model.html))
- [Identity-Based Dereferencing](https://awesome-repositories.com/f/data-databases/ordered-data-structures/ordered-collection-literals/object-collection-processors/object-transformation/object-graph-navigators/identity-based-dereferencing.md) — Creates a new model bound to a specific object by its identity to target entities correctly. ([source](http://netflix.github.io/falcor/documentation/model.html))
- [Functional Reactive Cache Hooks](https://awesome-repositories.com/f/data-databases/redis-clients/caching-implementations/custom-cache-providers/functional-reactive-cache-hooks.md) — Provides custom callback functions to react to cache changes and transform incoming errors.
- [Virtual Graph Data Loading](https://awesome-repositories.com/f/data-databases/virtual-graph-data-loading.md) — Fetches values for specific paths from a cache or remote source and loads them into an object. ([source](https://netflix.github.io/falcor/doc/Model.html))
- [Partial Graph Queries](https://awesome-repositories.com/f/data-databases/virtual-table-querying/external-table-querying/direct-path-querying/partial-graph-queries.md) — Queries specific paths from a resource to minimize data transfer and reduce network overhead. ([source](https://cdn.jsdelivr.net/gh/netflix/falcor@master/README.md))

### Web Development

- [Data Fetching Libraries](https://awesome-repositories.com/f/web-development/data-fetching-libraries.md) — Functions as a data fetching library that models backend data as a unified virtual JSON graph.
- [Client-Side Caching](https://awesome-repositories.com/f/web-development/state-synchronization/client-side-caching.md) — Implements a local cache to mirror remote graph state and minimize redundant network requests.
- [Virtual Graph API Interfaces](https://awesome-repositories.com/f/web-development/virtual-graph-api-interfaces.md) — Provides access to remote data using standard JavaScript operations like get, set, and call on a virtual graph. ([source](https://netflix.github.io/falcor))
- [Virtual JSON Graph Interfaces](https://awesome-repositories.com/f/web-development/virtual-json-graph-interfaces.md) — Exposes a unified data model through a standard interface for external service consumption. ([source](https://netflix.github.io/falcor/doc/Model.html))
- [Request Deduplication](https://awesome-repositories.com/f/web-development/request-deduplication.md) — Deduplicates requests during virtual graph traversal to reduce redundant data fetches. ([source](https://netflix.github.io/falcor))
- [Request Routing](https://awesome-repositories.com/f/web-development/request-routing.md) — Maps incoming graph operations to server handlers that return data from a virtual JSON object. ([source](http://netflix.github.io/falcor/documentation/datasources.html))
- [Virtual Resource Hosting](https://awesome-repositories.com/f/web-development/virtual-resource-hosting.md) — Hosts a virtual JSON document on a server that resolves data requests from multiple sources on demand. ([source](https://cdn.jsdelivr.net/gh/netflix/falcor@master/README.md))

### Development Tools & Productivity

- [Mutation-Based Cache Invalidation](https://awesome-repositories.com/f/development-tools-productivity/build-artifact-caching/mutation-based-cache-invalidation.md) — Removes stale cached values by using a list of changed paths returned after a server-side function call. ([source](http://netflix.github.io/falcor/documentation/jsongraph.html))

### Networking & Communication

- [Unified Data Models](https://awesome-repositories.com/f/networking-communication/api-integration-frameworks/unified-data-models.md) — Represents multiple remote data sources as a single unified JSON graph for consistent access. ([source](https://netflix.github.io/falcor))
- [Pluggable Transport Backends](https://awesome-repositories.com/f/networking-communication/network-transport-protocols/pluggable-transport-backends.md) — Implements a standard interface for data sources to allow any backend transport.

### Software Engineering & Architecture

- [Path-Based Query Engines](https://awesome-repositories.com/f/software-engineering-architecture/path-based-query-engines.md) — Provides a query engine for retrieving and updating specific values in a distributed model using unique identity paths.
- [Remote Function Invocation](https://awesome-repositories.com/f/software-engineering-architecture/remote-function-invocation.md) — Enables the invocation of transactional server-side operations to mutate graph data.
- [Virtual Graph Resolution](https://awesome-repositories.com/f/software-engineering-architecture/selector-based-path-resolvers/virtual-graph-resolution.md) — Traverses a virtual graph by following path arrays and automatically resolving references to locate data.
- [Reference-Aware Path Mutations](https://awesome-repositories.com/f/software-engineering-architecture/transformation-pipelines/execution-pipeline-transformation/path-aware-transformers/reference-aware-path-mutations.md) — Sets new values at specified paths in a graph model by automatically resolving references. ([source](http://netflix.github.io/falcor/documentation/jsongraph.html))
- [Virtual JSON Modeling](https://awesome-repositories.com/f/software-engineering-architecture/virtual-json-modeling.md) — Treats remote data as a virtual JSON resource to fetch specific paths without managing individual endpoints. ([source](https://cdn.jsdelivr.net/gh/netflix/falcor@master/README.md))
- [Data Version Tracking](https://awesome-repositories.com/f/software-engineering-architecture/data-version-tracking.md) — Provides incrementing version numbers to track changes at specific paths within the virtual graph. ([source](https://netflix.github.io/falcor/doc/Model.html))
- [In-Stream Error Values](https://awesome-repositories.com/f/software-engineering-architecture/error-reporting/in-stream-error-values.md) — Reports errors as regular data values in the response stream instead of using separate error callbacks. ([source](https://netflix.github.io/falcor/doc/Model.html))
- [Observable Streams](https://awesome-repositories.com/f/software-engineering-architecture/flow-modularization/modular-flow-composition/observable-streams.md) — Wraps data retrieval and mutation results in observable streams that treat errors as regular data values.
- [Timestamp-Based State Synchronization](https://awesome-repositories.com/f/software-engineering-architecture/race-condition-prevention/timestamp-based-state-synchronization.md) — Uses timestamps on values to ensure old network data does not overwrite newer local state. ([source](http://netflix.github.io/falcor/documentation/model.html))
- [Nested Key Resolution](https://awesome-repositories.com/f/software-engineering-architecture/recursive-configuration-resolution/nested-key-resolution.md) — Accesses deeply nested values within a virtual JSON document using path-based key lookups. ([source](https://cdn.jsdelivr.net/gh/netflix/falcor@master/README.md))
- [Request Batching](https://awesome-repositories.com/f/software-engineering-architecture/request-batching.md) — Collects multiple asynchronous data requests within a short interval and merges them into a single network call.
- [Relative Graph Navigation](https://awesome-repositories.com/f/software-engineering-architecture/runtime-path-resolvers/path-normalizers/path-relation-calculations/relative-path-indexing/relative-graph-navigation.md) — Creates model instances bound to specific locations to make subsequent data paths relative. ([source](https://netflix.github.io/falcor/doc/Model.html))
- [Scoped Model Binding](https://awesome-repositories.com/f/software-engineering-architecture/scoped-model-binding.md) — Creates scoped model instances bound to specific graph locations to allow relative path access.
