Skip to content
CAI
Software that uses CAICheck a score

facebook/flow

43.0

Weak · 29 July 2026

517.5k

lines of production code

Rust

with JavaScript

2

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

How this codebase got here

Score

  • CAI 34 → 43 (+8.9)
  • Rubric changed (rubric-2026.08.17 → rubric-2026.08.18) — scores are not directly comparable.

Lenses

  • Code Health 52 → 47 (-5.7)
  • Architecture 56 → 57 (+0.3)
  • Maturity 73 → 76 (+2.3)
  • Readiness 30 → 30 (-0.3)
  • Security 20 → 52 (+32.1)
  • Domain Modelling 100 → 100 (+0.0)

Resolved (272)

  • AnnotateOptionalPropertiesMapper.get_props_for_obj (cyclomatic 17) (rust_port/crates/flow_codemods/src/annotate_optional_properties.rs)
  • Change coupling: ast_builder.rs ↔ flow_ast_differ.rs (rust_port/crates/flow_parser_utils/src/ast_builder.rs)
  • Change coupling: ast_visitor.rs ↔ ast_builder.rs (rust_port/crates/flow_parser/src/ast_visitor.rs)
  • Change coupling: core.js ↔ prelude.js (lib/core.js)
  • Change coupling: estree_translator.rs ↔ ast_builder.rs (rust_port/crates/flow_parser/src/estree_translator.rs)
  • Change coupling: estree_translator.rs ↔ flow_ast_differ.rs (rust_port/crates/flow_parser/src/estree_translator.rs)
  • Change coupling: estree_translator.rs ↔ polymorphic_ast_mapper.rs (rust_port/crates/flow_parser/src/estree_translator.rs)
  • Change coupling: flow_js.js ↔ TryFlow.js (website/libs/flow_js.js)
  • Change coupling: polymorphic_ast_mapper.rs ↔ ast_builder.rs (rust_port/crates/flow_parser/src/polymorphic_ast_mapper.rs)
  • Change coupling: polymorphic_ast_mapper.rs ↔ flow_ast_differ.rs (rust_port/crates/flow_parser/src/polymorphic_ast_mapper.rs)
  • DefFinder.visit_assignment_expression (cognitive 40) (rust_port/crates/flow_env_builder/src/name_def.rs)
  • DefFinder.visit_assignment_expression (cyclomatic 38) (rust_port/crates/flow_env_builder/src/name_def.rs)
  • DefFinder.visit_function_param (cyclomatic 16) (rust_port/crates/flow_env_builder/src/name_def.rs)
  • Dependency hygiene not measured — no supported dependency manifest was read
  • EdenFS.wait_for_init (cyclomatic 16) (rust_port/crates/flow_server_monitor/src/file_watcher.rs)
  • EffectVisitor.call (cyclomatic 17) (rust_port/crates/flow_typing_statement/src/react_rules.rs)
  • FileSig.to_debug_string (cyclomatic 20) (rust_port/crates/flow_parser_utils/src/file_sig.rs)
  • FileTooLong: lib/core.js (lib/core.js)
  • FileTooLong: src/flow_dot_js_wasm.js (src/flow_dot_js_wasm.js)
  • FlowServer.run (cyclomatic 16) (rust_port/crates/flow_server/src/standalone.rs)
  • …and 252 more

