# What changed in attrs

> 6 changes in attrs 26 from its official release notes, upgrade guides and advisories: 3 new APIs and options. Each one cited. Sources checked 2026-10-17. HTML: https://unstale.sh/pypi/attrs/

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

## attrs 26

### New APIs and options

- Adds a flag indicating whether an attribute alias was auto-generated or explicitly set by the user. (26.1.0) — [release notes](https://github.com/python-attrs/attrs/releases/tag/26.1.0)
- attrs.fields() now accepts attrs instances as well as attrs classes. (26.1.0) — [release notes](https://github.com/python-attrs/attrs/releases/tag/26.1.0)
- Frozen classes can now use attrs.setters.NO_OP for on_setattr in addition to None. (26.1.0) — [release notes](https://github.com/python-attrs/attrs/releases/tag/26.1.0)

### Behavior and default changes

- The disabled validator context manager can now be nested. (26.1.0) — [release notes](https://github.com/python-attrs/attrs/releases/tag/26.1.0)

### Fixes and other changes

- Type annotations no longer reject tuples containing more than one validator. (26.1.0) — [release notes](https://github.com/python-attrs/attrs/releases/tag/26.1.0)
- Field aliases are resolved before field_transformer runs, so transformers receive fully populated Attribute objects with usable alias values. (26.1.0) — [release notes](https://github.com/python-attrs/attrs/releases/tag/26.1.0)
