facebook

    facebook/flow

    #209 this week

    Adds static typing to JavaScript to improve developer productivity and code quality.

    backend
    Rust
    MIT
    22.3K stars
    1.9K forks
    22.3K GitHub watchers
    Updated 7/7/2026
    View on GitHub

    Backblaze Generative Media Hackathon

    Build the next generation of AI media apps with Genblaze, stored on Backblaze B2. $10,000 in prizes.

    Enter the hackathon

    Loading star history...

    Use Cases & Benefits

    • Adds static typing to JavaScript to improve developer productivity and code quality.
    • Provides early error detection and type safety in JavaScript projects without requiring a full migration to TypeScript.
    • Use for enhancing code reliability and maintainability in large JavaScript codebases.
    • Use for integrating static type checking into existing JavaScript projects incrementally.
    • Use for building developer tools that require parsing and analyzing Flow-typed JavaScript syntax trees.

    About flow

    Flow

    CircleCI Follow @flowtype MIT License GitHub contributors GitHub top language Join Discord Chat

    Flow is a static typechecker for JavaScript. To find out more about Flow, check out flow.org.

    Contents

    Requirements

    Flow works with:

    • macOS (arm64)
    • Linux (x86_64 and arm64)
    • Windows (x86_64, Windows 10 recommended)

    There are binary distributions 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, and then the usage docs.

    Using Flow's parser from JavaScript

    Flow's parser is available as a compiled-to-JavaScript module published to npm, named 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.

      • Install the nightly Rust toolchain:

        rustup toolchain install nightly
        
    2. Build the Rust workspace:

      cd rust_port
      cargo +nightly build
      
    3. Run the Rust tests:

      cargo +nightly test
      
    4. Build an optimized flow binary:

      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.

      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:

      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.

    Running the tests

    See tests/README.md for detailed testing documentation.

    Join the Flow community

    License

    Flow is MIT-licensed (LICENSE). The website and documentation are licensed under the Creative Commons Attribution 4.0 license (website/LICENSE-DOCUMENTATION).

    Discover Repositories

    Search across tracked repositories by name or description