New (270)

  • Build action pinned to a mutable branch
  • Change coupling: lib.rs ↔ any_helpers.rs (rust_port/crates/flow_typing_debug/src/lib.rs)
  • Change coupling: normalizer.rs ↔ type_visitor.rs (rust_port/crates/flow_typing_ty_normalizer/src/normalizer.rs)
  • Change coupling: parse.rs ↔ type_service.rs (rust_port/crates/flow_heap/src/parse.rs)
  • Change coupling: type_sig_merge.rs ↔ type_visitor.rs (rust_port/crates/flow_typing_utils/src/type_sig_merge.rs)
  • Change coupling: type_sig_parse.rs ↔ type_visitor.rs (rust_port/crates/flow_type_sig/src/type_sig_parse.rs)
  • Context::interface_merge_unify_tasks (cognitive 27) (rust_port/crates/flow_typing_context/src/lib.rs)
  • DefFinder::statement_list::extract_func_static_assign (cognitive 28) (rust_port/crates/flow_env_builder/src/name_def.rs)
  • DefFinder::visit_assignment_expression::other_pattern_hint_opt (cognitive 27) (rust_port/crates/flow_env_builder/src/name_def.rs)
  • DefFinder::visit_assignment_expression::other_pattern_hint_opt (cyclomatic 16) (rust_port/crates/flow_env_builder/src/name_def.rs)
  • Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
  • FileTooLong: flow_js/dispatch.rs (rust_port/crates/flow_typing_flow_js/src/flow_js/dispatch.rs)
  • FileTooLong: flow_js/eval_helpers.rs (rust_port/crates/flow_typing_flow_js/src/flow_js/eval_helpers.rs)
  • FileTooLong: flow_js/helpers.rs (rust_port/crates/flow_typing_flow_js/src/flow_js/helpers.rs)
  • FileTooLong: flow_js/multi_arg_helpers.rs (rust_port/crates/flow_typing_flow_js/src/flow_js/multi_arg_helpers.rs)
  • FileTooLong: flow_js/unification_helpers.rs (rust_port/crates/flow_typing_flow_js/src/flow_js/unification_helpers.rs)
  • FileTooLong: src/annotate_exports.rs (rust_port/crates/flow_codemods/src/annotate_exports.rs)
  • FileTooLong: src/annotation_inference.rs (rust_port/crates/flow_typing_utils/src/annotation_inference.rs)
  • FileTooLong: src/ast.rs (rust_port/crates/flow_parser/src/ast.rs)
  • FileTooLong: src/ast_builder.rs (rust_port/crates/flow_parser_utils/src/ast_builder.rs)
  • …and 250 more

Changes since last survey

  • 54 commits — 47 feature/other, 7 fixes

By area

  • rust_port/crates — 12 commits
  • packages/flow-dev-tools — 8 commits
  • website/yarn.lock — 7 commits
  • (root) — 4 commits
  • packages/flow-upgrade — 4 commits
  • packages/eslint-plugin-fb-flow — 3 commits
  • website/src — 3 commits
  • .github/workflows — 2 commits
  • packages/babel-plugin-transform-flow-enums — 2 commits
  • packages/flow-enums-runtime — 2 commits
  • packages/flow-for-vscode — 2 commits
  • packages/scripts — 1 commit
  • packages/yarn.lock — 1 commit
  • scripts/tests_bin — 1 commit
  • tests/class_computed_props — 1 commit
  • website/docs — 1 commit

Notable commits

  • fix: Revert D113565720
  • fix: [Tasks][Test Blame] Fix broken fbcode//flow/src/parser/test:oxidized_jest_test - unmanaged caused by D113565720
  • fix: [flow][docs] Fix flow-typed environment setup
  • fix: [flow][fix] Fix stale LSP references after didChange
  • fix: [flow][fix] Restore ephemeral command event logging
  • fix: [flow][perf][fix] Fix slow crawling during parsing stage due to the new glob system
  • fix: [flow][website] Fix Flow errors in website code
  • change: Bump @babel/core from 7.14.6 to 7.29.7 in /packages/eslint-plugin-fb-flow (#9465)
  • change: Bump @babel/core from 7.14.8 to 7.29.6 in /packages/flow-upgrade (#9461)
  • change: Bump brace-expansion from 1.1.11 to 1.1.16 in /packages/flow-enums-runtime (#9457)
  • change: Bump brace-expansion from 1.1.11 to 1.1.16 in /packages/flow-upgrade (#9462)
  • change: Bump brace-expansion from 1.1.12 to 1.1.16 in /website (#9459)
  • change: Bump brace-expansion from 1.1.13 to 1.1.16 (#9468)
  • change: Bump braces from 3.0.2 to 3.0.3 in /packages (#9469)
  • change: Bump braces from 3.0.2 to 3.0.3 in /packages/eslint-plugin-fb-flow (#9474)
  • change: Bump braces from 3.0.2 to 3.0.3 in /packages/flow-for-vscode (#9470)
  • change: Bump cross-spawn from 7.0.3 to 7.0.6 in /packages/flow-for-vscode (#9471)
  • change: Bump cross-spawn from 7.0.3 to 7.0.6 in /website (#9473)
  • change: Bump dom-iterator from 1.0.0 to 1.0.2 in /website (#9472)
  • change: Bump fast-uri from 3.1.2 to 3.1.4 in /website (#9463)
  • …and 34 more

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

facebook/flow was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.

About this page

  • The score is its most recent published measurement, taken on 29 July 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit 74ab021f0e0b889e502bb59825ab098b32477f5f — the exact code this score is about.
  • Scored under rubric-2026.08.18 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer latest.