- Yelp chose Flow in 2017. It began scoping a move of its million-plus-line codebase to TypeScript in early 2022, citing the ecosystem and Flow's refocus on Facebook.
- The case shows that choosing a developer tool is a bet on its owner's priorities, and that leaving falls on the user. Yelp does not say how long its move took.
- Leaders should ask which core tools depend on one company's goals, and whether a gradual exit path exists.
Choosing a developer tool is a bet on the priorities of the company that runs it. Those priorities can change. Yelp's engineering team has described what happens when they do.
What Flow's team told its users
Flow is a typed dialect of JavaScript. It adds checks that catch mistakes before code runs. Facebook (Meta) built it and still runs it.
In a post on Medium, the Flow team said the tool is developed almost entirely by a 10-person team inside Facebook. Its primary customers are Facebook engineers. The team pointed to its own scale as the reason: one internal project alone runs to tens of millions of lines of code.
The team was direct about what that means for outsiders. It said it lacks resources for features requested only by external developers. It also said response times to GitHub issues and pull requests were "regrettably long". It may close pull requests that do not fit its priorities.
The team also said Flow would add new language features, including syntax that goes beyond type annotations. It said some choices might make Flow "more intrusive" for small projects or projects that touch untyped code. Flow stays open source. But the post makes clear who it is built for.
How Yelp read the announcement
Yelp's web team picked Flow in early 2017 over TypeScript. According to Yelp's engineering blog, there was no clear frontrunner then. Flow had better React support, better performance and a respectable library of type definitions for NPM packages.
Yelp says the picture changed over a few years. TypeScript's community library of type definitions had thousands more packages. More packages shipped with TypeScript support built in. Yelp also says TypeScript proved more stable over time. Finding tools and documentation for Flow got harder.
Then came the Flow team's announcement, which Yelp dates to mid-2021. Yelp says that with this refocus on Facebook's internal needs, it was clear TypeScript was a better fit. Yelp began scoping its migration in early 2022.
So the announcement was one reason among several. Yelp presents it as the point where the choice became clear.
How you run two type systems at once
Yelp's codebase has more than a million lines of JavaScript. Yelp ruled out a single rewrite, saying even the best automated tools could not convert it all over a holiday break. It also ruled out freezing the main web repository for a manual conversion.
Its stated priority was trust in its type checking. Yelp avoided temporarily switching checks off or bulk-adding comments that tell the checker to ignore errors. It says code that loses coverage from its checker, tests or linter almost never gets it back.
So Yelp converted its monorepo one package at a time. A monorepo is one repository holding many packages. It used an open-source tool, flowts, for most of the Flow-to-TypeScript conversion, plus its own scripts for common edge cases.
Automation was not enough. Yelp says many errors needed manual fixes, mostly from small differences in how the two languages treat types. Even so, it says the tooling saved tens of thousands of engineer hours.
Unconverted Flow code had to keep type-checking against converted TypeScript packages. After converting a package, Yelp used a second open-source tool, flowgen. It turns TypeScript's generated type declarations, which describe a package's inputs and outputs, back into a form Flow can read. That let unconverted Flow code import converted packages with checking intact.
There was one catch. Yelp says no tool does the reverse, from Flow to TypeScript declarations. So the team had to start with the deepest internal dependencies and work up the tree. Yelp called this a thorn in its side for the whole migration. It says the approach was made possible by its earlier move into a Lerna monorepo.
The lesson for leaders
The lesson here is that the real price of a tool is not its licence, which for open source is zero. It is the cost of leaving, and it falls on you, not the owner.
Flow's team said plainly whom it serves. That was a reasonable choice for Meta. For Yelp, the answer was a package-by-package migration. Even that careful, gradual path needed hand-built tooling and heavy manual work.
One caveat applies. The Yelp account available to us is partial. Yelp says when it began scoping the move, but the account does not give the total duration, cost or finish date. This is one company's experience, not a measure of what other Flow users did.
Questions to put to your team
Ask which core tools are controlled by a single company, and whether that company's own needs match yours. Ask what its public statements say about who it serves.
Ask whether your code is split into packages that could be moved one at a time. Yelp's monorepo made that possible. Ask whether tools exist to move in both directions, because Yelp found only one.
Finally, ask who decides when to start. Yelp began scoping in early 2022, after the announcement, and chose a gradual path that avoided a code freeze. Decide what your own options would be before circumstances narrow them.
Produced by the WebPulse Newsroom with AI assistance from the original reporting credited below, and checked against that source by our editorial review. How we use AI.
Original reporting: Flow team at Facebook (Meta), via Medium.





