Adds static typing to JavaScript to improve developer productivity and code quality.
# Flow
Flow is a static typechecker for JavaScript. To find out more about Flow, check out [flow.org](https://flow.org/).
## Contents
- [Requirements](#requirements)
- [Using Flow](#using-flow)
- [Using Flow's parser from JavaScript](#using-flows-parser-from-javascript)
- [Building Flow from source](#building-flow-from-source)
- [Join the Flow community](#join-the-flow-community)
- [License](#license)
## Requirements
Flow works with:
* macOS (arm64)
* Linux (x86_64 and arm64)
* Windows (x86_64, Windows 10 recommended)
There are [binary distributions](https://github.com/facebook/flow/releases) for each of these platforms and you can also build it from source on any of them as well.
## Using Flow
Check out the [installation instructions](https://flow.org/en/docs/getting-started/#toc-installation), and then [the usage docs](https://flow.org/en/docs/getting-started/#toc-usage).
## Using Flow's parser from JavaScript
Flow's parser is available as a compiled-to-JavaScript module published to npm, named [flow-parser](https://www.npmjs.com/package/flow-parser). **Most end users of Flow
will not need to use this parser directly**, but JavaScript packages which make use of parsing
Flow-typed JavaScript can use this to generate Flow's syntax tree with annotated types attached.
## Building Flow from source
Flow is written in Rust. GitHub CI builds Flow from the `rust_port` workspace with nightly Rust.
1. Install system dependencies:
- Install [Rust via rustup](https://rustup.rs/).
- Install the nightly Rust toolchain:
```sh
rustup toolchain install nightly
```
2. Build the Rust workspace:
```sh
cd rust_port
cargo +nightly build
```
3. Run the Rust tests:
```sh
cargo +nightly test
```
4. Build an optimized `flow` binary:
```sh
cargo +nightly build --release --bin flow_cli
```
5. Build `flow.js` (optional):
The `flow.js` build also uses the Rust port. Install Emscripten, Node, Yarn, and a Rust nightly toolchain with the `wasm32-unknown-emscripten` target and `rust-src` component first. GitHub CI uses Emscripten 3.1.44 and nightly Rust for this build.
```sh
rustup toolchain install nightly-2026-04-14 --target wasm32-unknown-emscripten --component rust-src
RUSTUP_TOOLCHAIN=nightly-2026-04-14 make js FLOW_JS_IMPL=rust-wasm
```
This produces `bin/flow.js`.
To build a faster, larger local development version instead, run:
```sh
RUSTUP_TOOLCHAIN=nightly-2026-04-14 make js FLOW_JS_IMPL=rust-wasm FLOW_DOT_JS_WASM_PROFILE=dev
```
The Flow parser can also be compiled to JavaScript. [Read how here](src/parser/README.md).
## Running the tests
See [tests/README.md](tests/README.md) for detailed testing documentation.
## Join the Flow community
* Website: [https://flow.org](https://flow.org/)
* Discord: https://discord.gg/8ezwRUK
* irc: #flowtype on Freenode
* Twitter: follow [@flowtype](https://twitter.com/flowtype) and [#flowtype](https://twitter.com/hashtag/flowtype) to keep up with the latest Flow news.
* Stack Overflow: Ask a question with the [flowtype tag](https://stackoverflow.com/questions/tagged/flowtype)
## License
Flow is MIT-licensed ([LICENSE](https://github.com/facebook/flow/blob/main/LICENSE)). The [website](https://flow.org/) and [documentation](https://flow.org/en/docs/) are licensed under the Creative Commons Attribution 4.0 license ([website/LICENSE-DOCUMENTATION](https://github.com/facebook/flow/blob/main/website/LICENSE-DOCUMENTATION)).