Flow: a static type checker for JavaScript

Flow is a new static type checker for JavaScript we’ve built at Facebook. Flow adds static typing to JavaScript to improve developer productivity and code quality. In particular, static typing offers benefits like early error checking to avoid certain kinds of runtime failures, and code intelligence to aid code maintenance, navigation, transformation, and optimization. We’ve designed Flow so developers can reap its benefits without losing the “feel” of coding in JavaScript. Flow adds minimal compile-time overhead, as it does all its work proactively in the background. And Flow does not force you to change how you code — it performs sophisticated program analysis to work with the idioms you already know and love. Flow is still in its early days, but we’re already using it for JavaScript development at Facebook. Flow is an open-source project; please visit https://github.com/facebook/flow to contribute.

I created Flow, a type checker for JavaScript based on flow analysis whose distinguishing characteristics include mostly-automatic type checking for several common JavaScript idioms via advanced type inference, and near-instantaneous response times via aggressive modularization and parallelization. My current work involves leading the development of Flow at Facebook.

I briefly served as a member of ECMA TC39, the de-facto JavaScript design committee. During that time, I explored the design of features such as shared-memory concurrency control, and the implementation of advanced compilation techniques such as profile-guided type inference, in the context of JavaScript.

While at Adobe, I led the design of ActionScript 4, a significant re-implementation of the source and bytecode languages underlying Flash to target high-performance gaming. I drove research on future versions of ActionScript, including features such as generics and transactions.