release_notes/release-notes-v0.63.0.md
Status : BETA Release date: April 27, 2026
Pyrefly v0.63.0 bundles 129 commits from 26 contributors.
| Area | What's new |
|---|---|
| Type Checking | - Enum member types are preserved even when the metaclass conflicts with EnumMeta, reducing noise in projects using custom metaclasses with enums. |
Constrained TypeVars no longer get pinned to a specific constraint when matched against Any, preventing false positives.
Self/cls annotations on all methods and classmethods are validated to ensure they reference the defining class or a superclass, catching more annotation errors. |
| Language Server | - The LSP now reports unused-ignore diagnostics when configured to do so, helping you clean up stale suppression comments.
Completions for attribute override definitions are available in class bodies, surfacing base-class members filtered by fuzzy match.
The LSP server no longer crashes on Jupyter notebook cell URIs (vscode-notebook-cell:), with full support for resolving notebook cell paths and position offsets.
Workspace symbol search uses the correct location for re-exported symbols, preventing panics on multi-byte UTF-8 characters.
Inlay hints are clickable for built-in types like tuple, dict, and str, enabling go-to-definition directly from hint overlays. |
| Error Messages | - A new unnecessary-type-conversion lint warns when str(), int(), or float() is called on an argument that is already of that exact type. |
| Reporting & Coverage | - Public symbol filtering is available via pyrefly report --public-only, using cross-module tracing to report only public symbols. |
| Performance | - TypedDict subset checks are now cached on the Solver, reducing CPU time by ~5.3x and wall time by ~6.7x on pydantic (from 9.5s to 1.4s). |
| Configuration & Initialization | - pyrefly init supports --dry-run for safe previews without writing files, and --print-config for machine-readable TOML output. |
We closed 9 bug issues this release 👏
pyrefly report by incorrectly counting their trivial -> None return types.pyrefly report were not deduplicated, causing parameters and callable signatures to be counted multiple times and inflate coverage metrics.*) for direct TypeVarTuple arguments, causing Shape to render bare instead of *Shape.bad-assignment and bad-return errors.pyrefly report by being counted as typable entities.unnecessary-type-conversion lint that warns when str(), int(), or float() is called on an argument that is already of that exact type, making the conversion redundant.pyrefly report when @no_type_check decorator was used, caused by a missing key lookup for skipped parameter annotations.await expression already has await but produces a coroutine due to an incorrect return type annotation on the function definition.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.63.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:
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 Pyrefly documentation
@rchen152, @migeed-z, @avikchaudhuri, @grievejia, @kinto0, @jorenham, @jvansch1, generatedunixname2066905484085733, @stroxler, @tejasreddyvepala, David Tolnay, @fangyi-zhou, @asukaminato0721, @lolpack, @NathanTempest, @connernilsen, @zbowling, @rubmary, @rexledesma, Anass Al-Wohoush, @javabster, @ABohra3, generatedunixname89002005232357, @tkaleas, @knQzx, generatedunixname89002005307016
Please note: These release notes summarize major updates and features. For brevity, not all individual commits are listed. Highlights from patch release changes that were shipped after the previous minor release are incorporated here as well.