github astral-sh/ty 0.0.33

8 hours ago

Release Notes

Released on 2026-04-28.

Notable changes

  • ty now prefers the declared type of an annotated assignment in more situations (#24802).
    Consider this example:

    from some_library import untyped_function
    
    threshold: int | None = 0
    result: str = untyped_function()

    ty previously favored the inferred type of the right hand side expression when threshold and result were used. This is useful for threshold, as it allows something like threshold += 1 to work without an error: we know that threshold could later become None, but right now, we see that it is an int. However, for result, the inferred type is Unknown. This is not a useful type and it can lead to false negatives. Starting with this release, ty will therefore prefer
    the declared type if the inferred and declared types are mutually assignable. In the above example, threshold will still be inferred as int (or rather Literal[1]), but result will now be inferred as str. If you previously added casts to work around this behavior, you should be able to remove them after upgrading.

Bug fixes

  • Fix reporting of annotation-only locals as unused (#24811)
  • Fix project and workspace selection (#24824)
  • Fix go-to definition for generic classes (#24714)
  • Fix receiver coloring for aliased decorators (#24884)

LSP server

  • Add support for go-to definition in literal enum member inlay hints (#24792)
  • Add support for "baking" keyword argument inlay hints into the source code (#24667)
  • Don't allow inlay hint edits when introducing a non global scope symbol (#24797)
  • Omit semantic highlighting for unresolved symbols (#24718)

Core type checking

  • Support narrowing with aliased conditional expressions (#24302)
  • Model short-circuiting control flow in Boolean expressions (#24458)
  • Handle finally blocks where all try/except blocks are terminal (#24882)
  • Detect invalid ClassVar vs instance-attribute overrides (#24767)
  • Emit diagnostic for invalid uses of Unpack[...] (#24868)
  • Infer lambda parameter types with Callable type context (#24317)
  • Support ** unpacking of TypedDict in dict-literal assignments (#24703)
  • Support Unpack[TypedDict] in **kwargs signatures (#24653)
  • Treat [*xs] as an irrefutable pattern when matching on Sequence (#24787)
  • Improve generics solving for unions in invariant positions (#24698)
  • Improve generics solving for unions when matching against protocols (#24837)

Diagnostics

  • Add error context to invalid-return-type diagnostics, invalid-yield diagnostics, attribute assignment diagnostics (#24770, #24771)
  • Add error context for invalid TypedDict assignments (#24790)
  • Add error context for invalid intersection type assignments (#24772)
  • Improve TypedDict to dict assignment error diagnostics (#24768)
  • Add contextual secondary annotations in more places (#24696)
  • Include full type in invalid-key diagnostics for unions of TypedDicts (#24693)
  • Emit more specific diagnostics for "possibly unbound" errors from context manager dunder methods invoked on a union. (#24662)
  • Remove duplicate invalid-type-form diagnostics for PEP-613 type alias values (#24760)
  • Improve diagnostics for implicit calls to a possibly unbound unary operator (#24816)
  • Improve diagnostics for possibly-unbound errors from implicit dunder calls on unions (#24676)

Performance

  • Optimize signature checking based on number of arguments (#24674)
  • Defer union of parameter types (#24756)
  • Skip checks for gradual vararg calls (#24748)

Other changes

  • Fix notifications about watched changes for entities outside any workspace (#24775)

Contributors

Install ty 0.0.33

Install prebuilt binaries via shell script

curl --proto '=https' --tlsv1.2 -LsSf https://releases.astral.sh/github/ty/releases/download/0.0.33/ty-installer.sh | sh

Install prebuilt binaries via powershell script

powershell -ExecutionPolicy Bypass -c "irm https://releases.astral.sh/github/ty/releases/download/0.0.33/ty-installer.ps1 | iex"

Download ty 0.0.33

File Platform Checksum
ty-aarch64-apple-darwin.tar.gz Apple Silicon macOS checksum
ty-x86_64-apple-darwin.tar.gz Intel macOS checksum
ty-aarch64-pc-windows-msvc.zip ARM64 Windows checksum
ty-i686-pc-windows-msvc.zip x86 Windows checksum
ty-x86_64-pc-windows-msvc.zip x64 Windows checksum
ty-aarch64-unknown-linux-gnu.tar.gz ARM64 Linux checksum
ty-i686-unknown-linux-gnu.tar.gz x86 Linux checksum
ty-powerpc64-unknown-linux-gnu.tar.gz PPC64 Linux checksum
ty-powerpc64le-unknown-linux-gnu.tar.gz PPC64LE Linux checksum
ty-s390x-unknown-linux-gnu.tar.gz S390x Linux checksum
ty-x86_64-unknown-linux-gnu.tar.gz x64 Linux checksum
ty-armv7-unknown-linux-gnueabihf.tar.gz ARMv7 Linux checksum
ty-aarch64-unknown-linux-musl.tar.gz ARM64 MUSL Linux checksum
ty-i686-unknown-linux-musl.tar.gz x86 MUSL Linux checksum
ty-x86_64-unknown-linux-musl.tar.gz x64 MUSL Linux checksum
ty-arm-unknown-linux-musleabihf.tar.gz ARMv6 MUSL Linux (Hardfloat) checksum
ty-armv7-unknown-linux-musleabihf.tar.gz ARMv7 MUSL Linux checksum

Verifying GitHub Artifact Attestations

The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the GitHub CLI:

gh attestation verify <file-path of downloaded artifact> --repo astral-sh/ty

You can also download the attestation from GitHub and verify against that directly:

gh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation>

Don't miss a new ty release

NewReleases is sending notifications on new releases.