Skip to content
Latchkey

Apollo vs urql: Which GraphQL Client?

Apollo Client is a feature-rich GraphQL client with a powerful normalized cache; urql is a lighter, composable, exchange-based client.

Apollo Client offers a sophisticated normalized cache, local state, subscriptions, and a large ecosystem, making it the default for complex GraphQL apps but with a larger bundle and more configuration. urql is smaller and built around composable exchanges, with a simpler default cache (document caching) and optional graphcache for normalization. Apollo wins on cache power and ecosystem; urql wins on size, simplicity, and composability.

Apollourql
CachingNormalized (powerful)Document (graphcache optional)
Bundle sizeLargerSmaller
ExtensibilityPlugins, linksComposable exchanges
EcosystemLargeSmaller, growing
Best forComplex GraphQL appsLean, composable clients

Use case and caching

Apollo suits large GraphQL apps needing a powerful normalized cache, local state, and a broad ecosystem. urql suits teams wanting a lighter client, composable exchanges, and simpler defaults, adding normalized caching only when needed. The split is feature depth vs bundle size and simplicity.

Testing and CI

Both offer mocking utilities for GraphQL operations in tests. Either runs on managed runners, where faster runners shorten GraphQL integration test suites.

The verdict

Need a powerful normalized cache, local state, and a large ecosystem: Apollo Client. Want a lean, composable client with simpler defaults: urql. Apollo wins on cache depth; urql wins on size and composability.

Related guides

Run this faster and cheaper on Latchkey managed runners. Start free →