Enhancements
- Allow specific `--only-binary` and `--no-binary` packages to
override `:all:` ([4067](https://github.com/astral-sh/uv/pull/4067))
- Flatten ORs and ANDs in marker construction ([4260](https://github.com/astral-sh/uv/pull/4260))
- Skip invalid interpreters when searching for requested interpreter executable
name ([4308](https://github.com/astral-sh/uv/pull/4308))
- Display keyring stderr during queries ([4343](https://github.com/astral-sh/uv/pull/4343))
- Allow discovery of uv binary relative to package root ([4336](https://github.com/astral-sh/uv/pull/4336))
- Use relative path for `lib64` symlink ([4268](https://github.com/astral-sh/uv/pull/4268))
CLI
- Add uv version to debug output ([4259](https://github.com/astral-sh/uv/pull/4259))
- Allow `--no-binary` with `uv pip compile` ([4301](https://github.com/astral-sh/uv/pull/4301))
- Hide `--no-system` from the CLI ([4292](https://github.com/astral-sh/uv/pull/4292))
- Make `--reinstall`, `--upgrade`, and `--refresh` shared arguments ([4319](https://github.com/astral-sh/uv/pull/4319))
Configuration
- Add `UV_EXCLUDE_NEWER` environment variable ([4287](https://github.com/astral-sh/uv/pull/4287))
Bug fixes
- Allow normalization to completely eliminate markers ([4271](https://github.com/astral-sh/uv/pull/4271))
- Avoid treating direct path archives as always dynamic ([4283](https://github.com/astral-sh/uv/pull/4283))
- De-duplicate markers during normalization ([4263](https://github.com/astral-sh/uv/pull/4263))
- Fix incorrect parsing of requested Python version as empty version
specifiers ([4289](https://github.com/astral-sh/uv/pull/4289))
- Suggest correct command to create a virtual environment when encountering externally managed
interpreters ([4314](https://github.com/astral-sh/uv/pull/4314))
- Use consistent order for extra groups in lockfile ([4275](https://github.com/astral-sh/uv/pull/4275))
Documentation
- Add `pip-compile` defaults to `PIP_COMPATIBILITY.md` ([4302](https://github.com/astral-sh/uv/pull/4302))
- Expand on `pip-compile` default differences ([4306](https://github.com/astral-sh/uv/pull/4306))
- Tweak copy on some command-line arguments ([4293](https://github.com/astral-sh/uv/pull/4293))
- Move the preview changelog so the GitHub Release shows stable
changes ([4290](https://github.com/astral-sh/uv/pull/4290))
Preview features
- Add `--force` option to `uv toolchain install` ([4313](https://github.com/astral-sh/uv/pull/4313))
- Add `--no-build`, `--no-build-package`, and binary variants ([4322](https://github.com/astral-sh/uv/pull/4322))
- Add `EXTERNALLY-MANAGED` markers to managed toolchains ([4312](https://github.com/astral-sh/uv/pull/4312))
- Add `uv toolchain find` ([4206](https://github.com/astral-sh/uv/pull/4206))
- Add persistent configuration for non-`pip` APIs ([4294](https://github.com/astral-sh/uv/pull/4294))
- Add support for adding/removing development dependencies ([4327](https://github.com/astral-sh/uv/pull/4327))
- Add support for listing system toolchains ([4172](https://github.com/astral-sh/uv/pull/4172))
- Add support for toolchain requests by key ([4332](https://github.com/astral-sh/uv/pull/4332))
- Allow multiple toolchains to be requested
in `uv toolchain install` ([4334](https://github.com/astral-sh/uv/pull/4334))
- Fix relative and absolute path handling in lockfiles ([4266](https://github.com/astral-sh/uv/pull/4266))
- Load configuration options from workspace root ([4295](https://github.com/astral-sh/uv/pull/4295))
- Omit project name from workspace errors ([4299](https://github.com/astral-sh/uv/pull/4299))
- Read Python version files during toolchain installs ([4335](https://github.com/astral-sh/uv/pull/4335))
- Remove extraneous installations in `uv sync` by default ([4366](https://github.com/astral-sh/uv/pull/4366))
- Respect `requires-python` in `uv lock` ([4282](https://github.com/astral-sh/uv/pull/4282))
- Respect workspace-wide `requires-python` in interpreter selection ([4298](https://github.com/astral-sh/uv/pull/4298))
- Support unnamed requirements in `uv add` ([4326](https://github.com/astral-sh/uv/pull/4326))
- Use portable slash paths in lockfile ([4324](https://github.com/astral-sh/uv/pull/4324))
- Use registry URL for fetching source distributions from lockfile ([4280](https://github.com/astral-sh/uv/pull/4280))
- `uv sync --no-clean` ([4367](https://github.com/astral-sh/uv/pull/4367))
- Filter dependencies by tracking markers on resolver forks ([4339](https://github.com/astral-sh/uv/pull/4339))
- Use `Requires-Python` to filter dependencies during universal
resolution ([4273](https://github.com/astral-sh/uv/pull/4273))