# Changelog


<sub>The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).</sub>



## [5.0.1] - 2026-05-13

### <!-- 10 -->💼 Other
- Enable free-threaded wheels in cibuildwheel (#121) by @art049 in [#121](https://github.com/CodSpeedHQ/pytest-codspeed/pull/121)


## [5.0.0] - 2026-05-13

### <!-- 0 -->🚀 Features
- Use instrument_hooks markers in walltime by @GuillaumeLagrange
- Declare native extension free-thread safe (#120) by @art049 in [#120](https://github.com/CodSpeedHQ/pytest-codspeed/pull/120)
- Remove cffi in favor of native extension by @adriencaccia

### <!-- 4 -->⚡ Performance
- Bind callgrind start/stop directly to avoid extra frame by @art049 in [#96](https://github.com/CodSpeedHQ/pytest-codspeed/pull/96)

### <!-- 7 -->⚙️ Internals
- Ignore common compilation warnings for instrument-hooks by @GuillaumeLagrange in [#118](https://github.com/CodSpeedHQ/pytest-codspeed/pull/118)
- Use unsigned bash in the macos test by @GuillaumeLagrange
- Bump pinned uv version to 0.11.14 by @art049
- Add python 3.15 and 3.15t to test matrix by @art049
- Add 3.14.t in test suite by @adriencaccia
- Bump instrument-hooks (#119) by @not-matthias in [#119](https://github.com/CodSpeedHQ/pytest-codspeed/pull/119)


## [4.5.0] - 2026-04-28

### <!-- 7 -->⚙️ Internals
- Pre-build macos binary by @GuillaumeLagrange in [#117](https://github.com/CodSpeedHQ/pytest-codspeed/pull/117)
- Bump instrument-hooks submodule to use int32_t as pid by @GuillaumeLagrange
- Add macos integration test by @GuillaumeLagrange


## [4.4.0] - 2026-04-14

### <!-- 0 -->🚀 Features
- Collect Python toolchain information via instrument hooks environment API by @GuillaumeLagrange in [#108](https://github.com/CodSpeedHQ/pytest-codspeed/pull/108)

### <!-- 1 -->🐛 Bug Fixes
- Exclude setup time from benchmark in walltime mode (#114) by @toby-coleman in [#114](https://github.com/CodSpeedHQ/pytest-codspeed/pull/114)
- Fix segfault caused by multiple activate_stack_trampoline by @GuillaumeLagrange

### <!-- 7 -->⚙️ Internals
- Bump the python pinned python version by @GuillaumeLagrange in [#109](https://github.com/CodSpeedHQ/pytest-codspeed/pull/109)
- Add CONTRIBUTING.md by @adriencaccia


## [4.3.0] - 2026-02-09

### <!-- 0 -->🚀 Features
- Add .gitignore to .codspeed folder on creation (#107) by @art049 in [#107](https://github.com/CodSpeedHQ/pytest-codspeed/pull/107)
- Support memory profiling by @not-matthias
- Rename instrumentation to simulation by @GuillaumeLagrange in [#98](https://github.com/CodSpeedHQ/pytest-codspeed/pull/98)
- Improve time unit display in local walltime by @adriencaccia

### <!-- 1 -->🐛 Bug Fixes
- Switch to OIDC token by @not-matthias

### <!-- 7 -->⚙️ Internals
- Use github runner instead of buildjet by @art049
- Enable memory profiling by @not-matthias in [#103](https://github.com/CodSpeedHQ/pytest-codspeed/pull/103)
- Pin python to 3.14.2 in CI to prevent walltime crashes by @GuillaumeLagrange in [#105](https://github.com/CodSpeedHQ/pytest-codspeed/pull/105)
- Add comment about uv pinning by @GuillaumeLagrange
- Add comment to explain results storing in .codspeed folder by @adriencaccia in [#97](https://github.com/CodSpeedHQ/pytest-codspeed/pull/97)
- Add 3.14 to the list of supported python versions by @adriencaccia


## [4.2.0] - 2025-10-24

### <!-- 0 -->🚀 Features
- Support python 3.14 by @adriencaccia in [#91](https://github.com/CodSpeedHQ/pytest-codspeed/pull/91)

### <!-- 1 -->🐛 Bug Fixes
- Throw error when instrument hooks failed to initialize under codspeed env by @adriencaccia

### <!-- 7 -->⚙️ Internals
- Bump mypy by @adriencaccia
- Bump python to 3.14 in the ci by @adriencaccia


## [4.1.1] - 2025-10-07

### <!-- 1 -->🐛 Bug Fixes
- Wheel installation due to file system loop
- Use ParamSpec in instrument definition instead of tuple and dict by @art049
- Use ParamSpec in the plugin call definition by @flying-sheep

### <!-- 3 -->📚 Documentation
- Add pull_request trigger comment by @adriencaccia

### <!-- 7 -->⚙️ Internals
- Remove the beta versions from the changelog by @art049
- Exclude beta tags in changelog by @art049
- Bump instrument-hooks (#87) by @not-matthias in [#87](https://github.com/CodSpeedHQ/pytest-codspeed/pull/87)
- Switch to sharded upload (#75) by @art049 in [#75](https://github.com/CodSpeedHQ/pytest-codspeed/pull/75)
- Fix changelog generation by @art049


## [4.1.0] - 2025-10-06

### <!-- 1 -->🐛 Bug Fixes
- Use ParamSpec in instrument definition instead of tuple and dict by @art049
- Use ParamSpec in the plugin call definition by @flying-sheep

### <!-- 3 -->📚 Documentation
- Add pull_request trigger comment by @adriencaccia

### <!-- 7 -->⚙️ Internals
- Exclude beta tags in changelog by @art049
- Bump instrument-hooks (#87) by @not-matthias in [#87](https://github.com/CodSpeedHQ/pytest-codspeed/pull/87)
- Switch to sharded upload (#75) by @art049 in [#75](https://github.com/CodSpeedHQ/pytest-codspeed/pull/75)
- Fix changelog generation by @art049


## [4.0.0] - 2025-07-10

### <!-- 0 -->🚀 Features
- Update readme by @art049
- Support pytest-benchmark's pedantic API by @art049 in [#81](https://github.com/CodSpeedHQ/pytest-codspeed/pull/81)
- Make sure the benchmark fixture can only be called once per bench by @art049
- Support marker attributes to customize the walltime execution by @art049 in [#80](https://github.com/CodSpeedHQ/pytest-codspeed/pull/80)
- Use instrument hooks by @not-matthias
- Add instrument-hooks native module by @not-matthias

### <!-- 1 -->🐛 Bug Fixes
- Reenable walltime instrument hooks by @art049 in [#82](https://github.com/CodSpeedHQ/pytest-codspeed/pull/82)
- Fix native library typing by @art049

### <!-- 6 -->🧪 Testing
- Add benches from the documentation's getting started by @art049 in [#71](https://github.com/CodSpeedHQ/pytest-codspeed/pull/71)
- Add simple python benches by @art049

### <!-- 7 -->⚙️ Internals
- Remove pre-releases from git-cliff changelog by @art049
- Link to the documentation by @art049
- Improve reliability of perf trampoline compatibility checks by @art049
- Bump ruff by @art049
- Update release workflow to include submodules by @art049 in [#79](https://github.com/CodSpeedHQ/pytest-codspeed/pull/79)
- Remove valgrind wrapper by @not-matthias
- Update apt before installing packages by @art049


## [3.2.0] - 2025-01-31

### <!-- 0 -->🚀 Features
- Increase the min round time to a bigger value (+/- 1ms) by @art049
- Add benchmarks-walltime job to run additional performance benchmarks by @art049 in [#65](https://github.com/CodSpeedHQ/pytest-codspeed/pull/65)
- Fix the random seed while measuring with instruments by @art049 in [#48](https://github.com/CodSpeedHQ/pytest-codspeed/pull/48)

### <!-- 1 -->🐛 Bug Fixes
- Use time per iteration instead of total round time in stats by @art049

### <!-- 2 -->🏗️ Refactor
- Replace hardcoded outlier factor for improved readability by @art049 in [#67](https://github.com/CodSpeedHQ/pytest-codspeed/pull/67)

### <!-- 7 -->⚙️ Internals
- Fix self-dependency by @adriencaccia in [#66](https://github.com/CodSpeedHQ/pytest-codspeed/pull/66)
- Fix uv version in CI by @adriencaccia


## [3.1.2] - 2025-01-09

### <!-- 1 -->🐛 Bug Fixes
- Update package_data to include header and source files for valgrind wrapper by @art049 in [#64](https://github.com/CodSpeedHQ/pytest-codspeed/pull/64)


## [3.1.1] - 2025-01-07

### <!-- 7 -->⚙️ Internals
- Fix tag num with bumpver by @art049 in [#61](https://github.com/CodSpeedHQ/pytest-codspeed/pull/61)
- Update uv lock before release by @art049
- Add a py3-none-any fallback wheel by @art049


## [3.1.0] - 2024-12-09

### <!-- 0 -->🚀 Features
- Check buildability and fallback when build doesn't work by @art049
- Compile the callgrind wrapper at build time by @art049

### <!-- 1 -->🐛 Bug Fixes
- Allow build on arm64 by @art049

### <!-- 2 -->🏗️ Refactor
- Remove the scripted semver generation by @art049

### <!-- 7 -->⚙️ Internals
- Fix typo in cibuildwheel config by @art049 in [#57](https://github.com/CodSpeedHQ/pytest-codspeed/pull/57)
- Build wheels with cibuildwheel by @art049
- Allow forcing integrated tests by @art049
- Fix release script by @art049
- Use bumpver to manage versions by @art049
- Add a changelog by @art049
- Force native extension build in CI by @art049
- Updated matrix release workflow by @art049
- Use a common python version in the codspeed job by @art049
- Fix the codspeed workflow by @art049
- Use uv in CI by @art049
- Commit uv lock file by @art049


## [3.0.0] - 2024-10-29

### <!-- 1 -->🐛 Bug Fixes
- Fix compatibility with pytest-benchmark 5.0.0 by @art049 in [#54](https://github.com/CodSpeedHQ/pytest-codspeed/pull/54)

### <!-- 7 -->⚙️ Internals
- Drop support for python3.8 by @art049
- Expose type information (#53) by @Dreamsorcerer in [#53](https://github.com/CodSpeedHQ/pytest-codspeed/pull/53)
- Run the CI with ubuntu 24.04 by @art049
- Improve naming in workflow examples by @art049
- Bump actions/checkout to v4 (#47) by @fargito in [#47](https://github.com/CodSpeedHQ/pytest-codspeed/pull/47)


## [3.0.0b4] - 2024-09-27

### <!-- 0 -->🚀 Features
- Send more outlier data by @art049

### <!-- 1 -->🐛 Bug Fixes
- Fix display of parametrized tests by @art049
- Reenable gc logic by @art049

### <!-- 6 -->🧪 Testing
- Add benches for various syscalls by @art049


## [3.0.0b3] - 2024-09-26

### <!-- 0 -->🚀 Features
- Also save the lower and upper fences in the json data by @art049 in [#46](https://github.com/CodSpeedHQ/pytest-codspeed/pull/46)

### <!-- 6 -->🧪 Testing
- Refactor the algorithm benches using parametrization and add benches on bit_manipulation by @art049


## [3.0.0b2] - 2024-09-24

### <!-- 0 -->🚀 Features
- Also save the q1 and q3 in the json data by @art049 in [#45](https://github.com/CodSpeedHQ/pytest-codspeed/pull/45)
- Add the --codspeed-max-time flag by @art049


## [3.0.0b1] - 2024-09-20

### <!-- 0 -->🚀 Features
- Send the semver version to cospeed instead of the PEP440 one by @art049 in [#44](https://github.com/CodSpeedHQ/pytest-codspeed/pull/44)
- Also store the semver version by @art049

### <!-- 6 -->🧪 Testing
- Add benches for TheAlgorithms/backtracking by @art049 in [#43](https://github.com/CodSpeedHQ/pytest-codspeed/pull/43)


## [3.0.0b0] - 2024-09-18

### <!-- 0 -->🚀 Features
- Improve table style when displaying results by @art049 in [#41](https://github.com/CodSpeedHQ/pytest-codspeed/pull/41)
- Add the total bench time to the collected stats by @art049
- Add configuration and split tests between instruments by @art049
- Add outlier detection in the walltime instrument by @art049
- Implement the walltime instrument by @art049
- Add bench of various python noop by @art049
- Avoid overriding pytest's default protocol (#32) by @kenodegard in [#32](https://github.com/CodSpeedHQ/pytest-codspeed/pull/32)

### <!-- 1 -->🐛 Bug Fixes
- Use importlib_metadata to keep backward compatibility by @art049
- Properly decide the mode depending on our env variable spec by @art049
- Disable pytest-speed when installed and codspeed is enabled by @art049

### <!-- 2 -->🏗️ Refactor
- Differentiate the mode from the underlying instrument by @art049
- Move the instrumentation wrapper directly in the instrument by @art049
- Change Instrumentation to CPUInstrumentation by @art049
- Create an abstraction for each instrument by @art049

### <!-- 3 -->📚 Documentation
- Update action version in the CI workflow configuration (#39) by @frgfm in [#39](https://github.com/CodSpeedHQ/pytest-codspeed/pull/39)
- Bump action versions in README by @adriencaccia

### <!-- 6 -->🧪 Testing
- Add benches for TheAlgorithms/audio_filters by @art049 in [#42](https://github.com/CodSpeedHQ/pytest-codspeed/pull/42)

### <!-- 7 -->⚙️ Internals
- Add a test on the walltime instrument by @art049
- Fix utils test using a fake git repo by @art049
- Update readme by @art049
- Support python 3.13 and drop 3.7 by @art049 in [#40](https://github.com/CodSpeedHQ/pytest-codspeed/pull/40)
- Add TCH, FA, and UP to ruff lints (#29) by @kenodegard in [#29](https://github.com/CodSpeedHQ/pytest-codspeed/pull/29)


## [2.2.1] - 2024-03-19

### <!-- 0 -->🚀 Features
- Support pytest 8.1.1 by @art049

### <!-- 1 -->🐛 Bug Fixes
- Loosen runtime requirements (#21) by @edgarrmondragon in [#21](https://github.com/CodSpeedHQ/pytest-codspeed/pull/21)

### <!-- 7 -->⚙️ Internals
- Add all-checks job to CI workflow by @art049 in [#28](https://github.com/CodSpeedHQ/pytest-codspeed/pull/28)
- Switch from black to ruff format by @art049
- Update action version in README.md by @adriencaccia
- Add codspeed badge to the readme by @art049


## [2.2.0] - 2023-09-01

### <!-- 0 -->🚀 Features
- Avoid concurrent wrapper builds by @art049
- Add a test for pytest-xdist compatibility by @art049

### <!-- 1 -->🐛 Bug Fixes
- Fix xdist test output assertion by @art049


## [2.1.0] - 2023-07-27

### <!-- 1 -->🐛 Bug Fixes
- Fix relative git path when using working-directory by @art049 in [#15](https://github.com/CodSpeedHQ/pytest-codspeed/pull/15)
- Fix typo in release.yml (#14) by @art049 in [#14](https://github.com/CodSpeedHQ/pytest-codspeed/pull/14)


## [2.0.1] - 2023-07-22

### <!-- 0 -->🚀 Features
- Release the package from the CI with trusted provider by @art049
- Add a return type to the benchmark fixture by @art049 in [#13](https://github.com/CodSpeedHQ/pytest-codspeed/pull/13)
- Add support for returning values (#12) by @patrick91 in [#12](https://github.com/CodSpeedHQ/pytest-codspeed/pull/12)

### <!-- 1 -->🐛 Bug Fixes
- Fix setuptools installation with python3.12 by @art049


## [2.0.0] - 2023-07-04

### <!-- 0 -->🚀 Features
- Warmup performance map generation by @art049
- Add some details about the callgraph generation status in the header by @art049
- Test that perf maps are generated by @art049
- Add a local test matrix with hatch by @art049
- Test that benchmark selection with -k works by @art049
- Add support for CPython3.12 and perf trampoline by @art049
- Add introspection benchmarks by @art049 in [#9](https://github.com/CodSpeedHQ/pytest-codspeed/pull/9)

### <!-- 1 -->🐛 Bug Fixes
- Support benchmark.extra_info parameters on the fixture by @art049 in [#10](https://github.com/CodSpeedHQ/pytest-codspeed/pull/10)
- Filter out pytest-benchmark warnings in the tests by @art049

### <!-- 2 -->🏗️ Refactor
- Use the pytest_run_protocol hook for better exec control by @art049

### <!-- 7 -->⚙️ Internals
- Separate the benchmark workflow by @art049 in [#8](https://github.com/CodSpeedHQ/pytest-codspeed/pull/8)
- Bump version to 1.3.0 to trigger the callgraph generation by @art049
- Reuse same test code in the tests by @art049
- Bump linting dependencies by @art049
- Bump precommit in the CI by @art049
- Add python3.12 to the ci matrix by @art049
- Restructure dev dependencies by @art049
- Replace isort by ruff by @art049 in [#11](https://github.com/CodSpeedHQ/pytest-codspeed/pull/11)
- Add discord badge in the readme by @art049


## [1.2.2] - 2022-12-02

### <!-- 0 -->🚀 Features
- Add library metadata in the profile output by @art049 in [#5](https://github.com/CodSpeedHQ/pytest-codspeed/pull/5)


## [1.2.1] - 2022-11-28

### <!-- 1 -->🐛 Bug Fixes
- Support kwargs with the benchmark fixture by @art049 in [#4](https://github.com/CodSpeedHQ/pytest-codspeed/pull/4)


## [1.2.0] - 2022-11-22

### <!-- 1 -->🐛 Bug Fixes
- Avoid wrapping the callable to maintain existing results by @art049
- Disable automatic garbage collection to increase stability by @art049 in [#2](https://github.com/CodSpeedHQ/pytest-codspeed/pull/2)
- Update readme by @art049

### <!-- 7 -->⚙️ Internals
- Update readme by @art049


## [1.1.0] - 2022-11-10

### <!-- 0 -->🚀 Features
- Allow running along with pytest-benchmarks by @art049

### <!-- 1 -->🐛 Bug Fixes
- Fix the release script by @art049
- Make the release script executable by @art049
- Match the test output in any order by @art049

### <!-- 2 -->🏗️ Refactor
- Manage compatibility env in the conftest by @art049

### <!-- 7 -->⚙️ Internals
- Add a pytest-benchmark compatibility test by @art049 in [#1](https://github.com/CodSpeedHQ/pytest-codspeed/pull/1)
- Add more details on the pytest run by @art049
- Continue running on matrix item error by @art049
- Add a CI configuration with pytest-benchmark installed by @art049


## [1.0.1] - 2022-11-05


[4.1.0]: https://github.com/CodSpeedHQ/pytest-codspeed/compare/v4.0.0..v4.1.0
[4.0.0]: https://github.com/CodSpeedHQ/pytest-codspeed/compare/v3.2.0..v4.0.0
[3.2.0]: https://github.com/CodSpeedHQ/pytest-codspeed/compare/v3.1.2..v3.2.0
[3.1.2]: https://github.com/CodSpeedHQ/pytest-codspeed/compare/v3.1.1..v3.1.2
[3.1.1]: https://github.com/CodSpeedHQ/pytest-codspeed/compare/v3.1.0..v3.1.1
[3.1.0]: https://github.com/CodSpeedHQ/pytest-codspeed/compare/v3.0.0..v3.1.0
[3.0.0]: https://github.com/CodSpeedHQ/pytest-codspeed/compare/v3.0.0b4..v3.0.0
[3.0.0b4]: https://github.com/CodSpeedHQ/pytest-codspeed/compare/v3.0.0b3..v3.0.0b4
[3.0.0b3]: https://github.com/CodSpeedHQ/pytest-codspeed/compare/v3.0.0b2..v3.0.0b3
[3.0.0b2]: https://github.com/CodSpeedHQ/pytest-codspeed/compare/v3.0.0b1..v3.0.0b2
[3.0.0b1]: https://github.com/CodSpeedHQ/pytest-codspeed/compare/v3.0.0b0..v3.0.0b1
[3.0.0b0]: https://github.com/CodSpeedHQ/pytest-codspeed/compare/v2.2.1..v3.0.0b0
[2.2.1]: https://github.com/CodSpeedHQ/pytest-codspeed/compare/v2.2.0..v2.2.1
[2.2.0]: https://github.com/CodSpeedHQ/pytest-codspeed/compare/v2.1.0..v2.2.0
[2.1.0]: https://github.com/CodSpeedHQ/pytest-codspeed/compare/v2.0.1..v2.1.0
[2.0.1]: https://github.com/CodSpeedHQ/pytest-codspeed/compare/v2.0.0..v2.0.1
[2.0.0]: https://github.com/CodSpeedHQ/pytest-codspeed/compare/v1.2.2..v2.0.0
[1.2.2]: https://github.com/CodSpeedHQ/pytest-codspeed/compare/v1.2.1..v1.2.2
[1.2.1]: https://github.com/CodSpeedHQ/pytest-codspeed/compare/v1.2.0..v1.2.1
[1.2.0]: https://github.com/CodSpeedHQ/pytest-codspeed/compare/v1.1.0..v1.2.0
[1.1.0]: https://github.com/CodSpeedHQ/pytest-codspeed/compare/v1.0.4..v1.1.0

<!-- generated by git-cliff -->
