<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/migrating-a-large-flow-monorepo-to-typescript-nax4shetx" -->

---
title: Migrating a Large Flow Monorepo to TypeScript | daily.dev
description: Yelp's Webcore team spent three and a half years migrating over 1.4 million lines of code from Flow to TypeScript across a large Lerna monorepo. The migration...
canonical: https://daily.dev/posts/migrating-a-large-flow-monorepo-to-typescript-nax4shetx
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: Migrating a Large Flow Monorepo to TypeScript | daily.dev
og:description: Yelp's Webcore team spent three and a half years migrating over 1.4 million lines of code from Flow to TypeScript across a large Lerna monorepo. The migration...
og:url: https://daily.dev/posts/migrating-a-large-flow-monorepo-to-typescript-nax4shetx
og:image: https://api.daily.dev/og/posts/nAx4shETx.png
og:image:alt: Migrating a Large Flow Monorepo to TypeScript
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 a Large Flow Monorepo to TypeScript

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

## Summary

Yelp's Webcore team spent three and a half years migrating over 1.4 million lines of code from Flow to TypeScript across a large Lerna monorepo. The migration preserved type safety throughout by converting one package at a time, using open-source tools like flowts and Stripe's flow-to-typescript-codemod, and generating Flow-compatible type headers from TypeScript declarations via flowgen to maintain interop. Extensive dogfooding, documentation, and tooling automation preceded the general rollout in May 2023. A dependency-graph scoring system helped prioritize high-impact packages when momentum slowed. The migration concluded in February 2026 with 96.44% type coverage (up from 83.15% with Flow), roughly 6,000 suppression directives, and 82% of engineers reporting productivity gains.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://engineeringblog.yelp.com/2026/08/migrating-a-large-flow-monorepo-to-typescript.html>

## Questions this post answers

### Why did Yelp migrate its JavaScript codebase from Flow to TypeScript?

TypeScript's ecosystem grew stronger than Flow's over time: DefinitelyTyped had thousands more typed packages than flow-typed, more npm packages shipped with built-in TypeScript headers, and TypeScript proved more stable. Facebook's Flow team also announced in mid-2021 it was refocusing on internal needs rather than the open-source community, making TypeScript the clearer long-term choice.

_daily.dev surfaces real migration writeups for teams weighing whether to move off Flow onto TypeScript._

### What tools can convert a Flow codebase to TypeScript automatically?

Two open-source tools handled the bulk of Yelp's Flow-to-TypeScript conversion: flowts for initial package conversion, later replaced by Stripe's flow-to-typescript-codemod which reduced manual cleanup work significantly. flowgen was used to convert generated TypeScript .d.ts files back into Flow-compatible headers, letting converted and unconverted packages interoperate without losing type safety.

_developers planning a Flow-to-TypeScript migration can track tooling comparisons like this on daily.dev._

### How much manual work is involved in migrating a large monorepo from Flow to TypeScript?

Migrating 1.4 million lines of code took Yelp three years and seven months even with automated tooling, because codemods could not reliably fix all errors and manual intervention was almost always required per package. The final codebase ended up with about 6,000 @ts-expect-error directives, roughly 2,000 of which came from auto-suppressing errors on the last handful of packages to finish the timeline.

_daily.dev helps engineers scoping a large-scale type-system migration learn from others' real timelines and trade-offs._

## Community discussion

Top comments from developers on daily.dev.

**@pdfopsdev** · 0 upvotes

> 3.5 years for 1.4M lines tracks. we've seen flow->ts migrations stall for years when teams try to keep both type checkers green at once instead of doing lossy any-casts and backfilling later. curious if they hand rewrote the trickier generics or leaned on a codemod.

## Similar posts on daily.dev

