<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/migrating-from-apollo-tooling-to-graphql-codegen-at-yelp-hmm67xphw" -->

---
title: Migrating from Apollo Tooling to GraphQL Codegen at Yelp
description: Yelp&#x27;s Client Data team migrated their frontend React monorepo from the deprecated apollo-tooling to GraphQL Codegen, touching 500+ packages and thousands of...
canonical: https://daily.dev/posts/migrating-from-apollo-tooling-to-graphql-codegen-at-yelp-hmm67xphw
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: Migrating from Apollo Tooling to GraphQL Codegen at Yelp | daily.dev
og:description: Yelp&#x27;s Client Data team migrated their frontend React monorepo from the deprecated apollo-tooling to GraphQL Codegen, touching 500+ packages and thousands of...
og:url: https://daily.dev/posts/migrating-from-apollo-tooling-to-graphql-codegen-at-yelp-hmm67xphw
og:image: https://api.daily.dev/og/posts/HMm67XpHW.png
og:image:alt: Migrating from Apollo Tooling to GraphQL Codegen at Yelp
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Migrating from Apollo Tooling to GraphQL Codegen at Yelp

**[Yelp Engineering](https://daily.dev/sources/yelp)** · 13 min read · 0 upvotes · 1 comments

## Summary

Yelp's Client Data team migrated their frontend React monorepo from the deprecated apollo-tooling to GraphQL Codegen, touching 500+ packages and thousands of generated files without requiring any developer to change their own code. The team chose a transparent migration strategy — configuring GraphQL Codegen to produce output identical to apollo-tooling's (same file names, nested type names, inlined enums) rather than adopting the new tool's defaults. They initially forked and patched GraphQL Codegen plugins to match the required output format and fix a concurrency issue in large monorepos, then collaborated with the GraphQL Codegen maintainers to upstream those changes into the official v6.0.0 release. An incremental 'divide and conquer' approach — maintaining a shrinking list of packages still on the old codegen — allowed continuous progress and early feedback. The result is a cleaner dependency tree, simpler build tooling, and an officially supported migration path that now benefits the wider GraphQL community.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://engineeringblog.yelp.com/2026/07/migrating-to-graphql-codegen.html>

## Questions this post answers

### Why is apollo-tooling deprecated and what should I migrate to instead?

Apollo officially announced the end-of-life of its CLI service commands, including the client:codegen command, in April 2023, recommending migration to GraphQL Codegen. As an EOL tool, apollo-tooling stopped receiving fixes for known issues, making it risky to keep relying on for generating TypeScript types from GraphQL queries. GraphQL Codegen now has an officially supported apollo-tooling migration path with configuration options built specifically to ease the switch.

_Teams planning an apollo-tooling to GraphQL Codegen switch can follow migration writeups like this on daily.dev._

### How can I make GraphQL Codegen output match apollo-tooling's generated file names and nested type naming?

Configuring GraphQL Codegen requires patching the typescript-operations and near-operation-file preset plugins to name output files by operation name instead of component name, inline enum and input types from the schema instead of importing a separate globalTypes.ts, replace custom wrapper types like Maybe<T> with native T | null, and reconstruct apollo-tooling-style nested type names such as GetUser_user_account. These changes were eventually upstreamed into GraphQL Codegen version 6.0.0.

_Developers configuring GraphQL Codegen to mimic legacy output can compare approaches shared on daily.dev._

### How does GraphQL Codegen handle a shared fragment used across multiple packages in a large monorepo, and what problems can that cause?

When multiple packages depend on the same GraphQL fragment defined in another package, GraphQL Codegen historically could not distinguish between the consuming packages and generated output for each of them independently. Running codegen with concurrent processes across such a monorepo could cause up to three processes to generate types for the same shared package simultaneously, producing random, inexplicable artifacts in the output.

_Engineers debugging codegen concurrency issues in monorepos can find real-world fixes documented on daily.dev._

## Community discussion

Top comments from developers on daily.dev.

**@pdfopsdev** · 0 upvotes

> the concurrent-generation race on shared fragments is such an underrated monorepo footgun, hit basically the same thing with a codegen step running per-workspace across parallel CI shards and just got flaky garbage output. patch-package instead of a hard fork for the plugin fixes is the right call too, way less to maintain once you can drop it for v6.

## Similar posts on daily.dev

- [Migrating a Large Flow Monorepo to TypeScript](https://daily.dev/posts/migrating-a-large-flow-monorepo-to-typescript-nax4shetx) · Yelp Engineering · 3 upvotes · 1 comments
- [Migrating to Workspaces and Nx](https://daily.dev/posts/migrating-to-workspaces-and-nx-vjmaj8bgs) · Kent C. Dodds · 20 upvotes · 0 comments
- [Styling Linear for the future with StyleX](https://daily.dev/posts/styling-linear-for-the-future-with-stylex-qmtpzoc4t) · Reid Burke · 59 upvotes · 4 comments

---

Tags: [#general-programming](https://daily.dev/tags/general-programming), [#typescript](https://daily.dev/tags/typescript), [#graphql](https://daily.dev/tags/graphql)

[View this post on daily.dev](https://daily.dev/posts/migrating-from-apollo-tooling-to-graphql-codegen-at-yelp-hmm67xphw)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"Migrating from Apollo Tooling to GraphQL Codegen at Yelp","url":"https://daily.dev/posts/migrating-from-apollo-tooling-to-graphql-codegen-at-yelp-hmm67xphw","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/migrating-from-apollo-tooling-to-graphql-codegen-at-yelp-hmm67xphw"},"datePublished":"2026-07-17T00:16:47.371Z","dateModified":"2026-09-13T20:29:21.546Z","description":"Yelp's Client Data team migrated their frontend React monorepo from the deprecated apollo-tooling to GraphQL Codegen, touching 500+ packages and thousands of...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/3d49fa4856cb3a0a5f98a8c057a448ab?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/3d49fa4856cb3a0a5f98a8c057a448ab?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"Yelp Engineering","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"Yelp Engineering","logo":"https://media.daily.dev/image/upload/t_logo,f_auto/v1/logos/92002b3f0a104326937d9dbe0a0f66ee","url":"https://daily.dev/sources/yelp"},"commentCount":1,"discussionUrl":"https://daily.dev/posts/migrating-from-apollo-tooling-to-graphql-codegen-at-yelp-hmm67xphw","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":0},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":1}],"keywords":"general-programming,typescript,graphql","timeRequired":"PT13M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Yelp Engineering","item":"https://daily.dev/sources/yelp"},{"@type":"ListItem","position":3,"name":"Migrating from Apollo Tooling to GraphQL Codegen at Yelp"}]}
{"@context":"https://schema.org","@type":"WebPage","@id":"https://daily.dev/posts/migrating-from-apollo-tooling-to-graphql-codegen-at-yelp-hmm67xphw","comment":[{"@type":"Comment","text":"the concurrent-generation race on shared fragments is such an underrated monorepo footgun, hit basically the same thing with a codegen step running per-workspace across parallel CI shards and just got flaky garbage output. patch-package instead of a hard fork for the plugin fixes is the right call too, way less to maintain once you can drop it for v6.","datePublished":"2026-07-17T18:01:58.293Z","url":"https://daily.dev/posts/HMm67XpHW#c-jnzyJf4EH","author":{"@type":"Person","name":"PDFops","url":"https://daily.dev/pdfopsdev","image":"https://media.daily.dev/image/upload/s---8isRBKc--/f_auto/v1782922291/avatars/avatar_orjMeK8QKaaVZwGq7ScPz?_a=BAMAMicg0"}}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/migrating-from-apollo-tooling-to-graphql-codegen-at-yelp-hmm67xphw#faq","mainEntity":[{"@type":"Question","name":"Why is apollo-tooling deprecated and what should I migrate to instead?","acceptedAnswer":{"@type":"Answer","text":"Apollo officially announced the end-of-life of its CLI service commands, including the client:codegen command, in April 2023, recommending migration to GraphQL Codegen. As an EOL tool, apollo-tooling stopped receiving fixes for known issues, making it risky to keep relying on for generating TypeScript types from GraphQL queries. GraphQL Codegen now has an officially supported apollo-tooling migration path with configuration options built specifically to ease the switch. Teams planning an apollo-tooling to GraphQL Codegen switch can follow migration writeups like this on daily.dev."}},{"@type":"Question","name":"How can I make GraphQL Codegen output match apollo-tooling's generated file names and nested type naming?","acceptedAnswer":{"@type":"Answer","text":"Configuring GraphQL Codegen requires patching the typescript-operations and near-operation-file preset plugins to name output files by operation name instead of component name, inline enum and input types from the schema instead of importing a separate globalTypes.ts, replace custom wrapper types like Maybe<T> with native T | null, and reconstruct apollo-tooling-style nested type names such as GetUser_user_account. These changes were eventually upstreamed into GraphQL Codegen version 6.0.0. Developers configuring GraphQL Codegen to mimic legacy output can compare approaches shared on daily.dev."}},{"@type":"Question","name":"How does GraphQL Codegen handle a shared fragment used across multiple packages in a large monorepo, and what problems can that cause?","acceptedAnswer":{"@type":"Answer","text":"When multiple packages depend on the same GraphQL fragment defined in another package, GraphQL Codegen historically could not distinguish between the consuming packages and generated output for each of them independently. Running codegen with concurrent processes across such a monorepo could cause up to three processes to generate types for the same shared package simultaneously, producing random, inexplicable artifacts in the output. Engineers debugging codegen concurrency issues in monorepos can find real-world fixes documented on daily.dev."}}]}
```

