NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #726 most downloaded on PyPI
Automatically mock your HTTP interactions to simplify and speed up testing
Last release 3 months ago
04 Jul 2026
Release timing varies
gaps range from 3 weeks to 11 months
Most releases are documented
notes for 45 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
14 years old
80 releases · first in 2013
Add support for niquests ( #980 ) — thanks @ionelmc
vcr.serializers.yamlserializer.with_custom_tags(...) builds a YAML serializer supporting custom Python object tags on both record and replay, registered per VCR instance via register_serializer (#1007, #1009) — thanks @Polandia94Full Changelog: v8.2.1...v8.3.0
One column per quarter.
SECURITY: Cassettes are now loaded with a safe YAML loader, preventing arbitrary code execution when a cassette from an untrusted source is loaded. Pr
!!python/object/apply:os.system) would execute code on load, including via the normal vcr.use_cassette() path. Existing cassettes (including file-upload/streaming bodies) continue to load. Advisory: GHSA-rpj2-4hq8-938g — thanks @RamiAltai and @EQSTLab for the reports.record_mode and raise a clear error on an invalid value (#208)Full Changelog: v8.2.0...v8.2.1
Add support for httpx 2.x ( #993 ) - thanks @dsfaccini
AsyncStreamReaderMixin removed and ClientResponse now requires stream_writer (#995) - thanks @dsfaccinidrop_unused_requests honours before_record_request filtering (#962) - thanks @jamesbrazaVCRHTTPResponse (#976) - thanks @dAnjouconvert_body_to_unicode to use an explicit type check (#982) - thanks @Polandia94Full Changelog: v8.1.1...v8.2.0
Fix sync requests in async contexts for HTTPX ( #965 ) - thanks @seowalex
Enable brotli decompression if available (via brotli , brotlipy or brotlicffi ) ( #620 ) - thanks @immerrr
brotli, brotlipy or brotlicffi) (#620) - thanks @immerrrdata and json arguments when one is None (#624) - thanks @leorochaelFull Changelog: v8.0.0...v8.1.0
Fix iscoroutinefunction deprecation warning on Python 3.14 - thanks @kloczek
drop_unused_requests option to remove unused interactions from cassettes (#763) - thanks @danielnsilvaiscoroutinefunction deprecation warning on Python 3.14 - thanks @kloczekFull Changelog: v7.0.0...v8.0.0
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="- Drop support for python 3.8
- Drop support for python 3.8 (major version bump) - thanks @jairhenrique
- Various linting and test fixes - thanks @jairhenrique
- Bugfix for urllib2>=2.3.0 - missing version_string (#888)
- Bugfix for asyncio.run - thanks @alekeik1
Ensure body is consumed only once ( #846 ) - thanks @sathieu
Bugfix with to Tornado cassette generator (thanks @graingert )
Bugfix with to Tornado cassette generator (thanks @graingert)
BREAKING : Drop support for boto (vcrpy still supports boto3, but is dropping the deprecated boto support in this release. (thanks @jairhenrique )
boto (vcrpy still supports boto3, but is dropping the deprecated boto support in this release. (thanks @jairhenrique)Use ruff for linting (instead of current flake8/isort/pyflakes) - thanks @jairhenrique
BREAKING CHANGE: Drop support for Python 3.7. 3.7 is EOL as of 6/27/23 Thanks @jairhenrique
HUGE thanks to @hartwork for all the work done on this release!
response.raw.stream() to fix urllib v2 compatassert with raise AssertionError: fixes support for PYTHONOPTIMIZE=1Support urllib3 v1 and v2. NOTE: there is an issue running urllib3 v2 on Python older than 3.10, so this is currently blocked in the requirements. Hop
Support urllib3 v1 and v2. NOTE: there is an issue running urllib3 v2 on Python older than 3.10, so this is currently blocked in the requirements. Hopefully we can resolve this situation in the future. Thanks to @shifqu, @hartwork, @jairhenrique, @pquentin, and @vEpiphyte for your work on this.
Add support for Python 3.11 (Thanks @evgeni)
Fix a bug where the first request in a redirect chain was not being recorded with aiohttp
Drop support for python < 3.7, thanks @jairhenrique, @IvanMalison, @AthulMuralidhar
Fix HTTPX support for versions greater than 0.15 (thanks @jairhenrique)
Add support for httpx!! (thanks @herdigiorgi)
allow_playback_repeats option (thanks @tysonholub)Correct mock imports. Fixes #504
Fix logo alignment for PyPI release
Fix logo alignment for PyPI release
Remove Python2 support (@hugovk)
This release is a breaking change as it changes how aiohttp follows redirects and your cassettes may need to be re-recorded with this update.
aiohttp follows redirects and your cassettes may need to be re-recorded with this update.aiohttp stub #495 (@nickdirienzo)aiohttp stub #495 (@nickdirienzo)Format code with black (@neozenith)
pytest-recording to the documentation as an alternative Pytest plugin (@Stranger6667)Add deprecation warning on python 2.7, next major release will drop python 2.7 support
Nothing published for this version
Support python 3.7 (fix httplib2 and urllib2, thanks @felixonmars)
before_record_response so the original response isn't changed (thanks @kgraves)Fix support to latest aiohttp version (3.3.2).
Fix support to latest aiohttp version (3.2.1)
Nothing published for this version
Allow injection of persistence methods + bugfixes (thanks @j-funk and @IvanMalison) Support python 3.6 + CI tests (thanks @derekbekoe and @graingert)
Allow injection of persistence methods + bugfixes (thanks @j-funk and @IvanMalison) Support python 3.6 + CI tests (thanks @derekbekoe and @graingert) Support pytest-asyncio coroutines (thanks @graingert)
Added a fix to httplib2 (thanks @carlosds730)
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Add support for boto3 (thanks @desdm, @foorbarna).
decode_compressed_response is enabled (thanks @nickdirienzo)Nothing published for this version
Nothing published for this version
[#188] additional_matchers kwarg on use_casstte. [#191] Actually support passing multiple before_record_request functions (thanks @agriffis).
[#188] additional_matchers kwarg on use_casstte. [#191] Actually support passing multiple before_record_request functions (thanks @agriffis).
[#186] Get effective_url in tornado (thanks @mvschaik), [#187] Set request_time on Response object in tornado (thanks @abhinav).
[#186] Get effective_url in tornado (thanks @mvschaik), [#187] Set request_time on Response object in tornado (thanks @abhinav).
Patch fetch_impl instead of the entire HTTPClient class for Tornado (thanks @abhinav).
Patch fetch_impl instead of the entire HTTPClient class for Tornado (thanks @abhinav).
Nothing published for this version
[#169] Support conditional requirements in old versions of pip, Fix RST parse errors generated by pandoc, [Tornado] Fix unsupported features exception
[#169] Support conditional requirements in old versions of pip, Fix RST parse errors generated by pandoc, [Tornado] Fix unsupported features exception not being raised, [#166] content-aware body matcher.
[#120] Tornado support (thanks @abhinav), [#147] packaging fixes (thanks @graingert), [#158] allow filtering post params in requests (thanks @MrJohz),
[#120] Tornado support (thanks @abhinav), [#147] packaging fixes (thanks @graingert), [#158] allow filtering post params in requests (thanks @MrJohz), [#140] add xmlrpclib support (thanks @Diaoul).
1.5.2 Fix crash when cassette path contains cassette library directory (thanks @gazpachoking).
1.5.2 Fix crash when cassette path contains cassette library directory (thanks @gazpachoking).
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Filter post data parameters (thanks @eadmundo), support for posting files through requests, inject_cassette kwarg to access cassette from use_cassette
Filter post data parameters (thanks @eadmundo), support for posting files through requests, inject_cassette kwarg to access cassette from use_cassette decorated function, with_current_defaults actually works (thanks @samstav).
Nothing published for this version
Add custom_patches argument to VCR/Cassette objects to allow users to stub custom classes when cassettes become active.
Add custom_patches argument to VCR/Cassette objects to allow users to stub custom classes when cassettes become active.
Add force reset around calls to actual connection from stubs, to ensure compatibility with the version of httplib/urlib2 in python 2.7.9.
Add force reset around calls to actual connection from stubs, to ensure compatibility with the version of httplib/urlib2 in python 2.7.9.
Fix python3 headers field (thanks @rtaboada), fix boto test (thanks @telaviv), fix new_episodes record mode (thanks @jashugan), fix Windows connection
Fix python3 headers field (thanks @rtaboada), fix boto test (thanks @telaviv), fix new_episodes record mode (thanks @jashugan), fix Windows connectionpool stub bug (thanks @gazpachoking)
Also: Make json serialize error handling correct. Improve logging of match failures.
Also: Make json serialize error handling correct. Improve logging of match failures.
Use function signature preserving wrapt.decorator to write the decorator portion of use_cassette in order to ensure compatibility with py.test fixture
Use function signature preserving wrapt.decorator to write the
decorator portion of use_cassette in order to ensure compatibility with
py.test fixtures and python 2. Move all request filtering into the
before_record_callable.
Move context management of use_cassette into CassetteContextDecorator so that a separate cassette is created for each invocation of a use_cassette dec
Fixes a bug with the requests 2.4 stub.
Fixes a bug with the requests 2.4 stub.
Your coding agent can read these notes before it upgrades. Set up the MCP server →