NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #1635 most downloaded on PyPI
A fast type checker and language server for Python with powerful IDE features
Last release today
18 Sep 2026
Ships on a steady schedule
a new release about every 2 weeks
Most releases are documented
notes for 38 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
2 years old
146 releases · first in 2025
One column per month.
Status : BETA *Release date: December 15, 2025*
Status : BETA
Release date: December 15, 2025
Pyrefly v0.46.0 bundles 125 commits from 19 contributors.
| Area | What’s new |
|---|---|
| Language Server | - Call Hierarchy support for the Pyrefly LSP server now implemented. This is a fundamental IDE feature that allows users to explore function call relationships in your IDE. <br><br>- Function documentation now available in signature help <br><br>- Signature help now uses single-line labels, thereby maintaining compatibility with editors that don't support multi-line labels while still keeping hover tooltips readable <br><br>- Variables defined in ALL_CAPS are now correctly highlighted as constants in VSCode and the website sandbox. |
| Type Checking | Implemented PEP 765 warnings. The checker now warns if return, break, or continue statements directly exit a finally block. Starting in Python 3.14, these statements emit a SyntaxWarning because they can silently mask exceptions. |
| Third Party Library Support | - Added third-party stubs for scipy, matplotlib, scikit-learn, scikit-image, vispy, sympy, pandas, conan, botocore, and boto3 to the Pyrefly bundle for better out-of-the-box support for these libraries. <br><br>- Support for Pydantic “lax mode”. Pyrefly can now model Pydantic’s lax runtime behavior more precisely. As a result, you may see new inferred types such as LaxInt and LaxBool in your IDE, representing the unions of input types that Pydantic accepts at runtime. |
| Errors / Debugging | Debug symbols are now included in release builds, enabling users to generate usable stack traces in crash reports |
We closed 14 bug issues this release 👏
__future__ imports being incorrectly flagged as unused, as they have necessary module-level side effects.numpy) missing the function name in the header when resolving from stub files.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
pip install --upgrade pyrefly==v0.46.0
Upgrading the version of Pyrefly you're using or a third-party library you depend on can reveal new type errors in your code. Fixing them all at once is often unrealistic. We've written scripts to help you temporarily silence them. After upgrading, follow these steps:
pyrefly check --suppress-errorspyrefly check --remove-unused-ignoresThis will add # pyrefly: ignore comments to your code, enabling you to silence errors and return to fix them later. This can make the process of upgrading a large codebase much more manageable.
Read more about error suppressions in the Pyefly documentation
@javabster, @AryanBagade, @asukaminato0721, @connernilsen, @DanielNoord, @yangdanny97, @dearfl, @fangyi-zhou, Jack, @jvansch1, @kinto0, Liam, @arthaud, @rchen152, @samwgoldman, @stroxler, @tianhan0, @migeed-z
Nothing published for this version
Nothing published for this version
Status : BETA *Release date: 08 December 2025*
Status : BETA
Release date: 08 December 2025
Pyrefly v0.45.0 bundles 146 commits from 21 contributors.
| Area | What’s new |
|---|---|
| Type Checking | - For dict literals without a contextual hint Pyrefly will now infer an anonymous typed dict. This reduces false positives when unpacking a heterogeneous dict as kwargs. <br><br>- Better suggestions hints for name and attribute errors (e.g. suggesting fixes to one letter errors like my_variuble → my_variable). <br><br>- Callable types are now narrowed more intuitively, especially in isinstance checks. Callable Enums are also now supported <br><br>- New check added (defaults to warn) for comparisons where the result is predictable or the comparison inappropriate (e.g. True is False). Reflects basic support for Pyright’s reportUnnecessaryComparison and Mypy’s comparison-overlap check. |
| Language Server | Automatic file renaming improved to allow editable third party packages to be renamed |
| Third Party Package Support | - Support for Pydantic lax mode has been extended to include support for container types (lists, dicts etc.) <br><br>- All Django fields now support nullability, fixing issues with TextField and others <br><br>- Pyrefly will now correctly infer the signature for functions decorated with numba.jit and numba.njit |
We closed 19 bug issues this release 👏
LoopRecursive variables in type checking.__all__ is not implemented, now validating user-defined __all__ entries and emitting errors for missing module attributesThank-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
pip install --upgrade pyrefly==0.45.0
Upgrading the version of Pyrefly you're using or a third-party library you depend on can reveal new type errors in your code. Fixing them all at once is often unrealistic. We've written scripts to help you temporarily silence them. After upgrading, follow these steps:
pyrefly check --suppress-errorspyrefly check --remove-unused-ignoresThis will add `pyrefly: ignore` comments to your code, enabling you to silence errors and return to fix them later. This can make the process of upgrading a large codebase much more manageable.
Read more about error suppressions in the Pyefly documentation
@stroxler, @migeed-z, @rchen152, @yangdanny97, @samwgoldman, @connernilsen, @asukaminato0721, @kinto0, @grievejia, @arthaud, @AryanBagade, @lolpack, @ndmitchell, @gvozdvmozgu, @javabster, @KaranPradhan266, @jvansch1, @tianhan0, Owen Valentine, Vladimir Matveev
Nothing published for this version
Nothing published for this version
Status : BETA *Release date: 03 December 2025*
Status : BETA
Release date: 03 December 2025
Pyrefly v0.44.0 bundles 163 commits from 23 contributors.
| Area | What’s new |
|---|---|
| LSP / IDE | - Inlay hints are now clickable, allowing Go-To-Definition for class and type names (e.g., List or T) directly from the hint overlay. <br><br>- Completions are now disabled inside comments and string literals to reduce noise and improve user experience. |
| Type checking | - Recursive type solving logic was significantly refactored, enabling more reliable type inference and bug fixes around self-referential types. <br><br>- Bundled typeshed and third-party stubs have been updated, improving compatibility and type checking for more libraries |
| Pydantic/Dataclass | - Added support for Pydantic range constraints (e.g., pydantic.types.PositiveInt). <br><br>- New infrastructure introduced to better support Pydantic lax mode <br><br>- Support added for the Decimal type. |
| Error Handling | Error suppressions are now stricter, only applying when the suppression comment is on the start line, reducing false negatives |
We closed 11 bug issues this release 👏
Literal[...] tooltips when hovering over docstrings.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
pip install --upgrade pyrefly==v0.44.0
Upgrading the version of Pyrefly you're using or a third-party library you depend on can reveal new type errors in your code. Fixing them all at once is often unrealistic. We've written scripts to help you temporarily silence them. After upgrading, follow these steps:
pyrefly check --suppress-errorspyrefly check --remove-unused-ignoresThis will add \# pyrefly: ignore comments to your code, enabling you to silence errors and return to fix them later. This can make the process of upgrading a large codebase much more manageable.
Read more about error suppressions in the [Pyefly documentation](https://pyrefly.org/en/docs/error-suppressions/)
@arthaud, @asukaminato0721 , @connernilsen , @diliop , @fangyi-zhou , @grievejia , @gvozdvmozgu, @Imran-S-heikh, @javabster , @kinto0 , @kshitijgetsac, @migeed-z, @ndmitchell, @ogios, @rchen152, @simonhollis, @stroxler, @yangdanny97, Carlos Fernandez, @dtolnay, @jvansch1, @tianhan0
Nothing published for this version
Status : BETA *Release date: 24 November 2025*
Status : BETA
Release date: 24 November 2025
| Area | What’s new |
|---|---|
| IDE/LSP Features | - New warnings for unused imports and unused variables <br><br>- Pyrefly LSP features now apply to Python documents with the inmemory schema, improving support for interactive consoles and temporary code cells in IDEs like Positron. <br><br>- Added a configuration option to control whether "Go to definition" links appear in hover tooltips, enabled by default |
| Type Checker | Improved support for unpacking tuple[*Ts], fixing cases where unpacking would previously degrade to object If a TypeVarTuple-annotated varargs is unmatched, it now resolves to an empty tuple in all cases |
| Error Messages | - New --enabled-ignores command line flag and configuration option allow specifying exactly which tools’ ignore comments (e.g., # pyright: ignore) pyrefly respects <br><br>- CLI flags like --error, --warn, etc., now accept comma-separated lists, making it easier to enable or disable multiple error codes at once. |
| Pydantic Support | Improved handling of RootModel types, including nested and union scenarios. Basic support for Pydantic BaseSettings. Fields in BaseSettings are now treated as optional by default. |
We closed 17 bug issues this week 👏
TypedDicts with any required keys are now correctly treated as always truthy, allowing for proper type narrowing in boolean expressionsawait in nested generator expressions, preventing them from being incorrectly typed as Generator instead of AsyncGenerator.*args would show incorrect positions or duplicatestyping.Container), fixing an issue with type signature mismatch:=) appears in annotation positionstuple[()] | tuple[int, *tuple[int, ...]] to simplify to tuple[int, ...].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
pip install --upgrade pyrefly~=0.43.0
Upgrading the version of Pyrefly you're using or a third-party library you depend on can reveal new type errors in your code. Fixing them all at once is often unrealistic. We've written scripts to help you temporarily silence them. After upgrading, follow these steps:
pyrefly check --suppress-errorspyrefly check --remove-unused-ignoresThis will add pyrefly: ignore comments to your code, enabling you to silence errors and return to fix them later. This can make the process of upgrading a large codebase much more manageable.
Read more about error suppressions in the [Pyefly documentation](https://pyrefly.org/en/docs/error-suppressions/)
@javabster, @AryanBagade, @asukaminato0721, @austin3dickey, @yangdanny97, Dhruv Mongia, @fangyi-zhou, @Imran-S-heikh, @grievejia, @jvansch1, @keito, @kshitijgetsac, @kinto0, @arthaud, @nathan-liyiming, @rchen152, Ron Mordechai, @samwgoldman, @cybardev, @stroxler, @tianhan0, @vinnymeller, @migeed-z
Nothing published for this version
Nothing published for this version
Nothing published for this version
Status : BETA 🎉 *Release date: 17 Nov 2025*
Status : BETA 🎉
Release date: 17 Nov 2025
We’re thrilled to announce with this release that Pyrefly has transitioned from Alpha to Beta status! This marks a new chapter for the project, with increased stability, feature maturity, and readiness for broader adoption. When using a version of Pyrefly with Beta status you can feel confident that the IDE extension is ready for production use, while core type-checking features can be used, but be aware some edge cases are still being addressed as we make progress towards a later stable v1 release (bug reports welcome!).
These release notes will use a slightly different format than usual, covering the major highlights of the last 6 months that have contributed to this milestone.
TypedDict & Protocol Improvements: More accurate type checking for structural types, including handling for union keys and improved inheritance checks.LiteralString & TypeAliasType support, abstract class instantiation checks, unused awaitable checks, multiple inheritance consistency checks, and more!Check out the Pyrefly documentation for more details on how to use each of these features.
The Beta release is your invitation to start using Pyrefly in real-world projects, provide feedback, and continue helping shape its future. You do not need to change how you install and upgrade Pyrefly now that we are in Beta status, the same semantic versioning format will remain in place.
You can continue providing feedback as usual by opening a GitHub issue or joining our Discord server. In this new phase of development as we push towards our next milestone (a stable v1.0 release) we are particularly interested in hearing about how you are using Pyrefly in real production environments, including any edge cases you may encounter.
pip install --upgrade pyrefly==0.42.0
Upgrading the version of Pyrefly you're using or a third-party library you depend on can reveal new type errors in your code. Fixing them all at once is often unrealistic. We've written scripts to help you temporarily silence them. After upgrading, follow these steps:
This will add # pyrefly: ignore comments to your code, enabling you to silence errors and return to fix them later. This can make the process of upgrading a large codebase much more manageable.
Read more about error suppressions in the Pyefly documentation
Going forward we’ll be continuing development work the same as usual with weekly releases of new features and bug fixes. However we will be closing out our Beta milestone and moving on to the next - a stable V1 Release. We’ll be continuing to listen to your feedback and address open issues, so if there are specific things you want to see in a stable release, or blockers for adopting Pyrefly in your project - let us know!
The following people have directly contributed at least once to the development of Pyrefly since our first Alpha release. Together we’ve closed almost 800 issues and made over 9,000 commits 😱 We want to sincerely thank everyone who has taken the time to make a contribution, large or small, and look forward to our continued collaboration on future releases.
@aahanaggarwal, @aaron-ang, @lolpack, @arosenber, @javabster, @abdallhfattah, Abel, @abhi-jha, @Adist319, Aditya Sinha, @Adamkaram, @ajaymiranda, @akmalsoliev, Alex, @Alex-Aron, @ahornby, Alexander Mols, Ali Tayyebi, @alokpr, @gvozdvmozgu, Anqi Wu, Arnav, @AryanBagade, @asukaminato0721, @krathul, Ben Carr, Brian Rosenfeld, @capickett, Carlos Fernandez, @charliecloudberry, @cclauss, @cjlongoria, @connernilsen, @cooperlees, Daniel Mueller, @yangdanny97, @darricklaidin, @dluo, @dtolnay, Dhruv Mongia, @kv9898, @diliop, @Dogacel, @ducdetronquito, Eric J Nguyen, @fangyi-zhou, @fatelei, @Zeko369, Grant Herman, @gvozdvmozgu, @hashiranhar, @fannheyward, @hugovk, @IDrokin117, @immanuel-peter, @InSyncWithFoo, @airvzxf, Ivan Loskutov, @jack-mcivor, @JakobDegen, @j-piasecki, @jagill, @jchanke, @grievejia, @jvansch1, @bigfootjon, Jun Hao, Kc Balusu, @CookieComputing, kitek, @krikera, @kshitijgetsac, @kinto0, Li Shen, lianne, LyricalToxic, @maggiemoss, @MarcoGorelli, @markmarkmarkthebest, @martindemello, @yamgent, @arthaud, @melvinhe, Miae Kim, @michaelcortese, Miyamoto Musashi, @mohesham88, @mrsobakin, Nathan Hawkes, @ndmitchell, @NSPC911, @oriori1703, Paul Iatchenii, @zpao, @pavelzw, @pawelstrzmeta, @prasannavenkateshgit, @pt2302, @rchen152, @regexyl, @ricardoleal20, @rchiodo, Ron Mordechai, @rubmary, @TheRustyPickle, @salvatorebenedetto, @samwgoldman, @SamChou19815, @sandeshbhusal, @sargun, @slawlor, @singiamtel, @stroxler, Takuma Iwaki, @Solumin, Thomas Polasek, @tianhan0, @Viicos, @VladimirMakaev, @WeixiMa, @Wilfred, Willy Lau, @xaskii, Xiaomin Liu, Yotam DK, @zachmullen, Zach Riser, @migeed-z, @LycheeBay, Zoltán Nagy, @zsol
Nothing published for this version
Nothing published for this version
Nothing published for this version
| Language Server | - Hover cards on variables now link to built in types. - Unused parameters are now flagged in IDE Deprecated functions now suggest…
Status : ALPHA
Release date: 10 November 2025
Pyrefly v0.41.0 bundles 166 commits from 22 contributors.
| Area | What’s new |
|---|---|
| Jupyter Notebook support | - Extensive improvements for language server support in Jupyter Notebooks including diagnostics (red squiggles), inlay hints, go-to-definition, hover, semantic tokens, signature help, and completions <br><br>- No extra configuration required to enable language server for notebook files (.ipynb), they are now included by default. |
| Type Checking | - Pyrefly now correctly models and narrows types for variables reassigned within loops, fixing several long-standing issues (#726, #747). <br><br>- Improved pattern matching support for certain built-in types, better aligning with typing specification <br><br>- More accurate type checking for TypedDicts with union keys |
| Language Server | - Hover cards on variables now link to built in types. <br><br>- Unused parameters are now flagged in IDE Deprecated functions now suggested below non-deprecated ones in auto-completions. <br><br>- Inlay hints are suppressed for variables with unknown or Any types to reduce noise in IDE |
| Error messages | - Users can now use --info=<error-code> command line flag to set error severity to info for specific error codes. <br><br>- Users can now filter summarized errors by specific error codes using pyrefly check --summarize-errors --only <error-code> |
We closed 15 bug issues this release 👏
bad-assignment error inside loop with dict.getbad-argument-type false positive when a parameter type was inferred as NeverNewType was not treated as a typeThank-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
pip install --upgrade pyrefly==0.41.0
Upgrading the version of Pyrefly you're using or a third-party library you depend on can reveal new type errors in your code. Fixing them all at once is often unrealistic. We've written scripts to help you temporarily silence them. After upgrading, follow these steps:
pyrefly check --suppress-errorspyrefly check --remove-unused-ignoresThis will add # pyrefly: ignore comments to your code, enabling you to silence errors and return to fix them later. This can make the process of upgrading a large codebase much more manageable.
Read more about error suppressions in the Pyefly documentation
@aaron-ang , @alokpr, @AryanBagade, @asukaminato0721, @connernilsen, @yangdanny97, @dtolnay, @kv9898, @fangyi-zhou, @grievejia, @jvansch1, @kshitijgetsac, @maggiemoss, @arthaud, @ndmitchell, @rchen152, @rubmary, @stroxler, @VladimirMakaev, @migeed-z
Nothing published for this version
Status : ALPHA *Release date: 03 November 2025*
Status : ALPHA
Release date: 03 November 2025
Pyrefly v0.40.0 bundles 143 commits from 26 contributors.
| Area | What’s new |
|---|---|
| Language Server | - Go-to definition / hover to overloads on operators like == <br><br> - Fold on docstrings <br><br> - New LSP configuration arguments added allowing users to enable/disable specific IDE features like Go-to-definition, Autocomplete, and Hover tooltips. See docs here for details. <br><br> - Unreachable code will now be grayed out. <br><br> - Fixed bug with symlinked paths in VSCode |
| Type Resolution | Implemented a TypeCache to significantly optimize is_subtype queries by caching resolved types. This leads to faster type checks and a more responsive IDE experience. |
| Error Reporting | Introduced a new FindError that will inform a user when there is a stub available for a package that they do not have installed. The default severity level for this will be a warning. |
| Django Integration | Continued work on Django support, including improved type inference for lazy enum labels |
| Jupyter Notebook support | Basic type checking support (pyrefly check path/to/file.ipynb) now available for jupyter notebooks. Still very experimental, further improvements coming soon |
We closed 15 bug issues this release 👏
typing_extensions.dataclass_transform works correctly.TypedDict as Partial when unpacking one TypedDict into another and detect more open-unpacking errors.Var::ZERO during autocomplete by using deep_force to replace unsolved variables with Unknown.raise..from statements by correctly handling None when it appears in a unionThank-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
pip install --upgrade pyrefly==0.40.0
Upgrading the version of Pyrefly you're using or a third-party library you depend on can reveal new type errors in your code. Fixing them all at once is often unrealistic. We've written scripts to help you temporarily silence them. After upgrading, follow these steps:
pyrefly check --suppress-errorspyrefly check --remove-unused-ignoresThis will add # pyrefly: ignore comments to your code, enabling you to silence errors and return to fix them later. This can make the process of upgrading a large codebase much more manageable.
Read more about error suppressions in the Pyefly documentation
@ndmitchell, @rchen152, @arthaud, @yangdanny97, @stroxler, @kinto0, @samwgoldman, @connernilsen, @grievejia, @tianhan0, , @rubmary, @nhawkes, @diliop, @migeed-z, @jvansch1, @vladima, @lolpack, @asukaminato0721, @dtolnay, @kv9898, @maggiemoss, @michaelcortese, Anqi Wu, Willy Lau
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Status : ALPHA *Release date: 27 October 2025*
Status : ALPHA
Release date: 27 October 2025
Pyrefly v0.39.0 bundles 195 commits from 19 contributors
| Area | What’s new |
|---|---|
| Inheritance checks | - Added additional inheritance checks for typed dictionaries <br><br> - Pyrefly no longer throws duplicate errors for overridden fields <br><br> - Multiple inheritance checks are now skipped for some special fields, such as constructors |
| Language Server | - Major improvement on startup time for IDE features. This change makes most IDE features available instantly, with completions being available a few seconds later in large environments with hundreds of site-packages <br><br> - Pyrefly can now update imports when files are renamed, by handling will_rename_file , a request sent by the language client when files are renamed. <br><br> - Add semantic highlighting and hover docstrings in the Pyrefly website sandbox <br><br> - Better IDE support for files that don’t have a marker file (pyproject.toml / pyrefly.toml), making operations like find-references should now work in almost every case |
| Build Systems | Improved handling of namespaced directories in build systems. Pyrefly now keeps track of namespaces (directories with a python or source file, but no __init__) in the build system, then returns them for Pyrefly to work with |
| Docs & error messages | - Improved no-matching-overload errors. When no overload matches a function call, Pyrefly now displays the actual argument types that were provided. This eliminates the need to hover over each argument to understand why the call failed. <br><br> - New error kind untyped-import added to detect missing Django stubs. This error is ignored by default; see the configuration docs for how to enable it. <br><br> - Improved Pydantic documentation to explicitly list supported features. |
We closed 10 bug issues this release 👏
__bool__ check not working properly with unionsStrEnum imports not working properlyunbound-name errors erroneously thrown in try, except blockssite-packages directory contains a large number of additional packagesThank-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
pip install --upgrade pyrefly==0.39.0
Upgrading the version of Pyrefly you're using or a third-party library you depend on can reveal new type errors in your code. Fixing them all at once is often unrealistic. We've written scripts to help you temporarily silence them. After upgrading, follow these steps:
pyrefly check --suppress-errorspyrefly check --remove-unused-ignoresThis will add # pyrefly: ignore comments to your code, enabling you to silence errors and return to fix them later. This can make the process of upgrading a large codebase much more manageable.
Read more about error suppressions in the Pyefly documentation
@yangdanny97, @stroxler, @connernilsen, @kinto0, @migeed-z, @arthaud, @rchen152, @tianhan0, @samwgoldman, @lolpack, @Adist319, @asukaminato0721, @fangyi-zhou, @immanuel-peter, @jvansch1, @javabster, @pawelstrzmeta, @rubmary,
Nothing published for this version
Nothing published for this version
Improved handling of deprecated dunder methods and ensured consistent error messages.
Status : ALPHA
Release date: 2025-10-21
Pyrefly 0.38.0 bundles 126 commits from 14 contributors. This release brings major improvements to typechecking, error reporting, IDE integration, and configuration flexibility, along with a host of bug fixes and performance enhancements.
| Area | What’s new |
|---|---|
| Type System | - Flow-merging now respects explicit and implicit Any, preventing catastrophic type unions in gradual codebases.<br>- Added off-by-default error for implicit Any (missing param/return annotations, empty containers).<br>- Improved handling of strict types and propagation of strictness in type aliases and class bases. |
| Error Reporting | - Diagnostics now include clickable links to error documentation.<br>- Improved error messages for Protocol & TypedDict mismatches, abstract async iterators, bad tuple subscriptions, and failed x in y checks.<br>- Renamed several error kinds for clarity (import-error → missing-import, async-error → not-async, delete-error → unsupported-delete, index-error → bad-index, match-error → bad-match, type-alias-error → invalid-type-alias).<br>- Added a severity field to JSON output. |
| IDE & LSP | - Unannotated and annotated local variables now appear in VSCode's symbol table.<br>- Inlay hints and type inference for Any/Unknown are suppressed for clarity.<br>- Module import completions and quick fixes improved.<br>- Hovering over # pyrefly: ignore now shows the error that is suppressed by that comment.<br>- Renaming files will now update imports that reference those files. |
| Performance & Config | - Faster file globbing and directory scanning.<br>- Default exclusion of hidden directories.<br>- Improved config override handling for CLI and IG commands.<br>- Added warning when running pyrefly check on ~ (home directory). |
We closed 12 bug issues this release 👏
Notable bug fixes include:
in checks.import a and from a import b.with and except blocks.--remove-unused-ignores feature.for ... else.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
pip install --upgrade pyrefly==0.38.0
Upgrading the version of Pyrefly you're using or a third-party library you depend on can reveal new type errors in your code. Fixing them all at once is often unrealistic. We've written scripts to help you temporarily silence them. After upgrading, follow these steps:
pyrefly check --suppress-errorspyrefly check --remove-unused-ignoresThis will add # pyrefly: ignore comments to your code, enabling you to silence errors and return to fix them later. This can make the process of upgrading a large codebase much more manageable.
Read more about error suppressions in the Pyrefly documentation
@arthaud, @stroxler, @yangdanny97, @abdallhfattah, @kinto0, @rchen152, @samwgoldman, @migeed-z, @connernilsen, @grievejia, @asukaminato0721, @rubmary, @Adist319, @johnvanschultz
If you have any questions or feedback, please open an issue or join the discussion on GitHub. Thank you for using Pyrefly!
Pyrefly 0.37.0 bundles 198 commits from 15 contributors. This release brings major improvements to typechecking control flow, overload resolution, Dja
Status : ALPHA
Release date: 2025-10-14
Pyrefly 0.37.0 bundles 198 commits from 15 contributors. This release brings major improvements to typechecking control flow, overload resolution, Django/enum support, and more.
| Area | What’s new |
|---|---|
| Control Flow & Type Narrowing | Improve type narrowing across if/else, match, boolean ops, and loops. This enables more precise type inference and fixes several long-standing false positives and negatives. |
| Overload Resolution | Fully implemented the Python typing spec for overload call evaluation, including argument type expansion for unions, bools, enums, tuples, and type. Overloads are now filtered by argument count and variadic-ness, with better error messages and performance. |
| Django & Enum Support | Enhanced Django model field type inference, improved enum attribute handling (including Django enums), and fixed bugs with auto(), Choices, and mixed-in enum data types. |
| LSP & Editor Features | Added inlay hints for function argument names, docstrings for attribute and variable completions, and improved workspace folder detection for LSP clients. |
We closed 12 bug issues this release 👏
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
pip install --upgrade pyrefly==0.37.0
Upgrading the version of Pyrefly you're using or a third-party library you depend on can reveal new type errors in your code. Fixing them all at once is often unrealistic. We've written scripts to help you temporarily silence them. After upgrading, follow these steps:
pyrefly check --suppress-errorspyrefly check --remove-unused-ignoresThis will add # pyrefly: ignore comments to your code, enabling you to silence errors and return to fix them later. This can make the process of upgrading a large codebase much more manageable.
Read more about error suppressions in the Pyrefly documentation
@stroxler, @yangdanny97, @arthaud, @connernilsen, @rchen152, @migeed-z, @grievejia, @fangyi-zhou, @kinto0, @fatelei, @ndmitchell, @brosenfeld, @dtolnay, @John Van Schultz
Thank you to everyone who contributed code, bug reports, and feedback!
Full changelog: Comparing 0.36.0...0.37.0
Nothing published for this version
Nothing published for this version
Pyrefly v0.36.0 bundles 150 commits from 23 contributors . This release brings major improvements to performance, type checking, and Pydantic/Django s
<html><head></head><body><h1>Pyrefly v0.36.0</h1> <p><strong>Status : ALPHA</strong> </p> <p><em>Release date: 2025-10-06</em></p> <p>Pyrefly v0.36.0 bundles <strong>150 commits</strong> from <strong>23 contributors</strong>. This release brings major improvements to performance, type checking, and Pydantic/Django support, along with numerous bug fixes and a brand new baseline feature.</p> <hr> <h2 id="newimproved">✨ New & Improved</h2>
| Area | What’s new |
|---|---|
| Performance | With #360 solved, Pyrefly is much faster on projects & environments with a large number of dependencies. |
| Baseline Feature | A new experimental baseline mechanism to store existing errors in a separate file. See the docs for more info. |
| Control Flow & Type Narrowing | Major improvements to how we model control flow and type narrowing, reducing false-positive errors. Builtin types can now be narrowed to literals in more situations. |
| LiteralString | Added support for LiteralString in format(), join(), and replace() methods. |
| Pydantic | Enhancements and bug fixes were made to the experimental Pydantic support released last month. Pydantic's docs now contains documentation for how to use Pyrefly with Pydantic! |
| Django | Progress on experimental support for Django fields and enums. |
| IDE | Bug fixes for auto-import quick fix, improved hover info format to improve readability, reduce clutter, and enable syntax highlighting for function types. |
| Sandbox | Browser sandbox now supports Python stub files (.pyi). |
<hr> <h2 id="bugfixes">🐛 Bug Fixes</h2> <p>We closed 20 bug issues this release 👏</p>
#264,#360,#528,#657,#683,#778,#790,#812,#969,#1009,#1022,#1042,#1088,#1162,#1198,#1210,#1218,#1227,#1228,#1235
<p>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 <a href="https://github.com/facebook/pyrefly/issues">here</a></p> <hr> <h2 id="upgrade">📦 Upgrade</h2> <pre><code class="bash language-bash">pip install --upgrade pyrefly==0.36.0 </code></pre> <h3 id="howtosafelyupgradeyourcodebase">How to safely upgrade your codebase</h3> <p>Upgrading the version of Pyrefly you're using or a third-party library you depend on can reveal new type errors in your code. Fixing them all at once is often unrealistic. We've written scripts to help you temporarily silence them. After upgrading, follow these steps:</p> <ol> <li><code>pyrefly check --suppress-errors</code> </li> <li>run your code formatter of choice </li> <li><code>pyrefly check --remove-unused-ignores</code> </li> <li>Repeat until you achieve a clean formatting run and a clean type check.</li> </ol> <p>This will add <code># pyrefly: ignore</code> comments to your code, enabling you to silence errors and return to fix them later. This can make the process of upgrading a large codebase much more manageable.</p> <p>Read more about error suppressions in the <a href="https://pyrefly.org/en/docs/error-suppressions/">Pyrefly documentation</a></p> <hr> <h2 id="contributorsthisrelease">🖊️ Contributors this release</h2> <p>@stroxler, @arthaud, @samwgoldman, @connernilsen, @migeed-z, @rchen152, @grievejia, @ndmitchell, @yangdanny97, @AryanBagade, @rubmary, @cjlongoria, @simonhollis, @MarcoGorelli, @mohesham88, @Viicos, @Adist319, @airvzxf, @BrianRosenfeld, @IvanLoskutov, @ahornby, @kinto0</p> <hr> <p><a href="https://github.com/facebook/pyrefly/compare/0.35.0%E2%80%A60.36.0#js-repo-pjax-container">Skip to content</a></p> <hr> <p><strong>If you need more details on any change, see the <a href="https://github.com/facebook/pyrefly/compare/0.35.0%E2%80%A60.36.0">full commit log</a>.</strong></p></body></html>
| Security | - upgraded mdbook crate to 0.4.52 to resolve vulnerability with ammonia dependency |
Status : ALPHA
Release date: 29 September 2025
Pyrefly v0.35.0 bundles 226 commits from 18 contributors.
| Area | What’s new |
|---|---|
| Configuration | - Improved config finding, preferring Pyrefly configurations in any parent directory to project root marker files. pyproject.toml files are now only considered configurations when a [tool.pyrefly] section is present, otherwise, they are root marker files. |
| Build systems | - Continued work on build system support, primarily Buck. Look out for further updates coming soon! |
| Error messages and suppressions | - Improved reveal_type/assert_type error messages to suggest importing from typing when needed, rather than a generic “could not find name” error message <br><br>- New error kind introduced: inconsistent-overload. This gives overload consistency errors a separate error kind from other invalid overload errors so that users can turn off consistency checks if they wish. suppress-error command now has optional --same-line argument for easier bulk suppression of errors. Instead of adding pyrefly ignore comments on the line above, this flag adds the comment on the same line as where the error is. |
| Security | - upgraded mdbook crate to 0.4.52 to resolve vulnerability with ammonia dependency |
| Third party package support | - Improved handling of optional Pydantic fields (if they are optional we should not require them) <br><br>- Foundational work to support Django enums |
We closed 11 bug issues this release 👏
type(x) returning the wrong thingSession context manager from SQL Alchemy. Fixing this issue brings us one step closer to Pyrefly being full usable SQL Alchemy (follow progress here)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
pip install --upgrade pyrefly==0.35.0
Upgrading the version of Pyrefly you're using or a third-party library you depend on can reveal new type errors in your code. Fixing them all at once is often unrealistic. We've written scripts to help you temporarily silence them. After upgrading, follow these steps:
pyrefly check --suppress-errorspyrefly check --remove-unused-ignoresThis will add # pyrefly: ignore comments to your code, enabling you to silence errors and return to fix them later. This can make the process of upgrading a large codebase much more manageable.
Read more about error suppressions in the Pyefly documentation
@javabster, @samwgoldman, @grievejia, @kinto0, @rchen152 , @yangdanny97, @tianhan0, @stroxler, @SamChou19815, Carlos Fernandez, @cjlongoria, @connernilsen, @maggiemoss, @arthaud, @mohesham88, @VladimirMakaev, @migeed-z
- IDE autocomplete now displays if a method or function is deprecated -IDE autocomplete now escapes single quotes (’’) for autocomplete |
Status : ALPHA
Release date: 22 September 2025
Pyrefly v0.34.0 bundles 180 commits from 22 contributors.
| Area | What’s new |
|---|---|
| Type Parameter Handling | - Significant refactoring of internal logic for handling uninitialised variables, resolving multiple bugs in the process <br><br>- Support added for referring to imported legacy TypeVars by their fully qualified name (see example in sandbox) <br><br>- Support added for implementing protocols with generic methods. |
| IDE | - IDE logic has been refactored to limit concurrent recheck and find-references tasks, preventing excessive thread spawning under heavy workload and improving overall IDE responsiveness. <br><br>- IDE autocomplete now displays if a method or function is deprecated<br><br>-IDE autocomplete now escapes single quotes (’’) for autocomplete |
| Pyrefly Configs | - Users can now use negation when setting replace-imports-with-any . Eg. replace-imports-with-any: ["!sympy.printer", "sympy.*"] will replace any sympy imports with Any EXCEPT for sympy printer imports |
| Error Messaging | <br>- Improved how overload signatures in error messages are displayed to avoid printing confusing upper bounds of TypeVars |
| Documentation | <br>- IDE documentation updated to include Jupyter Lab information and improved inlay hint instructions. |
We closed 21 bug issues this release 👏
abstractmethod decorated functions issue caused literal types in signatures to be promoted incorrectlyTypeVars: #1050, #912, #129--watch CLI command now works again!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
pip install --upgrade pyrefly==0.34.0
Upgrading the version of Pyrefly you're using or a third-party library you depend on can reveal new type errors in your code. Fixing them all at once is often unrealistic. We've written scripts to help you temporarily silence them. After upgrading, follow these steps:
pyrefly check --suppress-errorspyrefly check --remove-unused-ignoresThis will add \# pyrefly: ignore comments to your code, enabling you to silence errors and return to fix them later. This can make the process of upgrading a large codebase much more manageable.
Read more about error suppressions in the Pyefly documentation
@rchen152, @tianhan0, @ndmitchell, @yangdanny97, @stroxler, @arthaud, @SamChou19815, @grievejia, @javabster, @connernilsen, @cooperlees , @dluo, @dtolnay, @fangyi-zhou, @kinto0, @maggiemoss, Paul Iatchenii, @samwgoldman, @sandeshbhusal, @VladimirMakaev, @migeed-z
Nothing published for this version
Status : ALPHA *Release date: 15 September 2025*
Status : ALPHA
Release date: 15 September 2025
Pyrefly v0.33.0 bundles 117 commits from 21 contributors
| Area | What’s new |
|---|---|
| Type Checker Behavior | - Pyrefly now distinguishes between Any as a value and as a type, preventing incorrect attribute access and constructor calls on Any values. For example, when Any (the value) is used as an attribute base or call target pyrefly will now error if you try to access attributes that are not defined on type. <br>- Basic support added for TypeAliasType <br> Experimental support for Pydantic now available! <br>- Type error messages by default now print paths relative to working directory (as opposed to absolute path) |
| IDE improvements | - Kwarg completion now supports literals and unions of literals (requested feature) <br>- A new "typeServer/getSupportedProtocol" request handler included to fetch TSP version information |
| Website and Documentation | - The sandbox feature on the website has been upgraded! It can now deal with multiple files, allowing users to try out Pyrefly with cross-file imports. Give it a go here! <br>- New documentation guide on experimental Pydantic support, read it here <br>- New editable installs section in documentation, detailing the nuances of working with editable dependencies. Read it here. |
We closed 4 bug issues this release 👏
list[Self]bad-override error split into 2 separate error codes for type and name differences in argumentsThank-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
pip install --upgrade pyrefly==0.33.0
Upgrading the version of Pyrefly you're using or a third-party library you depend on can reveal new type errors in your code. Fixing them all at once is often unrealistic. We've written scripts to help you temporarily silence them. After upgrading, follow these steps:
pyrefly check --suppress-errorspyrefly check --remove-unused-ignoresThis will add # pyrefly: ignore comments to your code, enabling you to silence errors and return to fix them later. This can make the process of upgrading a large codebase much more manageable.
Read more about error suppressions in the [Pyefly documentation](https://pyrefly.org/en/docs/error-suppressions/)
@javabster, @stroxler, @grievejia, @ndmitchell, @fangyi-zhou, @samwgoldman, @rchen152, @kinto0, @connernilsen, @AryanBagade, Brian Rosenfeld, Carlos Fernandez, @yangdanny97, @hashiranhar, @IDrokin117, @maggiemoss, @rchiodo, @VladimirMakaev, @migeed-z
- The tracing-subscriber crate was updated from 0.3.19 to 0.3.20 to fix RUSTSEC-2025-0055, addressing a vulnerability related to ANSI escape sequence…
Status : ALPHA
Release date: 08 September 2025
Pyrefly v0.32.0 bundles 70 commits from 18 contributors
With this release type errors are now disabled by default in IDE when there is no config present ( in pyrefly.toml or pyproject.toml). This change was made based on feedback that displaying type errors by default in the IDE (i.e. red squiggles) was a nuisance for new users, especially those looking only for language services. Users are still able to enable type checking without a configuration file if they wish by updating their config (either in their pyproject.toml, pyrefly.toml or VSCode settings):
# to enable type errors
"python.pyrefly.displayTypeErrors": "force-on"
| Area | What’s new |
|---|---|
| Type Checker Behavior | - Implicit return validation is now performed even when untyped-def-behavior is set to check-and-infer-return-any for functions with explicit return annotations. This fixes a conflation issue where return type inference being disabled also disabled implicit return validation. <br><br>- Improved handling of calls on type[...] including cls (typed as type[Self]). <br><br>- Deprecation warnings are now emitted when a deprecated function is referred to, not just called. Scoping for class fields in nested scopes is now correctly handled. |
| IDE Integration | - Type errors now disabled by default in IDE (see details above). <br><br>- Users can now see in their IDE status bar whether the current file has type errors enabled/disabled <br><br>- Improved hover for Union types, so hover display now merges identical elements. |
| Build Systems & Security | - Further improvements made to emulate Buck’s build system file mappings within Pyrefly. This improves Pyrefly's integration with various build systems in OSS and IDEs, though build system support is still in progress. <br><br>- The tracing-subscriber crate was updated from 0.3.19 to 0.3.20 to fix RUSTSEC-2025-0055, addressing a vulnerability related to ANSI escape sequence injection attacks in logs. |
We’ve closed 10 bug issues since our last minor release 👏
LiteralThank-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
pip install --upgrade pyrefly==0.32.0
Upgrading the version of Pyrefly you're using or a third-party library you depend on can reveal new type errors in your code. Fixing them all at once is often unrealistic. We've written scripts to help you temporarily silence them. After upgrading, follow these steps:
pyrefly check --suppress-errorspyrefly check --remove-unused-ignoresThis will add # pyrefly: ignore comments to your code, enabling you to silence errors and return to fix them later. This can make the process of upgrading a large codebase much more manageable.
Read more about error suppressions in the Pyefly documentation
@rchen152, @dtolnay, @kinto0, @samwgoldman, @SamChou19815, @grievejia, @migeed-z, @yangdanny97, @arthaud, @tianhan0, @AryanBagade, @asukaminato0721, Carlos Fernandez, @connernilsen , @fangyi-zhou , @hashiranhar, @VladimirMakaev
Nothing published for this version
Status : ALPHA *Release date: 02 September 2025*
Status : ALPHA
Release date: 02 September 2025
Pyrefly v0.31.0 bundles 69 commits from 19 contributors
| Area | What’s new |
|---|---|
| PEP 728 support | - extra_items is now fully supported, with these changes support for PEP 728 is now complete! 🚀 |
| LSP Features | - Introduced Pylance config python.analysis.importFormat, with possible values ”absolute” and ”relative”. <br><br> - The default "absolute" maintains the current behavior, while "relative" enables importing modules using relative paths server name and version string now returned during LSP initialisation, useful for LSP clients for debugging/logging. <br> |
| Type Narrowing | - Improved narrowing for getattr(...) Narrow hasattr with string literals to Any if the attribute does not already exist |
| Inference & autocomplete | - Improved inference for self annotation: inferred to be type[Self] when decorated with classproperty or lazy_classproperty. <br><br> - Improved autocomplete for imports with addition of import keywords. (Previously from x imp… would autocomplete to from x import imp) <br> |
| Build System Integration | - Standalone pre-commit hook now available, see updated docs here <br><br>- Refactored Buck build functionality into a new pyrefly_build crate. This does not involve functional changes but lays the groundwork for future work to enable Pyrefly to work more effectively with various build systems in both OSS and IDE environments. |
| Conformance | - Pyrefly has now been added to the conformance test suite, enabling users to compare behaviour of static type checkers against expectations defined in the Python typing specification |
We closed 12 bug issues this release 👏
type[T].__new____all__ mutation without definitionunittest.main()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
pip install --upgrade pyrefly==0.31.0
Upgrading the version of Pyrefly you're using or a third-party library you depend on can reveal new type errors in your code. Fixing them all at once is often unrealistic. We've written scripts to help you temporarily silence them. After upgrading, follow these steps:
pyrefly check --suppress-errorspyrefly check --remove-unused-ignoresThis will add # pyrefly: ignore comments to your code, enabling you to silence errors and return to fix them later. This can make the process of upgrading a large codebase much more manageable.
Read more about error suppressions in the Pyefly documentation
@lolpack, @aahanaggarwal, @donsbot, @kinto0, @stroxler, @rchen152, @grievejia, @brosenfeld, @yangdanny97, @SamChou19815, @migeed-z, @connernilsen, @tianhan0, @javabster, @PIG208, @samwgoldman, @IDrokin117, @maggiemoss, @arthaud , @melvinhe, @rchiodo, @VladimirMakaev
Status : ALPHA *Release date: 25 August 2025*
Status : ALPHA
Release date: 25 August 2025
pyrefly v0.30.0 bundles 195 commits from 20 contributors 👏
| Area | What’s new |
|---|---|
| Completions | - Enhanced completions for super with multiple inheritance implemented completion for unions <br><br>- When the attribute base is a union, suggestions are now combined from every branch of the union. This might lead to errors, but it's more helpful to make the suggestion |
| Type System | - added a configuration flag to turn off "infer from first use" behavior. Inferring types from first usage is valuable for catching bugs but it can lead to false positives so this new flag allows users to turn it off. Turning it off behaves like pyright, leaving it on behaves like mypy. <br><br>- implicit attribute definition errors are now turned off by default. These errors were raised when an attribute is only declared in a non-constructor method, but it can be a source of false positives in dynamic code. <br><br>- When type args are not explicitly set, push the class type params into methods (matches mypy approach, differs from pyright that implicitly instantiates with Any/default) ensured qualified names are printed for enums as part of unions. <br><br>- Enable creation of empty enums and named tuples using functional syntax Default excludes now align with Pylance (incl. Node_modules, __pycache__ and *venv) |
We closed 11 bug issues this release 👏
Never, rather than Anytorch.zeros moduleSelfThank-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
pip install --upgrade pyrefly==0.30
Upgrading the version of Pyrefly you're using or a third-party library you depend on can reveal new type errors in your code. Fixing them all at once is often unrealistic. We've written scripts to help you temporarily silence them. After upgrading, follow these steps:
pyrefly check --suppress-errorspyrefly check --remove-unused-ignoresThis will add # pyrefly: ignore comments to your code, enabling you to silence errors and return to fix them later. This can make the process of upgrading a large codebase much more manageable.
Read more about error suppressions in the Pyefly documentation
@javabster, @capickett, Carlos Fernandez, @connernilsen , @yangdanny97, @grievejia, @kinto0, @arthaud, @prasannavenkateshgit, @rchen152, @rchiodo, @rubmary, @samwgoldman, @SamChou19815, @sargun, @stroxler, @VladimirMakaev, @migeed-z, @LycheeBay
Nothing published for this version
Nothing published for this version
Status : ALPHA Release date: 18 August 2025
Status : ALPHA Release date: 18 August 2025
Pyrefly 0.29 bundles 192 commits from 23 contributors. This release focuses on improving the type checker's behavior, particularly around handling Any and LiteralString, enhancing LSP features like "go to definition" and hover, and various internal refactors for maintainability.
| Area | What’s new |
|---|---|
| Type Checker Behavior | - The type checker now treats return outside of a function, and await, async for, async with outside of async function definitions as syntax errors.<br>- Support special LiteralString behavior for methods like str.join and str.format.<br>- Any handling for super().__init__ and super().__new__ calls have been improved.<br>- typing.Self is now correctly substituted inside method bodies.<br>- Using the new PEP 728 keywords (closed, extra_items) in TypedDict no longer throws type errors.<br>- Full support for PEP 728 is coming soon. |
| LSP Features | - "Go to definition" now prioritizes .py files over .pyi for a more useful real implementation view.<br>- Docstrings now appear for standard library functions.<br>- Display ranges for generator expressions have been adjusted for consistency with Python AST. |
We closed 21 bug issues this release 👏
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
pip install --upgrade pyrefly==0.29
Upgrading the version of Pyrefly you're using or a third-party library you depend on can reveal new type errors in your code. Fixing them all at once is often unrealistic. We've written scripts to help you temporarily silence them. After upgrading, follow these steps:
1. pyrefly check --suppress-errors
2. run your code formatter of choice
3. pyrefly check --remove-unused-ignores
4. Repeat until you achieve a clean formatting run and a clean type check.
This will add # pyrefly: ignore comments to your code, enabling you to silence errors and return to fix them later. This can make the process of upgrading a large codebase much more manageable.
Read more about error suppressions in the [Pyefly documentation](https://pyrefly.org/en/docs/error-suppressions/)
Aahan Aggarwal, Abby Mitchell, Conner Nilsen, Danny Yang, David Luo, Fangyi Zhou, James Gill, Kc Balusu, Kyle Into, LyricalToxic, Maggie Moss, Maxime Arthaud, Neil Mitchell, Rebecca Chen, Rubmary Rojas, Sam Goldman, Sam Zhou, Steven Troxler, Vladimir Matveev, Xavi Simpson, Zach Riser, Zeina Migeed
Nothing published for this version
pyrefly v0.28 bundles 119 commits from 20 contributors. This release introduces new features related to function and class metadata, improves class ba
pyrefly v0.28 bundles 119 commits from 20 contributors. This release introduces new features related to function and class metadata, improves class base type calculations, enhances import finding logic, and addresses several bug fixes related to LSP behavior, error reporting, and type inference.
| Area | What’s new |
|---|---|
| Type Checker | Export function information including names and locations, enabling Pysa to use pyrefly's function list for consistency.Add parent information to functions and classes to facilitate unique fully qualified name generation in Pysa.Introduce function flags (e.g., is_overload, is_classmethod) for richer metadata. |
| Class Metadata & Type Inference | Support Pydantic metadata by adding it to class metadata. |
| Import Resolution | Implement preference for .pyi files over .py over .pyc files in import finding, even if the import occurs later in the includes list. This is particularly useful for go-to-definition in the LSP, preferring implementation files over interfaces. |
| Error Reporting | Add a check for unused coroutines, similar to pyright and mypy, to flag coroutines that are not awaited, passed to a function, or assigned to a variable. |
| LSP | Improvements to LSP shutdown behavior, ensuring the language server exits gracefully on connection close and removing previous workarounds for exit notifications. |
| Configuration | Add support for ignore files (.gitignore, .ignore, .git/exclude) with a config (use-ignore-files) to enable and disable their use. |
| Website Sandbox | Added a dropdown to select the Python version in the sandbox, allowing users to test against different Python versions (3.8-3.12). |
If you are using Pyrefly in your CI processes, the following changes may cause your CI to break when upgrading to the new version of Pyrefly
To upgrade to the latest version of Pyrelfy, run the following terminal command:
pip install --upgrade pyrefly==0.28
Thank-you to all our wonderful contributors!
Aaron Pollack, Abby Mitchell, Adist319, Carlos Fernandez, Conner Nilsen, Danny Yang, Doğaç Eldenk, Fangyi Zhou, Jia Chen, Kyle Into, Maggie Moss, Maxime Arthaud, Neil Mitchell, Rebecca Chen, Rubmary Rojas, Sam Goldman, Sam Zhou, Xavi Simpson, Zeina Migeed
Nothing published for this version
Nothing published for this version
Pyrefly 0.27.0 bundles 212 commits from 20 contributors
Status: ALPHA
Release date: 2025-08-04
Pyrefly 0.27.0 bundles 212 commits from 20 contributors
Typechecking
except clauses.x: int) are no longer always assumed uninitialized.UsageLink ranges by using YieldLink for yield calculations.__path__ to MutableSequence.IDE
__new__/__init__ calls are treated as overloads.cls arguments are removed from completion and signature help.displayName in package.json.Misc.
pip install --upgrade pyrefly==0.27.0
@stroxler @fangyi-zhou @rubmary @kinto0 @grievejia @rchen152 @ndmitchell @aahanaggarwal @javabster @connernilsen @migeed-z @SamChou19815 @yangdanny97
Full Changelog: https://github.com/facebook/pyrefly/compare/0.26.0..0.27.0
Nothing published for this version
Warn on calling deprecated overloads.
Status: ALPHA
Release date: 2025-07-28
Pyrefly 0.26.0 bundles 179 commits from 24 contributors
pip install --upgrade pyrefly==0.26.0
@grievejia @samwgoldman @stroxler @rchen152 @fangyi-zhou @ndmitchell @rubmary @kinto0 @arthaud @lolpack @migeed-z @darricklaidin @connernilsen @regexyl @danielocfb @WeixiMa @MaggieMoss @yangdanny97
Full Changelog: https://github.com/facebook/pyrefly/compare/0.25.0..0.26.0
Nothing published for this version
Warn on deprecated method calls and overloaded calls.
Status: ALPHA
Release date: 2025-07-22
Pyrefly 0.25.0 bundles 307 commits from 19 contributors
typing.Self.ignore_missing_imports in Pyrefly config.TypedDict initialization & makeself positional-only.pip install --upgrade pyrefly==0.25.0
@rchen152 @stroxler @ndmitchell @yangdanny97 @arthaud @kinto0 @connernilsen @SamChou19815 @rubmary @dluo @migeed-z @samwgoldman @fangyi-zhou @LyricalToxic @melvinhe @grievejia @lolpack
Full Changelog: https://github.com/facebook/pyrefly/compare/0.24.2...0.25.0
Pyrefly 0.24.2 bundles 290 commits from 26 contributors
Status: ALPHA
Release date: 2025-07-15
Pyrefly 0.24.2 bundles 290 commits from 26 contributors
type() and bool() for narrowing, and the behavior for match statements w/ class patternsdataclass_transform--error, --warn, --ignore) and improved error message clarity.float * bool and complex * bool.--typeshed-path CLI flag for custom typeshed modifications and improved config handling logic.pip install --upgrade pyrefly==0.24.2
@ndmitchell, @yangdanny97, @stroxler, @rchen152, @migeed-z, @connernilsen, @dluo, @MaggieMoss, @rubmary, @xaskii, @kinto0, @grievejia, @SamChou19815, @melvinhe, @lianne, @krikera, @dluo, @Abel981, @fangyi-zhou, @Alex-Aron, @zpao, @slawlor, @diliop, @arnav-jain1, @samwgoldman
Nothing published for this version
Nothing published for this version
Nothing published for this version
Status: ALPHA *Release date: 2025-07-07*
Status: ALPHA
Release date: 2025-07-07
Pyrefly 0.23.0 bundles 186 commits from 24 contributors. This release introduces significant improvements in type checking, configuration handling, and error management.
pip install --upgrade pyrefly==0.23.0
@aahanaggarwal, @yangdanny97, @stroxler, @rchen152, @dluo, @ndmitchell, @connernilsen, @xaskii, @melvinhe, @migeed-z, @TheRustyPickle, @arnav-jain1, @InSyncWithFoo, @rubmary, @arthaud, @samwgoldman, @grievejia, @danielocfb-test, @MaggieMoss, @DavidTolnay, @JunHao, @darricklaidin, @kinto0
Nothing published for this version
Nothing published for this version
Pyrefly 0.22.0 bundles 216 commits from 23 contributors. This release includes significant improvements in type checking and performance enhancements.
Status : ALPHA
Release date: 30 Jun 2025
Pyrefly 0.22.0 bundles 216 commits from 23 contributors. This release includes significant improvements in type checking and performance enhancements.
| Area | What’s new |
|---|---|
| Type Checking | Implemented support for functools.total_ordering, allowing automatic generation of rich comparison methods. |
| IDE / LSP | Added support for textDocument/rename and textDocument/prepareRename in LSP. |
| Configuration | Introduced CLI flag for --conda-environment to manage Python environments more effectively. |
NamedTuple field ordering and TypedDict method synthesis.type[tuple] can now be used as a tuple constructorstr, not just literals.pip install --upgrade pyrefly==0.22.0
@Adist319, @adsi7698, @bigfootjon, @connernilsen, @CookieComputing, @dluo, @facebook-github-bot, @fangyi-zhou, @grievejia, @iwakitakuma33, @kinto0, @krathul, @melvinhe, @migeed-z, @ndmitchell, @pt2302, @rchen152, @SamChou19815, @stroxler, @vagabond-0, @xaskii, @yangdanny97, @zsol
https://github.com/facebook/pyrefly/releases
Full Changelog: https://github.com/facebook/pyrefly/compare/0.21.0...0.22.0
Status : ALPHA *Release date: 23 June 2025*
Status : ALPHA
Release date: 23 June 2025
Pyrefly 0.21.0 delivers 176 commits from 20 contributors. We now support a number of highly requested features such as Semantic Highlighting, Signature Help, Document Highlights and Auto Import Completions! Follow along for more LSP functionality #344 ahead of our V1 release.
| Area | What’s new |
|---|---|
| IDE / LSP (Issue #344) | • Richer semantic highlighting – method calls, property accesses, and the expressions nested in them now get distinct token types, so editors like VS Code underline exactly what you expect (#344).<br>• Added the defaultLibrary semantic-token modifier for symbols originating from builtins, typing, or typing_extensions; makes built-ins stand out in both dark/light themes. |
| Diagnostics | • Detailed override errors – incompatibilities between a subclass attribute and its parent now explain why they don’t match (“read-write vs read-only”, “int vs str”, etc.) on a second indented line. |
| Type-system smarts | • InitVar fields in @dataclass definitions are no longer treated as instance attributes, eliminating false “missing attribute” errors (PR [#437]). <br> • Full support for Variance Inference in Generic Classes with PEP 695 |
| Performance | • A pathological Callable | … union test that once blew up exponentially now checks in linear time. |
defaultLibrary modifier.pip install --upgrade pyrefly==0.21.0
@yangdanny97 @Adist319 @grievejia @connernilsen @migeed-z @ndmitchell @xl4624 @stroxler @rchen152 @TheRustyPickle @dluo @kinto0 @pt2302 @SamChou19815 @ducdetronquito @xaskii @Alex-Aron @hugovk @grantlouisherman @rubmary
Your coding agent can read these notes before it upgrades. Set up the MCP server →