release_notes/release_notes_archived.md
Combined release notes for all minor versions of Pyrefly from v0.28.0 to v0.57.0.
Status: ALPHA Release date: 11 August 2025
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:
pyrefly autotype renamed to pyrefly infer to reduce confusion with existing tools.pip install --upgrade pyrefly==0.28
Aaron Pollack, Abby Mitchell, Adist319, Carlos Fernandez, Conner Nilsen, Danny Yang, Dogac 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
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. Support special LiteralString behavior for methods like str.join and str.format. Any handling for super().__init__ and super().__new__ calls have been improved. typing.Self is now correctly substituted inside method bodies. Using the new PEP 728 keywords (closed, extra_items) in TypedDict no longer throws type errors. 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. Docstrings now appear for standard library functions. Display ranges for generator expressions have been adjusted for consistency with Python AST. |
We closed 21 bug issues this release
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:
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
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
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. 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. 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. 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. 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 moduleSelfpip install --upgrade pyrefly==0.30
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.
Read more about error suppressions in the Pyrefly documentation
@javabster, @capickett, Carlos Fernandez, @connernilsen, @yangdanny97, @grievejia, @kinto0, @arthaud, @prasannavenkateshgit, @rchen152, @rchiodo, @rubmary, @samwgoldman, @SamChou19815, @sargun, @stroxler, @VladimirMakaev, @migeed-z, @LycheeBay
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". 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. |
| 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. Improved autocomplete for imports with addition of import keywords. (Previously from x imp... would autocomplete to from x import imp) |
| Build System Integration | Standalone pre-commit hook now available, see updated docs here. 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()pip install --upgrade pyrefly==0.31.0
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.
Read more about error suppressions in the Pyrefly 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: 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. Improved handling of calls on type[...] including cls (typed as type[Self]). 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). Users can now see in their IDE status bar whether the current file has type errors enabled/disabled. 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. 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
Literalpip install --upgrade pyrefly==0.32.0
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.
Read more about error suppressions in the Pyrefly documentation
@rchen152, @dtolnay, @kinto0, @samwgoldman, @SamChou19815, @grievejia, @migeed-z, @yangdanny97, @arthaud, @tianhan0, @AryanBagade, @asukaminato0721, Carlos Fernandez, @connernilsen, @fangyi-zhou, @hashiranhar, @VladimirMakaev
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. Basic support added for TypeAliasType. Experimental support for Pydantic now available! 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). 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! New documentation guide on experimental Pydantic support, read it here. 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 argumentspip install --upgrade pyrefly==0.33.0
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.
Read more about error suppressions in the Pyrefly documentation
@javabster, @stroxler, @grievejia, @ndmitchell, @fangyi-zhou, @samwgoldman, @rchen152, @kinto0, @connernilsen, @AryanBagade, Brian Rosenfeld, Carlos Fernandez, @yangdanny97, @hashiranhar, @IDrokin117, @maggiemoss, @rchiodo, @VladimirMakaev, @migeed-z
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. Support added for referring to imported legacy TypeVars by their fully qualified name (see example in sandbox). 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. IDE autocomplete now displays if a method or function is deprecated. 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 | Improved how overload signatures in error messages are displayed to avoid printing confusing upper bounds of TypeVars. |
| Documentation | 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!pip install --upgrade pyrefly==0.34.0
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.
Read more about error suppressions in the Pyrefly 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
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. 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). 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 fully usable with SQL Alchemy (follow progress here)pip install --upgrade pyrefly==0.35.0
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.
Read more about error suppressions in the Pyrefly documentation
@javabster, @samwgoldman, @grievejia, @kinto0, @rchen152, @yangdanny97, @tianhan0, @stroxler, @SamChou19815, Carlos Fernandez, @cjlongoria, @connernilsen, @maggiemoss, @arthaud, @mohesham88, @VladimirMakaev, @migeed-z
Status: ALPHA Release date: 06 October 2025
Pyrefly v0.36.0 bundles 150 commits from 23 contributors. This release brings major improvements to performance, type checking, and Pydantic/Django support, along with numerous bug fixes and a brand new baseline feature.
| 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). |
We closed 20 bug issues this release.
#264, #360, #528, #657, #683, #778, #790, #812, #969, #1009, #1022, #1042, #1088, #1162, #1198, #1210, #1218, #1227, #1228, #1235
pip install --upgrade pyrefly==0.36.0
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.
@stroxler, @arthaud, @samwgoldman, @connernilsen, @migeed-z, @rchen152, @grievejia, @ndmitchell, @yangdanny97, @AryanBagade, @rubmary, @cjlongoria, @simonhollis, @MarcoGorelli, @mohesham88, @Viicos, @Adist319, @airvzxf, @brianrosenfeld, @ivanloskutov, @ahornby, @kinto0
Status: ALPHA Release date: 14 October 2025
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.
pip install --upgrade pyrefly==0.37.0
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.
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
Full changelog: Comparing 0.36.0...0.37.0
Status: ALPHA Release date: 03 November 2025
Pyrefly v0.40.0 bundles 143 commits from 26 contributors.
==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.
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.
Continued work on Django support, including improved type inference for lazy enum labels.
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 union.pip install --upgrade pyrefly==0.40.0
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.
Read more about error suppressions in the Pyrefly documentation
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. 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). Improved pattern matching support for certain built-in types, better aligning with typing specification. More accurate type checking for TypedDicts with union keys. |
| Language Server | Hover cards on variables now link to built in types. Unused parameters are now flagged in IDE. Deprecated functions now suggested below non-deprecated ones in auto-completions. 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. 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 typepip install --upgrade pyrefly==0.41.0
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.
Read more about error suppressions in the Pyrefly documentation
@aaron-ang, @alokpr, @AryanBagade, @asukaminato0721, @connernilsen, @yangdanny97, @dtolnay, @kv9898, @fangyi-zhou, @grievejia, @jvansch1, @kshitijgetsac, @maggiemoss, @arthaud, @ndmitchell, @rchen152, @rubmary, @stroxler, @VladimirMakaev, @migeed-z
Status: BETA Release date: 17 November 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.
getattr(), hasattr(), and dict.get()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
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.
Read more about error suppressions in the Pyrefly 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!
Status: BETA Release date: 24 November 2025
Pyrefly v0.43.0 bundles 213 commits from 24 contributors.
inmemory schema, improving support for interactive consoles and temporary code cells in IDEs like PositronImproved 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.
--enabled-ignores command line flag and configuration option allow specifying exactly which tools' ignore comments (e.g., # pyright: ignore) pyrefly respects--error, --warn, etc., now accept comma-separated lists, making it easier to enable or disable multiple error codes at onceImproved 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 release.
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, ...]pip install --upgrade pyrefly~=0.43.0
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.
Read more about error suppressions in the Pyrefly documentation
@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
Status: BETA Release date: 03 December 2025
Pyrefly v0.44.0 bundles 163 commits from 23 contributors.
PositiveInt)Decimal type11 bug issues closed this release:
Literal[...] tooltips in docstringspip install --upgrade pyrefly==v0.44.0
pyrefly check --suppress-errorspyrefly check --remove-unused-ignoresThis adds # pyrefly: ignore comments for temporary error suppression during upgrades.
Status: BETA Release date: 08 December 2025
Pyrefly v0.45.0 bundles 146 commits from 21 contributors.
my_variuble -> my_variable)isinstance checks; Callable Enums now supportedTrue is False, reflecting support for Pyright's reportUnnecessaryComparison and Mypy's comparison-overlapTextField and othersnumba.jit and numba.njit19 bug issues closed this release:
__all__ implementationspip install --upgrade pyrefly==0.45.0
pyrefly check --suppress-errorspyrefly check --remove-unused-ignoresThis adds pyrefly: ignore comments, enabling phased error fixes.
stroxler, migeed-z, rchen152, yangdanny97, samwgoldman, connernilsen, asukaminato0721, kinto0, grievejia, arthaud, AryanBagade, lolpack, ndmitchell, gvozdvmozgu, javabster, KaranPradhan266, jvansch1, tianhan0, Owen Valentine, Vladimir Matveev
Status: BETA Release date: 15 December 2025
Pyrefly v0.46.0 bundles 125 commits from 19 contributors.
ALL_CAPS correctly highlighted as constants in VSCode and website sandboxreturn, break, continue statements exiting finally blocks14 bug issues closed, including:
__future__ imports incorrectly flagged as unusedpip install --upgrade pyrefly==v0.46.0
pyrefly check --suppress-errorspyrefly check --remove-unused-ignores19 contributors including javabster, AryanBagade, asukaminato0721, connernilsen, DanielNoord, yangdanny97, and others.
Status: BETA Release date: 05 January 2026
Pyrefly v0.47.0 bundles 207 commits from 35 contributors.
.get() operations on TypedDict objectsimport X as X and from Y import X as X now recognised as explicit re-exports, no longer flagged as unusedTypeIs calls now correctly narrow to type intersection rather than NeverFinal attributes lacking initialization on the class are now properly enforcedFinal variables across unpacking, context managers, and loopsBaseModel fields at instantiation, catching out-of-range argumentsnon-exhaustive-match error warns about incomplete match statements over Enums and literal unionsmissing-override-decorator error emitted when methods override parent class methods without the override decorator (disabled by default)34 bug issues closed this release
typing_extensions now permitted for typing module special callables_ correctly exported from custom builtins for i18n supportForall typesLiteralString and CollectiontextDocument/didClose for notebooksobject.__new__(C) type inferenceLiteral values no longer inserts redundant quotespip install --upgrade pyrefly==0.47.0
pyrefly check --suppress-errorspyrefly check --remove-unused-ignoresThis adds # pyrefly: ignore comments, enabling gradual error resolution during large codebase upgrades.
Read more in the Pyrefly documentation
35 contributors including: martindemello, samwgoldman, stroxler, ArchieBinnie, dtolnay, arthaud, zanieb, grievejia, rchen152, aleivag, and 25 others
Status: BETA Release date: 20 January 2026
Pyrefly v0.49.0 includes 231 commits from 25 contributors.
typing.Mapping now recognised as a type aliasin keyword when used in iteration contexts (for-loops and comprehensions)pydantic.dataclasses.dataclass decorator, including strict and lax mode supportyield, yield from, augmented assignment, missing imports, and missing stubs38 bug issues closed this release, including fixes for:
pip install --upgrade pyrefly==0.49.0
pyrefly check --suppress-errorspyrefly check --remove-unused-ignoresThis adds # pyrefly: ignore comments to silence errors during upgrades.
25 contributors including: samwgoldman, stroxler, diliop, ndmitchell, arthaud, and 20 others.
Status: BETA Release date: 26 January 2026
Pyrefly v0.50.0 contains 183 commits from 27 contributors.
-> None in hover and signature help# Title ----) now create hierarchical folding regions and outline symbolsa.b.c.D)reveal_type now distinguishes functions with different type variable restrictionsTypedDict using in/not in checks, including inherited keyssuppress command accepts JSON values for flexible error suppression30 bug issues were resolved, including:
__all__ no longer flagged as unusedpip install --upgrade pyrefly==0.50.0
Follow the documented upgrade process using --suppress-errors and --remove-unused-ignores flags for large codebases.
Status: BETA Release date: 02 February 2026
Pyrefly v0.51.0 bundles 162 commits from 25 contributors.
Never) for final classes and populated Enums, as they cannot be subclassedGenericAlias type, including special attributes like __origin__, __args__, and support for the pipe operatorself annotations in __init__ methods, per typing spec+) now propagates type hints to both operands, making assignments like l2: list[Base] = [A()] + [B()] work as expected21 bug issues closed this release:
Any now fall back to Any instead of reporting missing-attributeSelf is now properly bound in class body expressions--removed-unused-ignores incorrectly removed ignores from other type checkersisinstance now work correctly with unpacked tuples and type variablesTypeVars are now correctly inferred in Callable annotations without assignmentpip install --upgrade pyrefly==0.51.0
pyrefly check --suppress-errorspyrefly check --remove-unused-ignoresThis adds # pyrefly: ignore comments to silence errors for later resolution.
Read more about error suppressions in the Pyrefly documentation
rchen152, stroxler, migeed-z, kinto0, yangdanny97, arthaud, maggiemoss, connernilsen, grievejia, samwgoldman, rubmary, fangyi-zhou, AryanBagade, bluetech, ddrcoder, javabster, ndmitchell, praskr-wisdom, shayne-fletcher, tsembp, jvansch1, tianhan0, dtolnay
Status: BETA Release date: 09 February 2026 Commits: 250 from 23 contributors
Type errors and diagnostics appear in your editor after saving a file with dramatic speed improvements. Edge cases that took several seconds now complete in under 200ms through fine-grained dependency tracking and streaming diagnostics.
Initial indexing (when Pyrefly scans your project and builds its internal type map) has been optimised for speed, enabling faster access to type-aware features in large repositories.
The language server now uses 40-60% less RAM during both initial indexing and incremental type checking, allowing Pyrefly to scale to larger projects.
A critical bug causing exponential memory usage with unions of dictionary types has been resolved.
| Area | What's new |
|---|---|
| Type System | Added support for template strings (PEP 750); Type narrowing enhancements: dict.get narrowing and safer negative narrowing |
| Language Server | Automatic transformation of from ... import * statements into explicit imports; Improved auto-complete for match Literal patterns; Further support for type hierarchy; Go-to definition on __all__ entries |
13 bug issues were closed:
isinstance and type[T]mapping.get("key") returns the value type (not None)+=) when __iadd__ is missing to correctly fall back to __add__pip install --upgrade pyrefly==0.52.0
pyrefly check --suppress-errorspyrefly check --remove-unused-ignoresThis adds # pyrefly: ignore comments, enabling you to silence errors and return to fix them later.
@ndmitchell, @rchen152, @stroxler, @kinto0, @asukaminato0721, @yangdanny97, @grievejia, @migeed-z, @jvansch1, @samwgoldman, @avikchaudhuri, @maggiemoss, @arthaud, @AryanBagade, @connernilsen, @diliop, @fangyi-zhou, @javabster, @robertoaloi, @tianhan0, @dtolnay, Carlos Fernandez, Miles Conn
Status: BETA Release date: 17 February 2026 Commits: 245 from 27 contributors
Self is used in invalid locations (outside classes, static methods, metaclasses)class Foo(namedtuple("Bar", ...))numpy as np)pyrefly.toml and pyproject.toml enabling editor auto-completion and validation17 bug issues resolved, including:
yield/yield from correctly inferred as generator-returning callablesLiteral imported via try/except recognised as special form@override errorspip install --upgrade pyrefly==0.53.0
Status: BETA Release date: 23 February 2026 Commits: 93 from 18 contributors
type(X) in base class lists for metaclass expression compatibilitysys.platform and sys.version_info checksSeven bug issues closed this release, including:
pip install --upgrade pyrefly==0.54.0
pyrefly check --suppress-errorspyrefly check --remove-unused-ignoresSee Pyrefly documentation for details.
15 contributors listed, including stroxler, jvansch1, rchen152, and others.
Status: Released Release date: 03 March 2026 Commits: 166 from 27 contributors
Annotated types, treating them as base types for typing specification conformanceSelf when constructing classes using cls()os.name similar to existing sys.platform support(*args: Any, **kwargs: Any) as equivalent to gradual signature ...pyrefly report now measures type completeness and annotation completeness for functions and parameters35 bug issues closed this release, including:
unbound-name errors with NoReturnAny no longer incorrectly flagged as non-callable__all__ handling improved| operator handled correctlypip install --upgrade pyrefly==0.55.0
pyrefly check --suppress-errorspyrefly check --remove-unused-ignoresThis adds # pyrefly: ignore comments for gradual error fixing.
Status: Beta Release date: 09 March 2026 Commits: 248 from 22 contributors
Any now yield Any instead of bool, aligning with gradual typing principlesdiagnosticMode for publishing diagnostics across projectstypeServer/getPythonSearchPaths message support addedimplicit-import downgraded to warning; unreachable and redundant-condition default to warningsnon-convergent-recursion33 bug issues closed, including fixes for:
StrEnum classmethod handlingpip install --upgrade pyrefly==0.56.0
Safe upgrade process: Use --suppress-errors flag, format code, then --remove-unused-ignores to manage new type errors incrementally.
Status: Beta Release date: 16 March 2026 Commits: 116 from 17 contributors
hasattr inside loopspyrefly suppress no longer corrupts multiline f-strings/t-strings by inserting suppression comments inside the string; it now places comments above the string and also matches suppressions correctly for errors inside multiline f/t-stringsnamedtuple support with * field unpacking[tool.ruff] / [tool.mypy] / [tool.pyright], it's treated as a strong "this is a Python project root" marker, preventing parent pyrefly.toml from incorrectly shadowing it (notably improving go-to-def accuracy on some repos)We closed 24 bug issues this release:
from typing import NewType as unused, even when NewType(...) was referenced.TypedDict fields named items/values prevented access to the corresponding dict.items() / dict.values() methods via attribute lookup.functools.partial(...) results couldn't be assigned back to a Callable typed with a ParamSpec, causing a false-positive type error.Protocol parameterised by ParamSpec[...] wasn't considered compatible with an equivalent "gradual" protocol using *args: Any, **kwargs: Any.__init__ on parametrised bound methods could trigger a false-positive type error due to incorrect attribute lookup behaviour.super() calls to abstract methods that do have a concrete runtime body were incorrectly reported as missing-attribute / abstract-call errors.pip install --upgrade pyrefly==0.57.0
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.
Read more about error suppressions in the Pyrefly documentation
@stroxler, @grievejia, @yangdanny97, @migeed-z, @jvansch1, @rchen152, @asukaminato0721, @maggiemoss, @arthaud, @lolpack, @samwgoldman, @Adist319, David Tolnay, @avikchaudhuri, @rubmary, @javabster