mrkeyoor.com_
Tue 01 Sept 17:40 UTC
Dev Toolsevaluationupdated 31 Aug 2026

pyrefly review

Pyrefly is a Python type checker and language server written mainly in Rust. It finds type mistakes from the command line and supplies editor features such as completion, navigation, hovers, and inlay hints, with migration tools for projects already using mypy or Pyright.

+2 / 1dstars / 7d
Verdict

Our Pyrefly build took 248 seconds and the test suite was still running at the 900-second cap, so adopters get a serious codebase with a contributor loop that needs patience. The packaged CLI is worth testing beside mypy or Pyright when one type engine across CI and the editor is attractive. Pin the version, inspect the migrated configuration, and promote it only after both checkers have run across your own code.

We ran it

Lab card: what happened when we ran pyreflyScreenshot of pyrefly (pyrefly.org)
Install✓ · 34s408 packages
Build✓ · 248s
Tests✗ timed out · 900sran, no count parsed
Repo9972 files~588,137 lines of source · 71.1 MB · 32 CI workflows · tests dir

Answers from our run

Does pyrefly build from source?

Dependencies installed in 34 seconds (408 packages), and the build succeeded in 248 seconds. We cloned commit d8bef69 into a clean Debian container with 3 CPUs and no project-specific setup.

Do pyrefly's tests pass?

We could not finish them: the suite was still running after 15 minutes in our container.

Who should not use pyrefly?

Teams that require strict semantic versioning for diagnostics: the README says any release may add new type errors or breaking changes.

What are the alternatives to pyrefly?

mypy, Pyright, ty. Our Pyrefly build took 248 seconds and the test suite was still running at the 900-second cap, so adopters get a serious codebase with a contributor loop that needs patience.

Setup4/5Packaged installs are simple; source builds and tests are slow
Docs5/5Detailed install, migration, configuration, IDE, and architecture guides
Community5/56,920 stars with daily pushes and a busy issue queue
Maturity4/5Stable v1 line, though diagnostic behavior can change each release

Discussed on

  1. hnMeta's Pyrefly sabotages competing Python extensions without telling you52 points
  2. hnPyrefly 1.07 points
  3. hnPyrefly – A fast type checker and IDE for Python3 points
  4. hnPyrefly – A fast type checker and IDE for Python3 points

Who it’s for

Python teams that want one engine for CI type checks and editor feedback.
Large codebases that need an incremental route from mypy or Pyright.
VS Code, Neovim, Zed, and other LSP users who want type-aware navigation and completion.
Rust contributors interested in Python typing, import resolution, or language-server work.

Who it’s NOT for

Teams that require strict semantic versioning for diagnostics: the README says any release may add new type errors or breaking changes.
Projects expecting a lossless mypy or Pyright conversion: the migration guide says some settings lack equivalents and unrecognized settings are skipped without a warning.
Contributors who need a quick full-suite loop on a small machine: our build took 248 seconds and tests were still running at the 900-second cap.
Contributors unwilling to sign Meta's contributor license agreement: the contributing guide requires it before a pull request can be accepted.

Setup reality

Our sandbox installed 408 Rust packages in 34 seconds. The build succeeded in 248 seconds. Tests timed out after 900 seconds; the final log lines showed Polars dataframe tests continuing to pass, with no failure in the supplied tail.

Users can install the packaged CLI with pip, uv, Poetry, Pixi, or Conda, then run it without credentials. Configuration lives in pyrefly.toml or a tool.pyrefly section in pyproject.toml. Source contributors need Rust, while the all-in-one test script also requires Python 3.9 or newer.

Pyrefly can migrate nearby mypy or Pyright configuration in memory, but the migration guide says some settings have no exact match and unknown ones may be skipped silently. The project does not promise strict semantic versioning; upgrades can surface new errors. Pin a release in CI and compare results with your current checker before switching.

Pyrefly 1.2 combines a type checker and language server

Pyrefly 1.2 checks Python types from the command line and exposes the same analysis through the Language Server Protocol. The editor side includes completion, navigation, hovers, rename, semantic highlighting, and inlay hints. Official extensions cover VS Code and Open VSX, while the documentation lists Neovim, Zed, and other clients. The project calls its current line stable, which makes it a realistic candidate for team evaluation rather than a research-only checker.

The repository is correspondingly large: our checkout contained 9,972 files, about 588,137 lines of source, and 71.1 MB before the build. A Rust workspace holds the checker, type model, configuration, bundled stubs, sandbox, and utility crates. Separate trees cover conformance data, command-line tests, language-server tests, tensor-shape work, and the documentation site. That breadth explains both the product coverage and the amount of code a contributor must understand.

What happened when we ran it

