Skip to main content
Version: 3.x.x

Comparison

The biggest difference between Hyper Fetch and other libraries is the opinionated architecture and assumptions on which it is built. Hyper Fetch’s core features are written in TS without dependencies; because of this, it can work in many environments without a specific connection to a given framework.

Hyper Fetch is not just a wrapper; it offers full control over the flow and observation of data exchange. Our main goals were to introduce:

  • a data storage standard,
  • offer an embedded HTTP adapter,
  • reduce setup times,
  • solve major architectural difficulties.
info

Producing an accurate and unbiased comparison is quite a challenge. Libraries develop quickly, so if you notice that our data needs to be corrected, please let us know by opening an issue.


Why Hyper Fetch Is Unique​


Features​

βœ… - Documented support
🚧 - Work in progress
πŸ”΅ - Require additional Plugin/Coding
πŸ”΄ - Not supported / Not documented


Hyper FetchQuerySWRApollo
Supported environmentsAnyAnyReactAny
ProtocolsAnyAnyAnyGraphQL
Caching ApproachRequest SchemaHierarchical Key > ValueUnique Key > ValueNormalized Schema
Cache Key StrategyRequest KeyJSONJSONGraphQL Query
Data Change DetectionDeep ComparisonDeep ComparisonDeep ComparisonDeep Comparison
Data MemoizationNormalized IdentityFull Structural SharingIdentityNormalized Identity
Queue Key StrategyRequest KeyN/AN/AN/A
Devtoolsβœ…βœ…πŸ”΅βœ…
Server Connection Setup β„ΉοΈβœ…πŸ”΅πŸ”΅βœ…
Shared Request β„ΉοΈβœ…πŸ”΅πŸ”΅βœ…
Dependency tracking β„ΉοΈβœ…βœ…βœ…βœ…
Cache Persistenceβœ…βœ…βœ…βœ…
Requests Persistence β„ΉοΈβœ…πŸ”΄πŸ”΄πŸ”΄
Download ETA β„ΉοΈβœ… πŸ”΅πŸ”΅πŸ”΅
Uploading ETA β„ΉοΈβœ…πŸ”΅πŸ”΅πŸ”΅
Pooling β„ΉοΈβœ…βœ…βœ…βœ…
Dependent Queries β„ΉοΈβœ…βœ…βœ…βœ…
Paginated Queriesβœ…βœ…βœ…βœ…
Query Params Parsing β„ΉοΈβœ…πŸ”΅πŸ”΅πŸ”΅
Queueing β„ΉοΈβœ…πŸ”΄πŸ”΄πŸ”΄
Retries β„ΉοΈβœ…βœ…βœ…πŸ”΅
Default Adapter β„ΉοΈβœ…πŸ”΄πŸ”΄βœ…
Infinite Queries β„ΉοΈβœ…βœ…βœ…βœ…
SSR β„ΉοΈβœ…βœ…βœ…βœ…
Initial Data β„ΉοΈβœ…βœ…βœ…βœ…
Cache Hydration β„ΉοΈβœ… βœ… πŸ”΄βœ…
Garbage Collecting β„ΉοΈβœ…βœ…πŸ”΄πŸ”΄
Pre Request Intercepting β„ΉοΈβœ…πŸ”΅πŸ”΅βœ…
Post Request Intercepting β„ΉοΈβœ…πŸ”΅πŸ”΅βœ…
Prefetching β„ΉοΈβœ…βœ…πŸ”΅βœ…
Cancellation β„ΉοΈβœ…βœ…πŸ”΄πŸ”΄
Queue Cancellation β„ΉοΈβœ…πŸ”΄πŸ”΄πŸ”΄
Authentication β„ΉοΈβœ…πŸ”΅πŸ”΅βœ…
Stale While Revalidate β„ΉοΈβœ…βœ…βœ…βœ…
Refresh Dataβœ…βœ…βœ…βœ…
Offline Request Pause β„ΉοΈβœ…βœ…πŸ”΄πŸ”΄
Network Status Re-fetching β„ΉοΈβœ…βœ…βœ…βœ…
Window Focus Re-fetching β„ΉοΈβœ…βœ…βœ…πŸ”΄
Normalized Caching β„ΉοΈβœ…πŸ”΄πŸ”΄βœ…
Automatic Re-fetch After Mutation β„ΉοΈβœ…πŸ”΅πŸ”΅βœ…
Query Matching β„ΉοΈβœ…βœ…πŸ”΄πŸ”΄
Cache Matching β„ΉοΈβœ…βœ…βœ…βœ…
Query Lifecycle Events β„ΉοΈβœ…πŸ”΄πŸ”΄βœ…
Data Flow Standard β„ΉοΈβœ…πŸ”΄πŸ”΄βœ…
Request Start/Stop β„ΉοΈβœ…πŸ”΄πŸ”΄πŸ”΄
Request Queue Start/Stop/Pause β„ΉοΈβœ…πŸ”΄πŸ”΄πŸ”΄
Request Data Mapping β„ΉοΈβœ…πŸ”΅πŸ”΅N/A
Cache Invalidation β„ΉοΈβœ…βœ…βœ…βœ…
File Uploading β„ΉοΈβœ…πŸ”΅πŸ”΅βœ…
Global Response Side-Effects β„ΉοΈβœ…πŸ”΄πŸ”΄πŸ”΄
Scroll Recovery β„ΉοΈβœ…βœ…βœ…βœ…
Simple Request Execution β„ΉοΈβœ…πŸ”΄πŸ”΄πŸ”΄
Requests Manager β„ΉοΈβœ…πŸ”΄πŸ”΄πŸ”΄
Tabs Storages Synchronization β„ΉοΈπŸš§πŸš§πŸ”΄πŸ”΄
Tabs Dispatching Synchronization β„ΉοΈπŸš§πŸ”΄πŸ”΄πŸ”΄
Websocket β„ΉοΈβœ…πŸ”΄πŸ”΄πŸ”΄
Server Sent Events β„ΉοΈβœ…πŸ”΄πŸ”΄πŸ”΄

Typescript features​

Hyper FetchQuerySWRApollo
Response types β„ΉοΈβœ…βœ…βœ…βœ…
Request data types β„ΉοΈβœ…βœ…βœ…βœ…
Global error types β„ΉοΈβœ…πŸ”΄πŸ”΄πŸ”΄
Local error types β„ΉοΈβœ…πŸ”΄πŸ”΄πŸ”΄
Query params types β„ΉοΈβœ…πŸ”΄πŸ”΄βœ…
Params types β„ΉοΈβœ…πŸ”΄πŸ”΄βœ…
Request state tracking types β„ΉοΈβœ…πŸ”΄πŸ”΄βœ