# What changed in typing-extensions

> 26 changes in typing-extensions 4 from its official release notes, upgrade guides and advisories: 1 breaking, 5 deprecations, 7 new APIs and options. Each one cited. Sources checked 2026-10-18. HTML: https://unstale.sh/pypi/typing-extensions/

To see which of these apply to a repository, run `npx @unstale/cli init` in it.

## typing-extensions 4

### Breaking changes

- Attempting to subclass ParamSpec now raises TypeError on Python 3.9, matching the typing implementation. (4.16.0) — [release notes](https://github.com/python/typing_extensions/releases/tag/4.16.0)

### Deprecations

- The public name is now typing_extensions.sentinel; typing_extensions.Sentinel remains as a soft-deprecated compatibility alias. (4.16.0) — [release notes](https://github.com/python/typing_extensions/releases/tag/4.16.0)
- Arbitrary attribute assignments to sentinels are deprecated. (4.16.0) — [release notes](https://github.com/python/typing_extensions/releases/tag/4.16.0)
- Passing name as a keyword argument to the sentinel constructor is deprecated. (4.16.0) — [release notes](https://github.com/python/typing_extensions/releases/tag/4.16.0)
- Passing repr as a positional argument to the sentinel constructor is deprecated. (4.16.0) — [release notes](https://github.com/python/typing_extensions/releases/tag/4.16.0)
- Subclassing sentinels is deprecated. (4.16.0) — [release notes](https://github.com/python/typing_extensions/releases/tag/4.16.0)

### New APIs and options

- The contravariant parameter is officially supported and its runtime validation is improved. (4.16.0) — [release notes](https://github.com/python/typing_extensions/releases/tag/4.16.0)
- The covariant parameter is officially supported and its runtime validation is improved. (4.16.0) — [release notes](https://github.com/python/typing_extensions/releases/tag/4.16.0)
- AsyncIterator, io.Reader, io.Writer and os.PathLike protocols can now be used as bases for other protocols. (4.16.0) — [release notes](https://github.com/python/typing_extensions/releases/tag/4.16.0)
- TypeVarTuple now accepts the bound parameter. (4.16.0) — [release notes](https://github.com/python/typing_extensions/releases/tag/4.16.0)
- TypeVarTuple now accepts the contravariant parameter. (4.16.0) — [release notes](https://github.com/python/typing_extensions/releases/tag/4.16.0)
- TypeVarTuple now accepts the covariant parameter. (4.16.0) — [release notes](https://github.com/python/typing_extensions/releases/tag/4.16.0)
- TypeVarTuple now accepts the infer_variance parameter. (4.16.0) — [release notes](https://github.com/python/typing_extensions/releases/tag/4.16.0)

### Behavior and default changes

- The bound parameter is officially supported and its runtime validation is improved. (4.16.0) — [release notes](https://github.com/python/typing_extensions/releases/tag/4.16.0)
- The infer_variance parameter is officially supported and its runtime validation is improved. (4.16.0) — [release notes](https://github.com/python/typing_extensions/releases/tag/4.16.0)
- Sentinels can now be pickled. (4.16.0) — [release notes](https://github.com/python/typing_extensions/releases/tag/4.16.0)
- The default repr of a sentinel created as X = sentinel("X") is now X rather than <X>. (4.16.0) — [release notes](https://github.com/python/typing_extensions/releases/tag/4.16.0)
- The __module__ attribute is now writable. (4.16.0) — [release notes](https://github.com/python/typing_extensions/releases/tag/4.16.0)

### Fixes and other changes

- On Python 3.9 and 3.10, isinstance results no longer vary depending on whether a profiling function is set. (4.16.0) — [release notes](https://github.com/python/typing_extensions/releases/tag/4.16.0)
- Applying deprecated to a coroutine function on Python 3.14.0 no longer emits a DeprecationWarning. (4.16.0) — [release notes](https://github.com/python/typing_extensions/releases/tag/4.16.0)
- Behavior is fixed for multiple inheritance involving an @deprecated-decorated base class. (4.16.0) — [release notes](https://github.com/python/typing_extensions/releases/tag/4.16.0)
- Key setting is fixed when inheriting keys with the same name. (4.16.0) — [release notes](https://github.com/python/typing_extensions/releases/tag/4.16.0)
- Python 3.15 is now officially supported. (4.16.0) — [release notes](https://github.com/python/typing_extensions/releases/tag/4.16.0)
- Key setting is fixed when inheriting keys with the same name. (4.16.0) — [release notes](https://github.com/python/typing_extensions/releases/tag/4.16.0)
- Sentinels now preserve their identity when copied or deep-copied. (4.16.0) — [release notes](https://github.com/python/typing_extensions/releases/tag/4.16.0)
- On Python 3.9 and 3.10, isinstance results no longer vary depending on whether a profiling function is set. (4.16.0) — [release notes](https://github.com/python/typing_extensions/releases/tag/4.16.0)