- [Migrating from Apollo Tooling to GraphQL Codegen at Yelp](https://daily.dev/posts/migrating-from-apollo-tooling-to-graphql-codegen-at-yelp-hmm67xphw) · Yelp Engineering · 0 upvotes · 1 comments
- [Lessons from Upgrading a Large TypeScript App to Zod 4](https://daily.dev/posts/lessons-from-upgrading-a-large-typescript-app-to-zod-4-pjirn6kxz) · Viget · 7 upvotes · 0 comments
- [I Refactored 6,000 Lines of React Code. Then Everything Broke Again.](https://daily.dev/posts/i-refactored-6-000-lines-of-react-code-then-everything-broke-again--b2mztvn9i) · Code Like A Girl · 54 upvotes · 5 comments
- [Migrating ts-loader to TypeScript 7.1 with AI](https://daily.dev/posts/migrating-ts-loader-to-typescript-7-1-with-ai-nylu3j8a3) · John Reilly · 39 upvotes · 6 comments
- [Module Federation 2.0 Reaches Stable Release with Wider Support Outside of Webpack](https://daily.dev/posts/module-federation-2-0-reaches-stable-release-with-wider-support-outside-of-webpack-dwxostajk) · InfoQ · 0 upvotes · 0 comments

---

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

[View this post on daily.dev](https://daily.dev/posts/migrating-a-large-flow-monorepo-to-typescript-nax4shetx)

```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 a Large Flow Monorepo to TypeScript","url":"https://daily.dev/posts/migrating-a-large-flow-monorepo-to-typescript-nax4shetx","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/migrating-a-large-flow-monorepo-to-typescript-nax4shetx"},"datePublished":"2026-08-04T18:07:49.926Z","dateModified":"2026-09-14T08:35:10.222Z","description":"Yelp's Webcore team spent three and a half years migrating over 1.4 million lines of code from Flow to TypeScript across a large Lerna monorepo. The migration...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/160b970a5930952567b7b70ce6a026b5?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/160b970a5930952567b7b70ce6a026b5?_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-a-large-flow-monorepo-to-typescript-nax4shetx","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":3},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":1}],"keywords":"general-programming,typescript","timeRequired":"PT12M"}
{"@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 a Large Flow Monorepo to TypeScript"}]}
{"@context":"https://schema.org","@type":"WebPage","@id":"https://daily.dev/posts/migrating-a-large-flow-monorepo-to-typescript-nax4shetx","comment":[{"@type":"Comment","text":"3.5 years for 1.4M lines tracks. we’ve seen flow-&gt;ts migrations stall for years when teams try to keep both type checkers green at once instead of doing lossy any-casts and backfilling later. curious if they hand rewrote the trickier generics or leaned on a codemod.","datePublished":"2026-08-05T18:03:54.416Z","url":"https://daily.dev/posts/nAx4shETx#c-waxxQKdTu","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-a-large-flow-monorepo-to-typescript-nax4shetx#faq","mainEntity":[{"@type":"Question","name":"Why did Yelp migrate its JavaScript codebase from Flow to TypeScript?","acceptedAnswer":{"@type":"Answer","text":"TypeScript's ecosystem grew stronger than Flow's over time: DefinitelyTyped had thousands more typed packages than flow-typed, more npm packages shipped with built-in TypeScript headers, and TypeScript proved more stable. Facebook's Flow team also announced in mid-2021 it was refocusing on internal needs rather than the open-source community, making TypeScript the clearer long-term choice. daily.dev surfaces real migration writeups for teams weighing whether to move off Flow onto TypeScript."}},{"@type":"Question","name":"What tools can convert a Flow codebase to TypeScript automatically?","acceptedAnswer":{"@type":"Answer","text":"Two open-source tools handled the bulk of Yelp's Flow-to-TypeScript conversion: flowts for initial package conversion, later replaced by Stripe's flow-to-typescript-codemod which reduced manual cleanup work significantly. flowgen was used to convert generated TypeScript .d.ts files back into Flow-compatible headers, letting converted and unconverted packages interoperate without losing type safety. developers planning a Flow-to-TypeScript migration can track tooling comparisons like this on daily.dev."}},{"@type":"Question","name":"How much manual work is involved in migrating a large monorepo from Flow to TypeScript?","acceptedAnswer":{"@type":"Answer","text":"Migrating 1.4 million lines of code took Yelp three years and seven months even with automated tooling, because codemods could not reliably fix all errors and manual intervention was almost always required per package. The final codebase ended up with about 6,000 @ts-expect-error directives, roughly 2,000 of which came from auto-suppressing errors on the last handful of packages to finish the timeline. daily.dev helps engineers scoping a large-scale type-system migration learn from others' real timelines and trade-offs."}}]}
```

