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.
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
- Easy upload/download progress and ETA tracking
- Supports request queueing and many dispatching strategies!
- Command / Builder pattern gives you amazing control over requests at any time
- Code-sharing architecture lets testers to hook into development setup and types
- Features flat side-effects helper hooks annotation and promotes readable code
- Provides structure recipes for large scale applications that significantly limit maintenance costs.
- Core features include offline and persistence support, giving you full control over your data
Features
Hyper Fetch | Query | SWR | Apollo | |
---|---|---|---|---|
Supported environments | Any | Any | React | Any |
Protocols | Any | Any | Any | GraphQL |
Caching Approach | Request Schema | Hierarchical Key > Value | Unique Key > Value | Normalized Schema |
Cache Key Strategy | Request Key | JSON | JSON | GraphQL Query |
Data Change Detection | Deep Comparison | Deep Comparison | Deep Comparison | Deep Comparison |
Data Memoization | Identity | Full Structural Sharing | Identity | Normalized Identity |
Queue Key Strategy | Request Key | N/A | N/A | N/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 | ✅ | 🔴 | 🔴 | 🔴 |