release_notes/release-notes-v1.1.0-dev.2.md
Release date: June 10, 2026
About dev releases Dev releases (versions like
X.Y.Z-dev.N) are non-stable snapshots cut periodically from trunk. They give early adopters a chance to try in-progress features and surface issues before the next stable release, but they don't carry the same stability or compatibility guarantees as a stable release — don't pin production projects to a dev version.
Pyrefly v1.1.0-dev.2 bundles 250 commits from 37 contributors.
x: T = 0 now correctly validate their defaults against the type variable's constraints or bounds, and the default value is properly used when solving type variables in function calls.isinstance checks and binary operations now preserve the type variable while correctly narrowing to specific constraints, fixing several false positives and negatives.x.lower() where x: T with T constrained to bytes | str), the return type now correctly preserves the type variable when the method returns self's type.shape_extensions.shaped_array, including numpy.ndarray and jax.Array, not just PyTorch tensors.Literal type, the editor now suggests the valid literal values.typeServer/getExpectedType returns the contextually expected type at a cursor position (e.g., the parameter type for a call argument, the declared type for an assignment), enabling richer IDE features.from source import foo to from target import foo across the codebase..thrift files and other non-Python modules now navigates to the module file when the specific symbol can't be resolved.pyrefly coverage check command provides a user-friendly way to verify type coverage meets a threshold, with configurable output formats and fail-under percentage.__all__ in stubs more accurately, only treating imports as public re-exports when they appear in __all__ or use the as alias syntax.--output-format junit-xml option emits JUnit XML test reports, making it easier to integrate Pyrefly into CI dashboards.None-related type mismatches. When passing T | None where T is expected, the error now includes an actionable hint suggesting narrowing with is not None or widening the expected type.We closed 24 bug issues this release 👏
unknown-name errors after short-circuit boolean operations. Code like if SOMETHING_DEFINITELY_FALSE and A: no longer reports A as unknown, since it's unreachable.unknown-name false positive when a name is introduced via a walrus operator in a decorator. Names defined with := in decorator expressions are now visible after the decorated definition.x: T = 0 are now validated correctly and used when solving type variables in calls.__getitem__ resolution on type variables with constraints. Subscripting a type variable bounded by TypedDict or other subscriptable types now works correctly instead of falling back to object.__getitem__.TypedDict unions when using membership tests. Expressions like event["ph"] in ("X", "C") now correctly narrow the union to matching members.key in dict checks. When a TypedDict key is tested with in, subsequent subscript access no longer reports the key as possibly absent.from bar import func that work at runtime now resolve correctly even when a pyrefly.toml is present, via the new enable-fallback-search-path option.from __future__ import annotations is active.invalid-variance error location for overloaded methods. The error now appears on the offending overload signature rather than always pointing to the first overload.__get__ is itself a descriptor. Self-referential descriptor patterns now terminate gracefully instead of crashing.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==1.1.0-dev.2
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.
@rchen152, @stroxler, @kinto0, @yangdanny97, @connernilsen, @grievejia, @NathanTempest, @jorenham, @samwgoldman, @asukaminato0721, David Tolnay, @lolpack, @mikeleppane, @maggiemoss, @MarcoGorelli, @JakobDegen, @arthaud, Anqi Wu, @terror, @bigfootjon, @aahanaggarwal, @rchiodo, @magic-akari, @SamB, @nitishagar, @ndmitchell, @NarxPal, Gregory Carlin, @javabster, @thatfunkymunki, @shobhitmehro, @hrolfurgylfa
Please note: These release notes summarize major updates and features. For brevity, not all individual commits are listed.