Repository navigation
Releases: CodSpeedHQ/codspeed-node
Release list
v6.1.0
Important
CPU Simulation results change for Vitest 5 benchmarks. This release fixes a bug in @codspeed/vitest-plugin where Vitest 5 export getter tracking ran inside the measured code, inflating the measured cost of benchmarks that read module exports. The plugin now sets benchmark.suppressExportGetterWarnings to true by default, unless you set it explicitly. Even though this is a minor release, expect CPU Simulation results for Vitest 5 benchmarks to differ from those measured with 6.0.0 and 6.0.1. Benchmarks on Vitest 3 and 4 are unaffected.
What's Changed
- Disable vitest 5 tracker warning when running under codspeed by @GuillaumeLagrange in #99
Full Changelog: v6.0.1...v6.1.0
v6.0.1
CodSpeed for Node.js 6.0.1 loads again on Linux arm64 systems with an older libstdc++, such as Ubuntu 22.04 and Debian 12. In 6.0.0, the native addon failed there with version 'CXXABI_1.3.15' not found (#96).
What's Changed
- ci(release): build the linux prebuilds on ubuntu 22.04 by @GuillaumeLagrange in #97
Full Changelog: v6.0.0...v6.0.1
v6.0.0
CodSpeed for Node.js 6.0.0 adds support for Node.js 24 and 26, Vitest 5 and Vite 8.
Highlights
Node.js 24 and 26
The plugins now ship prebuilt native addons for Node.js 22, 24 and 26, and warn in CI when running on an untested major.
Vitest 5
@codspeed/vitest-plugin supports Vitest 3, 4 and 5 with no configuration change. On Vitest 5, declare benchmarks with the bench test fixture. Each benchmark passed to bench.compare() is reported as its own benchmark in CodSpeed:
import { test } from "vitest";
import { fibonacci } from "./fibonacci";
test("fibo", async ({ bench }) => {
await bench("fibo 10", () => {
fibonacci(10);
}).run();
await bench("fibo 15", () => {
fibonacci(15);
}).run();
});To compare implementations side by side, pass them to bench.compare() instead. Each benchmark in the group is still reported as its own benchmark in CodSpeed.
Check out the docs for more information!
Breaking changes
- Node.js 22 or later is now required.
- The CPU simulation instrument now disables Maglev on Node.js 24 and later, so hot functions tier up as they do on Node.js 22, and suppresses V8's minor GC task. Expect a one-time change in measured values after upgrading.
What's Changed
- build: pin -std=c11 for instrument-hooks core.c by @not-matthias in #84
- feat: support Node 24 by @not-matthias in #88
- ci(release): publish any prerelease tag under its own dist-tag by @not-matthias in #91
- feat(core): warn when running on an untested Node.js version by @not-matthias in #90
- feat(vitest-plugin): add vite 8 support by @adriencaccia in #74
- fix(vitest-plugin): stop importing the deprecated vitest subpaths by @adriencaccia in #75
- fix(vitest-plugin): call the bench setup and teardown hooks in analysis mode by @adriencaccia in #94
- fix(core): load the native addon on every Node major by @not-matthias in #92
- feat: support Node 26 by @not-matthias in #89
- ci: migrate to github default arm runners by @lvaroqui in #95
- Support vitest 5 by @GuillaumeLagrange in #86
New Contributors
Full Changelog: v5.7.1...v6.0.0
v6.0.0-beta.2
What's Changed
- fix(core): load the native addon on every Node major by @not-matthias in #92
Full Changelog: v6.0.0-beta.1...v6.0.0-beta.2
v6.0.0-beta.1
What's Changed
- feat(vitest-plugin): add vite 8 support by @adriencaccia in #74
- fix(vitest-plugin): stop importing the deprecated vitest subpaths by @adriencaccia in #75
- fix(vitest-plugin): call the bench setup and teardown hooks in analysis mode by @adriencaccia in #94
Full Changelog: v6.0.0-beta.0...v6.0.0-beta.1
v6.0.0-beta.0
Breaking changes:
- Raised the minimum required version to Node.js 22
- Added
--no-minor-gc-taskon Node >= 20 - Added
--no-maglevon Node >= 24
What's Changed
This release adds support for Node.js 24.
- build: pin -std=c11 for instrument-hooks core.c by @not-matthias in #84
- feat: support Node 24 by @not-matthias in #88
- ci(release): publish any prerelease tag under its own dist-tag by @not-matthias in #91
- feat(core): warn when running on an untested Node.js version by @not-matthias in #90
Full Changelog: v5.7.1...v6.0.0-beta.0
v5.7.1
What's Changed
- fix: emit perf maps when not parsing the full inlining logs from V8 by @GuillaumeLagrange in #85
Full Changelog: v5.7.0...v5.7.1
v5.7.0
Highlights
- Dump full inlining information for higher optimization tiers in walltime so we can show more functions on the profiler. To test it out, set
CODSPEED_WALLTIME_PROFILER=samplyenv variable in the codspeed action. - Added support for tinybench v5 and v6 in @codspeed/tinybench-plugin
What's Changed
- Add necessary flags to dump optimized inlining info and fix walltime marker placement by @GuillaumeLagrange in #83
Full Changelog: v5.6.0...v5.7.0
v5.6.0
v5.5.0
Highlights
We are introducing @codspeed/playwright, for walltime benchmarking and profiling of end to end browser applications through playwright.
Here's an example usage, but head to the docs for more information
import { bench, type Page } from "@codspeed/playwright-plugin";
import electronExecutable from "electron";
import path from "node:path";
import { fileURLToPath } from "node:url";
const __dirname = path.dirname(fileURLToPath(import.meta.url));
const appRoot = path.resolve(__dirname, "..");
async function waitUntilSettled(page: Page): Promise<void> {
await page.waitForFunction(() => {
const main = document.getElementById("main");
return !!main && !main.classList.contains("loading");
});
}
await bench(
"inbox-search-archive-threads",
async ({ page }) => {
await page.fill("#search", "update");
await waitUntilSettled(page);
await page.click("#select-visible-btn");
await page.click("#archive-btn");
await waitUntilSettled(page);
await page.click('#sidebar nav button[data-view="threads"]');
await waitUntilSettled(page);
},
{
target: {
kind: "electron",
appPath: path.join(appRoot, "out/main/index.js"),
cwd: appRoot,
},
beforeRound: async ({ page }) => {
page.setDefaultTimeout(180_000);
await page.waitForSelector("#main");
await waitUntilSettled(page);
},
},
);Note: this plugin is only compatible with the walltime instrument.
What's Changed
- Add playwright profiling package by @GuillaumeLagrange in #80
Full Changelog: v5.4.0...v5.5.0