Multiple Data Sources
Your application may need to interact with data from a variety of sources: a REST server, a WebSocket stream, an IndexedDB backup, an in-memory source, etc.
Orbit can coordinate data flows across any number of sources through a standard set of interfaces using normalized data structures.
Uniform Data Access
Because Orbit's sources all understand the same expressions for querying and mutating data, you can access data in the same way regardless of its origin.
Orbit also provides an extensible set of serializers to "normalize" external data as well as validators to ensure its correctness.
Deterministic Change Tracking
Data correctness is vital to user trust, so you need a deterministic approach to manage it.
Orbit uses a Git-like approach to track changes across data sources. Changes are expressed as "transforms", which are similar to Git commits. Logs provide a per-source history. Like Git repos, sources can be diffed, forked, merged, and reset.
Optimistic / Pessimistic Requests
Not all data can be treated uniformly. Some data is transient, while other data can persist for the life of your app. Some changes should be made pessimistically and be confirmed by a remote server. Other changes can be made optimistically, cached locally, and pushed eventually.
Orbit provides coordination strategies which can be customized to the needs of your application.
In an increasingly mobile world, it's ideal to keep applications available even when the Internet is not.
Orbit provides the tools needed to build robust offline experiences. Backup your application's state, including data caches, logs, and queues, to browser storage. Query and change local data when offline, while queueing changes for synchronization when online again.
Orbit can be run in modern browsers as well as in the Node.js runtime.
Orbit is written in TypeScript. Its libraries are distributed on npm through the @orbit organization in both CJS and ESM formats.