Flow is a static type checker for JavaScript that helps identify issues and bugs in code. It annotates variables, functions, and components with types to make code faster, smarter, and more scalable. Flow checks code at compile time for type errors rather than at runtime. It supports many type features like literal types, null/void types, maybe types, and union/intersection types. To use Flow, developers add a /* @flow */ comment and install Flow binaries. They can then check for type errors using flow check. Flow aims to catch errors while allowing for gradual adoption, in contrast to TypeScript which requires more annotations.