Our sandbox installed 408 Rust packages in 34 seconds and built Pyrefly in 248 seconds. The checkout ran in an unprivileged Rust container with 3 CPUs and 12 GB of RAM. Installation and compilation both succeeded. The build result proves commit d8bef69 compiled in that environment. Our run did not benchmark Pyrefly against Instagram, PyTorch, or another checker.

The test command reached our 900-second cap and timed out. Its final lines showed Polars dataframe cases still reporting ok, including schema, null filling, filtering, renaming, selecting, and column-addition cases. The tail contained no assertion failure or panic, so the precise finding is a timeout, not a failed test. Our scan found 32 CI workflow files, a tests directory, and no Dockerfile. The complete upstream pass count is unknown from this run.

Version 1.2 eases migration without promising identical results

Pyrefly 1.2 looks for mypy.ini, pyrightconfig.json, or matching pyproject.toml sections when a project has no native configuration. It can translate those settings in memory and fall back to a basic preset that reports a smaller set of high-confidence errors. Running pyrefly init writes a native configuration. The migration guide recommends keeping both checkers in CI until the team has reviewed differences, which is the right adoption order for a tool that can change whether a build passes.

The 408-package workspace we installed supports two ways to handle existing findings. Suppression comments keep exceptions beside the affected code, while a baseline records current errors outside the source so CI can focus on new ones. Both lower the first-day cost on a large codebase. Neither proves that the converted configuration means the same thing as the old one. The guide explicitly says some incumbent settings have no equivalent and unrecognized settings can be skipped without warning.

Monthly minor releases can change the diagnostic result

The README says Pyrefly publishes minor versions monthly and patches between them when needed. It also says the project does not follow strict semantic versioning: minor releases carry larger changes, but any version may introduce type errors or other breaking behavior. That policy is unusually candid. It also means a floating CI install can turn yesterday's clean project red. Pin the package, read behavior changes, and upgrade on a branch where suppressions and config changes can be reviewed.

Our 248-second build and 900-second test timeout make upstream contribution more demanding than installing the published command. Development needs a Rust toolchain, while the all-in-one script requires Python 3.9 or newer and updates conformance outputs. The contributing guide asks people to claim an issue, add tests in the appropriate suite, pass CI, and sign Meta's contributor license agreement. Small checker changes still sit inside a repository with several test systems and generated conformance data.

Stable status still leaves Python edge cases open

Release 1.2.0 arrived on July 31, 2026 with 901 commits from 59 contributors. Its notes say 137 bug issues were closed and describe work across typing behavior, libraries, the language server, error reports, coverage, configuration, stub generation, and Bazel support. GitHub recorded the last push on August 31, 2026, plus 6,920 stars and 696 open issues and pull requests. The issue count is combined, but recent reports and same-day pushes show active development rather than neglect.

The 900-second ceiling in our run did not expose a correctness failure, while the open tracker supplies concrete cases to evaluate. Issue 4752 reports an exhaustive class-pattern match being marked incomplete on current main. Issue 4302 describes a Windows project include pattern being treated as excluded. Both provide reproductions and concern the checker behavior discussed here. A migration pilot should include each project's decorators, framework models, config paths, platform guards, and strictness settings instead of relying on a small sample file.

A 248-second source build favors packaged adoption

Mypy is the conservative choice when existing plugins and familiar diagnostics carry more weight than editor unification. Pyright remains compelling for teams already using its behavior through editor tooling. Astral's ty is the closest new Rust alternative and should be compared on the same project instead of by marketing speed claims. Pyrefly earns its trial through the combined CLI and language server, migration commands, framework support, and published stable status.

Our source build completed in 248 seconds, while the full test command exceeded 900 seconds. Most adopters should use the packaged release and reserve source work for teams prepared for Rust and the larger suite. Run Pyrefly beside the incumbent checker, pin version 1.2.0 or a chosen successor, and review every converted setting. The tool is ready for a measured migration; the release policy and open edge cases make an overnight replacement hard to defend.

Alternatives

ProjectWhat it isPick it when
mypyThe established optional static type checker for Python.pick this instead when ecosystem familiarity and existing plugin behavior matter more than a combined language server.
PyrightMicrosoft's Python type checker and the engine behind much of Pylance.pick this instead when your team already trusts Pyright behavior and its editor integration.
tyAstral's Rust-based Python type checker and language server.pick this instead when you want to evaluate another new Rust implementation alongside Astral's Python tools.

What people are saying

  1. [github-trending] facebook/pyrefly

Sources

  1. Pyrefly README
  2. Pyrefly installation guide
  3. Migrating to Pyrefly
  4. Pyrefly architecture overview
  5. Pyrefly contributing guide
  6. Pyrefly 1.2.0 release notes
  7. Class-pattern coverage issue
  8. Windows project include issue

More dev tools reviews

workmux · v2rayNG · SecLists · hashcat · eslint · fastfetch · the whole board →