# What changed in vcrpy

> 13 changes in vcrpy 8 from its official release notes, upgrade guides and advisories: 1 breaking, 1 security, 4 new APIs and options. Each one cited. Sources checked 2026-10-21. HTML: https://unstale.sh/pypi/vcrpy/

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

## vcrpy 8

### Breaking changes

- Recording fails fast when a request or response contains a Python object the safe YAML loader cannot read back, rather than writing a cassette that breaks on replay. (8.3.0) — [release notes](https://github.com/kevin1024/vcrpy/releases/tag/v8.3.0)

### Security

- Cassettes are loaded with a safe YAML loader, preventing arbitrary code execution from untrusted cassettes while preserving support for existing cassettes. (8.2.1) — [release notes](https://github.com/kevin1024/vcrpy/releases/tag/v8.2.1)

### New APIs and options

- vcrpy adds support for niquests. (8.3.0) — [release notes](https://github.com/kevin1024/vcrpy/releases/tag/v8.3.0)
- Builds a YAML serializer that supports custom Python object tags during recording and replay; register it per VCR instance with register_serializer. (8.3.0) — [release notes](https://github.com/kevin1024/vcrpy/releases/tag/v8.3.0)
- Adds support for httpx 2.x. (8.2.0) — [release notes](https://github.com/kevin1024/vcrpy/releases/tag/v8.2.0)
- Makes the request URL available on VCRHTTPResponse. (8.2.0) — [release notes](https://github.com/kevin1024/vcrpy/releases/tag/v8.2.0)

### Fixes and other changes

- Fixes stale keep-alive connection reuse across cassettes. (8.3.0) — [release notes](https://github.com/kevin1024/vcrpy/releases/tag/v8.3.0)
- Errors are clearer when a cassette contains an unsupported YAML tag. (8.3.0) — [release notes](https://github.com/kevin1024/vcrpy/releases/tag/v8.3.0)
- Invalid record_mode values are validated and raise a clear error. (8.2.1) — [release notes](https://github.com/kevin1024/vcrpy/releases/tag/v8.2.1)
- Fixes compatibility with aiohttp 3.14. (8.2.0) — [release notes](https://github.com/kevin1024/vcrpy/releases/tag/v8.2.0)
- Uses an explicit type check for the body check. (8.2.0) — [release notes](https://github.com/kevin1024/vcrpy/releases/tag/v8.2.0)
- Accounts for modified requests when storing played cassettes, so drop_unused_requests honours before_record_request filtering. (8.2.0) — [release notes](https://github.com/kevin1024/vcrpy/releases/tag/v8.2.0)
- Improves the error message when a matching request has already been consumed. (8.2.0) — [release notes](https://github.com/kevin1024/vcrpy/releases/tag/v8.2.0)
