Facebook представил новый открытый проект Flow, в рамках которого подготовлена система для статического анализа типов для языка JavaScript. Основной целью разработки является упрощение поиска ошибок в коде на языке JavaScript, без дополнительных трудозатрат на его аудит, а также предоставление средств для снижения уровня ошибок при разработке новых проектов. Проект написан на языке OCaml и распространяется под лицензией BSD.

В качестве метода выявления ошибок применяется автоматическое определение типов переменных на основании контекста, с дальнейшим отслеживанием их корректного использования. Например, если переменная участвует в арифметическом действии, то запись в неё строкового значения будет рассматриваться как потенциальная ошибка. Flow позволяет при проверке разделять динамический по своей задумке код, от кода, в котором используются неизменные типы.

Flow также обеспечивает продвинутый механизм выявления проблем со значениями null и массивами. Поддерживаются многие новые возможности, представленные в спецификации ECMAScript 6, такие как деструкторы, классы, расширенные объекты, опциональные параметры и такие расширения API, как Map, Set, Promise. При анализе JavaScript-модулей поддерживаются спецификации CommonJS / Node.js.

Кроме проверки корректности кода, Flow может использоваться для преобразования обычного Javascript в представлении с явным указанием типов, а также выполнение обратной конвертации. Например, из "function foo(x, y)" в "function foo(x: string, y: number): string" и наоборот. Типизированное представление синтаксически напоминает метод указания типов в языках AtScript и TypeScript. Управлять процессом проверки можно через специальные аннотации в комментариях к коду. В том числе можно осуществить проверку только определённых частей web-приложения.