Pyrefly is a type checker and language server for Python, which provides lightning-fast type checking along with IDE features such as code navigation, semantic highlighting, and code completion. It is available as a command-line tool and an extension for popular IDEs and editors such as VSCode, Neovim, Zed, and more.
What's new in 1.4.0
*Release date:October 14, 2026*
Pyrefly v1.4.0 bundles 1191 commits from 66 contributors.
Release Highlights
Language Server
The VS Code extension now runs the Pyrefly from your environment. By default, the extension launches the Pyrefly installed in your active Python environment (for example, your project's .venv), so your editor and your command line use the same version. If the environment has no Pyrefly, the extension falls back to its bundled binary. Set pyrefly.pyreflyExecutable to bundled to keep the old behavior. See Pyrefly binary selection.
Configuration & CLI
uv workspace members are now type checked. In a uv workspace, the interpreter puts each member's source directory on sys.path as an editable install. Pyrefly treated those directories as installed packages and skipped them, so errors in workspace members went unreported. Pyrefly now checks editable sources inside your project, while regular site-packages stay excluded.
Type Checking
Easier migration from BasedPyright. Pyrefly reads basedpyright sections in pyproject.toml and applies the matching type checking mode preset.
New opt-in checks for untyped code. New error kinds such as unknown-member-type, unknown-return-type, untyped-function-decorator, and uninitialized-instance-variable help you find where Any enters your code.
Tensor Shapes
JAX shape stubs on PyPI. This is the first stable release that ships JAX shape stubs as the jax-pyrefly-stubs package.
⚠️ Behavior Changes
These may change your editor setup or surface new errors in code that checked cleanly under v1.3.0.
The VS Code extension now uses the Pyrefly in your active environment by default instead of its bundled binary. If your environment pins an older Pyrefly, the editor now runs that version. The Pyrefly language server output channel shows which binary was chosen and why.
Pyrefly now checks the source of uv workspace members (editable installs inside your project). Errors in those packages that were hidden before can now appear.
--typeshed-path now replaces the bundled typeshed entirely instead of overlaying it.
The incompatible-overload-residual error kind is renamed to incompatible-overload-argument. The old name still works as a deprecated alias.
site-package-path is renamed to site-packages-path. The old name still works.
Pyrefly v1.3.2 is a patch release that fixes regressions in how Pyrefly infers the type of a variable after it is assigned a value of type Any.
🐛 Bug fixes
#4846: Fixed several regressions from v1.3.0 in type inference after a variable is reassigned to Any:
Assigning an implicit Any (a value with no known type, such as the result of an unannotated function or an unresolved import) to an annotated variable once again produces Unknown. It no longer turns into an explicit Any.
When a variable annotated as Optional[T] or T | None is narrowed to None and then reassigned inside that branch, Pyrefly no longer adds the annotation's None back after the branch. For example, x:Any | None followed by if x is None: x = get_any() now gives Any instead of Any | None.
When a variable's annotation is a union that contains Any, assigning Any to it now narrows the variable to Any. For example, x:Any | None followed by x = x or get_any() now gives Any instead of Any | None, so later attribute access no longer reports a false missing-attribute error on None.
Thank-you to all our contributors who found these bugs and reported them! Did you know this is one of the most helpful contributions you can make to an open-source project? If you find any bugs in Pyrefly we want to know about them! Please open a bug report issue here.
📦 Upgrade …
1.2.0Aug 1, 2026
*Release date: July 31, 2026*
Pyrefly v1.2.0 bundles 901 commits from 59 contributors.
✨ New & Improved
Type Checking
Attrs classes are now fully supported with comprehensive field synthesis, validation, and special-method generation. Pyrefly recognizes @attr.s, @define, @frozen, and their variants, handling field specifiers (attr.ib(), field()), converters, validators, defaults, and private-field aliasing. Converters are typed from their real input type rather than Any, including the @<field>.converter decorator, attrs.converters.pipe, attrs.converters.default_if_none, and generic converters like copy.deepcopy. See the new attrs documentation for details. functools.partial is now type-checked instead of treated as opaque. Bound arguments are validated at construction and Pyrefly synthesizes a precise residual signature for the remaining parameters, so errors surface at both the partial(...) call and the later invocation. Generic functions, overloads, constructors, bound methods, and Unpack[TypedDict] parameters are supported, and results expose .func, .args, and .keywords. Precise residual callable assignment is enabled by the strict and all presets or explicitly with strict-partial-subtyping. …
1.1.1Jun 19, 2026
Release date: June 18, 2026
Pyrefly v1.1.1 is a patch release with a single bug fix.
🐛 Bug fixes
- #3867: Fixed a regression introduced in 1.1.0 where isinstance() narrowing of a union variable silently stopped working when an earlier sibling branch in the same if/elif/else chain narrowed a different variable with isinstance() and returned. The later narrowing left the union untouched, producing false missing-attribute errors on code that checked correctly in 1.0.0.
Thank-you to all our contributors who found these bugs and reported them! Did you know this is one of the most helpful contributions you can make to an open-source project? If you find any bugs in Pyrefly we want to know about them! Please open a bug report issue here.
Frequently asked questions
Is Pyrefly free?
Yes. Pyrefly is free and open-source software released under the MIT license.
What is the latest version of Pyrefly?
The latest version is 1.4.0, released on Oct 15, 2026.
Is it safe to download Pyrefly?
The download button links to the official installer published on github.com, the same file Windows Package Manager installs. You can verify the downloaded file by comparing its SHA-256 checksum with 90cb8c7d92051d274c48dd1caacbc20e795b3f5248ddc55d6d22adf53424225f.
Which Windows versions does Pyrefly support?
Pyrefly runs on Windows and is available for 64-bit (x64), ARM64 systems.
How do I uninstall Pyrefly?
Open Settings › Apps › Installed apps, find Pyrefly and select Uninstall. From the command line, run winget uninstall --id=facebook.pyrefly -e.
Is there a portable version of Pyrefly?
Yes. Pyrefly is available as a portable ZIP archive (pyrefly-windows-x86_64.zip, 64-bit (x64)) that runs without installation. Copy it to any folder or USB drive and run it from there.
Alternatives to Pyrefly
Other Programming Languages programs for Windows from different developers.
Zstandard is a fast lossless compression algorithm, targeting real-time compression scenarios at zlib-level and better compression ratios. It's backed by a very fast entropy stage, provided by Huff0 a
The Oculus platform utility is a command-line tool that enables you upload builds to your release channels much faster than using the developer dashboard web interface, and it enables larger upload pa