npm / @cucumber/cucumber
@cucumber/cucumber
What changed in @cucumber/cucumber 8 to 13, from its official release notes, upgrade guides and advisories. Sources checked 2026-11-03.
34 breaking5 deprecations10 new APIs and options1 performance9 behavior and defaults16 fixes and other
See which of these apply to your code, ranked, in your agent:
npx @unstale/cli init@cucumber/cucumber 1321 changes
Breaking changes 8
AfterAll hooks are always executed.
Deprecated handling of ambiguous formats has been removed.
The Cli class is no longer exported. Use the runCucumber function from the JavaScript API to run Cucumber programmatically.
Additional colons in paths are no longer handled on a best-effort basis when parsing CLI formats. Quote both sides of the delimiter to avoid ambiguity.
FORCE_COLOR is set based on the deprecated format option.
Output for summary, progress, progress bar, and pretty formatters has been redesigned.
BeforeAll and AfterAll hooks always execute, even if other hooks have failed; ensure they can handle potentially incomplete state.
The parallel runtime has been reimplemented with worker threads, changing how parallel execution works.
Deprecations 4
willBeRetried is deprecated in After hooks.
The printAttachments format option is deprecated in favour of includeAttachments.
The legacy ProgressFormatter class is deprecated in favour of the new formatter architecture.
The legacy SummaryFormatter class is deprecated in favour of the new formatter architecture.
New APIs and options 2
Steps can now use both a data table and a doc string.
Adds an option to choose where global hooks run.
Behavior and default changes 1
The Error.cause chain, including stack frames, is surfaced in output.
Fixes and other changes 6
Fixes a hang in the parallel runtime when there are no test cases to run.
The ESM entry point now gets all exported types.
Prevents a formatter error when a test step result is missing.
Unexpected exits from parallel workers are now handled.
Undefined and ambiguous results are handled correctly when skipped.
Status colors now match those used by other formatters.
@cucumber/cucumber 1226 changes
Breaking changes 3
Support for Node.js 18.x has been removed.
Support for Node.js 23.x has been removed.
The publishQuiet option has been removed.
Deprecations 1
The format option is deprecated in favour of environment variables.
New APIs and options 8
Plugins can now listen for the new publish:url event.
Adds support for a custom externalising option.
External plugins are now allowed, enabling developers to extend Cucumber with plugins.
Config files can now be loaded in TypeScript format.
BeforeAll and AfterAll hooks can be named.
Messages are emitted for test run hooks.
The After hook parameters now include the original error.
The AfterStep hook parameters now include the original error.
Performance 1
Report content is compressed with gzip before publishing.
Behavior and default changes 6
Assertion info is now included in the stack trace.
Cucumber warns about paths merged from config and CLI, helping developers identify configuration overlap.
The HTML report is rendered in a more test case-centric way.
Messages are emitted for suggestions.
Comments are now allowed inside descriptions.
The HTML formatter header has been redesigned.
Fixes and other changes 7
Thrown strings are now handled correctly.
Resolves a dependency issue involving junit-xml-formatter and query.
Environment variables now reach child processes when running in parallel mode.
Fixes error type resolution.
Building source references now handles ESM.
Node.js 25.x is supported.
Node.js 24.x is now supported.
@cucumber/cucumber 114 changes
Breaking changes 4
Support for Node.js 21 was removed.
The previously deprecated parseGherkinMessageStream API was removed.
The previously deprecated PickleFilter API was removed.
The previously deprecated Runtime API was removed.
@cucumber/cucumber 106 changes
Breaking changes 5
Configuration files are loaded using the appropriate module loading mechanism.
Custom formatters and snippet syntaxes are loaded with await import().
Default support code is loaded with await import().
Attached string literals are base64-encoded in JSON reports.
Support for Node.js 14, 16 and 19 is dropped.
Fixes and other changes 1
Node.js 20 is supported.
@cucumber/cucumber 92 changes
Breaking changes 2
The generator snippet interface was removed.
Support for Node.js versions 12 and 17 was removed.
@cucumber/cucumber 816 changes
Breaking changes 12
The Cli constructor now requires env, the environment variables used to detect some configuration options.
The Cli constructor now requires stderr, a writable stream for warning and error output.
Absolute paths for custom formatters and snippet syntaxes must be provided as valid file:// URLs.
Subpath exports restrict which package internals Node.js can resolve, including implicit resolution of /index.js.
Generator functions in step definitions are no longer natively supported; use async/await or wrap generators with your own dependencies.
The getConfiguration method is removed from the programmatic Cli API.
The getSupportCodeLibrary method is removed from the programmatic Cli API.
The initializeFormatters method is removed from the programmatic Cli API.
The --predictable-ids CLI option is removed; it was only used for internal testing.
The --retryTagFilter CLI option is removed; use --retry-tag-filter instead.
Relative paths for snippet syntaxes must begin with a dot.
The After hook argument's result no longer contains willBeRetried; the property is available at the top level of the argument.
Behavior and default changes 2
Relative paths for custom formatters must begin with a dot.
Cucumber emits a warning when run with a Node.js version that has not been tested.
Fixes and other changes 2
Custom formatters can rely on transpilers loaded with --require-module.
Formatter and snippet paths in options can use file:// URLs.