All notable changes to this project will be documented in this file.
This project adheres to Semantic Versioning.
This document is formatted according to the principles of Keep A CHANGELOG.
- [Ruby] Changed
ParserMessageStreamto accept keyword arguments allowing theGherkinclass methods to be slightly more optimal
- [c] Fixed memory leak with respekt to the pickle ast ids.
- [c] Fixed potential read past null terminator. Fixed allocation of more memoroy than necessary (#559).
- [PHP] Fix PHP 8.4 deprecation warnings.
- [cpp] Added missing include guard in parser.hpp (#554)
- [cpp] Removed unreachable code in parser.hpp (#554)
- [Python] Drop support for python 3.9.
39.0.0 - 2026-03-01
- (i18n) Added Korean translation of "Rule" (#544)
- [PHP] Require PHP 8.2+ in CI and in composer.json.
- [Python] Fixed hidden file reading behavior in
Parser.parse(#541).
- [cpp] Removed unused vector_type definition (#549).
38.0.0 - 2026-01-22
- [Java] Set release version to 17 (#507).
- [.NET, Elixir, Go, JavaScript, Java, Perl, Php, Ruby] Update dependency messages to v32
37.0.1 - 2025-12-22
- [.NET] Support calling Methods in GherkinLine on default value (#503).
37.0.0 - 2025-11-19
- Add
locationtoPickle(#433)
- BREAKING CHANGE: Require messages v31 or greater
- [Java] Fixed
AstNodeconditions which never occur inGherkinDocumentBuilder(#497).
36.1.0 - 2025-11-05
- [Java] Add OSGi metadata (#485)
36.0.0 - 2025-10-09
- [.NET, Elixir, Go, JavaScript, Java, Perl, Php, Ruby] Update dependency messages to v30
- [Java] Only use
org.assertj:assertj-coreintestscope.
35.1.0 - 2025-09-20
- (I18n) ru: Added word "Значения" as a synonym for examples (#479
- [Java] Optimize
StrinUtils.isWhitespace(#468)
35.0.0 - 2025-09-11
- [.NET, Elixir, Go, JavaScript, Java, Perl, Php, Ruby] Update dependency messages to v29
- [.NET] Don't trim whitespaces before escape character (#467)
- [Python] Dropped legacy input-output processor (#459)
34.0.0 - 2025-08-17
- Fixed Afrikaans translation for "rule" (#428)
- [.NET] Migrated to the use of Cucumber/Messages. Eliminated the built-in Gherkin.CucumberMessages.Types (#426)
- [Java] Deprecate
GherkinDialectProviderin favour ofGherkinDialects(#448)
- [.Net] Handle all ambiguous keywords properly (#435)
- [Java] Optimize
GherkinLine.substringTrimmed(#444) - [Java] Improve performance with a generated keyword matcher (#445)
- [Python] Dropped legacy
.egg-infometadata distribution artifacts
33.1.0 - 2025-07-27
- [Java] Optimize GherkinParser performance (#436)
- [Go] Trim trailing tab characters from title and step lines (#441)
- [Java] Use a more consistent definition of whitespace (#442)
33.0.0 - 2025-07-07
- [Elixir, Go, JavaScript, Java, Perl, Php, Ruby] Update dependency messages to v28 (#420)
32.2.0 - 2025-07-07
- [Perl] Support for Gherkin in Markdown format (MDG)
- [C] Prefer the longest step keyword (#417)
- [cpp] Actually allow comment inside descriptions (#414)
- [cpp] Add missing translations for Rule (#415)
- [cpp] Prefer the longest step keyword (#416)
- [Python] Fix acceptance tests (#64)
32.1.2 - 2025-05-25
- [cpp] Actually use the VERSION file (#376)
- [Java] Prefer the longest step keyword (#401)
- [.NET] Prefer the longest step keyword (#405)
- [PHP] Prefer the longest step keyword (#403)
- [Go] Prefer the longest step keyword (#403)
- [JavaScript] Prefer the longest step keyword (#407)
- [Perl] Prefer the longest step keyword (#408)
- [Ruby] Prefer the longest step keyword (#409)
- [Python] Prefer the longest step keyword (#410)
32.1.1 - 2025-04-11
- [Java] Avoid unnecessary unboxing to Character
32.1.0 - 2025-04-04
- [Java] Optimize GherkinLine performance (#361)
- [Java] Optimize number of array copies (#388)
- [Java] Optimize Location performance (#385)
- [Java] Optimize AstNode performance (#383)
- [Java] Optimize EncodingParser performance (#382)
- [Java] Optimize GherkinDialect performance (#380)
32.0.1 - 2025-03-27
- [Python] Fix a regression when a feature file only has a comment in the description
32.0.0 - 2025-02-17
- [.NET] Reduce NuGet size by only targeting .NET Standard 2.0
- [.NET] Changed some types from class to struct, removed IGherkinLine interface and changes some functions from Array to Enumerable
- [Ruby] Update minimum ruby requirement from 3.0 to 3.2
- [Ruby] Introduce rubocop subgems to facilitate optimisations
- [JavaScript] BREAKING CHANGE: Update supported Node.js versions to 18, 20, 22 and 23 (#365)
- [.NET] Fix NuGet package generation
- [c] Optimise error handling for empty datatable rows
- [Perl] Optimise error handling for unclosed DocStrings
31.0.0 - 2025-01-29
- [All] Allow comment inside descriptions (#334)
- [.NET] Enabled overriding of parser's error-handling
- [Python] Expose Python public API as package imports (#352)
- [Python] Added support for Python 3.13
- [cpp] add generic support for ABI versioning with VERSION (#328)
- [cpp] namespace was changed to 'cucumber::gherkin' to better reflect project structure and prevent clashing
- [.NET] Removed dependency on System.Text.Json and related logic in GherkinDialectProvider
- [Elixir] Updates dependencies, bumps messages to 27.0.2
- [c] slight update to existing CMakeFiles.txt to propagate VERSION. Close #320 (#328)
- [.NET] Improved parsing time
- [.NET] Use string-ordinal comparison consistently and remove old Mono workaround
- [.NET] Improved startup time
- [Python] Dropped support for Python 3.8
30.1.3 - 2025-11-05
- Update Java release process
30.1.2 - 2025-11-05
- Update Java release process
30.1.1 - 2025-11-05
- Release v30.1.1 as a copy of v30.0.4 to cover v36.1.0 that was accidentally released as v30.1.0
30.1.0 - 2025-11-05
- [Java] Add OSGi metadata (#485)
- [.NET] Support calling Methods in GherkinLine on default value
30.0.4 - 2024-11-15
- [Python] File gherkin-languages.json was not included as package data
30.0.3 - 2024-11-14
- [Python] Release process (still) didn't release to pypi correctly
30.0.2 - 2024-11-14
- [Python] Release process (again) didn't release to pypi correctly
- [Elixir] Restored test and release process
30.0.1 - 2024-11-12
- [Ruby] Fixed up some style autofix cops (#311)
- [Ruby] Internal rewrites to razor template variables and
TokenFormatterBuilder) (#311)
- [Python] Release process didn't release to pypi correctly
- [Python, JavaScript] Remove executable permissions from
.razorfiles (#310)
30.0.0 - 2024-10-24
- [PHP, Java, Ruby, JavaScript] update dependency messages up to v26
- [Python] Added type annotations (#283)
- [Python] Switch to pyproject.toml (#290)
- [.NET] Added .NET 9 to test matrix
- [.NET] Drop unsupported frameworks. Now supported target frameworks are .NET 8, .NET Standard 2.0 (#265)
- [.NET] Adopt File Scoped Namespaces c# feature (#271)
- [.NET] Adopt c# 12 primary constructors (#272)
- [.NET] Adopt c# 10 ImplicitUsings
- [.NET] Replace TinyJson to System.Text.Json
- [.NET] Enable warnings as errors
- [Ruby] Initial rubocop autofixes (Mainly to style) (#266)
- [.NET] Update System.Text.Json to 6.0.10
- [Python] Drop compatibility for python 2 and python 3.8. Supported python versions: 3.9, 3.10, 3.11, 3.12, 3.13
- [Python] Removed installation of
gherkinscript. It was used for internal acceptance tests only.
29.0.0 - 2024-08-12
- (i18n) Added Gujarati translation for "Rule" (#249)
- [Ruby] Skeleton to begin technical refactor of internals (#259)
- [Java, JavaScript, PHP, Go, Ruby] Upgraded messages to v25
- [Ruby] Update minimum ruby requirement from 2.5 to 3.0 (#259)
- [.NET] Provide informative exception for trailing escapes in tables (#245)
- [Perl] Provide informative exception for trailing escapes in tables (#245)
- [Ruby] Provide informative exception for trailing escapes in tables (#244)
- [Python] Provide informative exception for trailing escapes in tables (#241)
- (i18n) Provide trailing space in Irish step keywords (#243)
- (i18n) Provide trailing space in Korean step keywords (#254)
- (i18n) Tamil "And" and "But" translations should have single trailing space (#243)
- (i18n) Remove duplicate scenario keyword from "sr-Cyrl" (#264)
- Intermittent failure of cpp test jobs in CI (#217)
28.0.0 - 2024-02-15
- [Python] Added release workflow for releasing to Pypi (#213)
- (i18n) Added Vietnamese translation of "Rule" (#204)
- (i18n) Added Irish translation of "Rule" (#216)
- [Python] Reuse the action cucumber/action-publish-pypi in release (#220)
- [Python] Removed duplicate code in markdown token matcher (#205)
- [Java, JavaScript, PHP, Go, Ruby] Upgraded messages to v24
27.0.0 - 2023-09-15
- (i18n) Added Malayalam localization
- (i18n) Added 'ed' to Italian (#31)
- (i18n) Added Danish translation of "Rule"
- (i18n) Added Dutch translation of "Rule"
- (i18n) Added Esperanto translation of "Rule"
- [Ruby] Added
Gherkin::Query#parent_locationsfor determining a scenario's parents' line numbers (#89) - C++ implementation #117
- [.NET] Bump sdk to .net 8. Added .net 8 to test platforms
- [Go, Perl, Ruby] Upgraded messages to v22
- [Go] Improve performance - don't compile regex on matcher create
- [Perl] Fix release packaging
- [Perl] Include CHANGELOG.md in tarball
- [Perl] Harmonized error reporting with mainstream implementations - errors are now converted to messages and reported in the message stream (#31)
- [Ruby] Update minimum ruby requirement from 2.3 to 2.5
26.2.0 - 2023-04-07
- Upgraded messages to v22
26.1.0 - 2023-03-23
- (i18n) Add Belarusian localization
26.0.3 - 2023-01-03
- [Javascript, PHP, Ruby] Allow messages v19.1.4 to v20.0.1 to be used
- [Java] Improve text trim performance (#84)
26.0.2 - 2022-12-27
- [Go] Fix module names (again)
26.0.1 - 2022-12-17
- [Go] Fix module names
26.0.0 - 2022-12-17
- [Java] Enabled reproducible builds
- Upgraded messages to v21
- [.NET] Update target frameworks fo .NET 6, .NET Framework 4.6.2, .NET Standard 2.0
- Link to the correct repository in various package meta-data.
- [Perl] Specify version range for
Cucumber::Messagesdependency (#50)
25.0.2 - 2022-11-09
- Fix half-glyph in Georgian translations (#44)
25.0.1 - 2022-11-09
- Fix release process for perl and elixir
25.0.0 - 2022-11-09
- Additional
ja(Japanese) translations forand,but - Added
amh(Amharic) translation - Add
ФичаandШаблон примераas more convenient translations (#2078)
ja(Japanese)Ruletranslation changed fromRuletoルール
- Translations fixed for
ka(Georgian) locale
24.1.0 - 2022-10-10
- [Java] Added support for reading directly from input (files, streams, paths, ect)
- [C] The C implementation re-enabled and made up to date. (#1989)
- [Javascript] Include tags from rules in scenario outlines (#2091)
- [Python] Fix gherkin-python for compiling example values with trailing backslash (#2048, #1954)
- [PHP] Disallow installation of Messages
18.x(#2034)
24.0.0 - 2022-05-31
- [Java], [JavaScript], [PHP], [Perl], [Python], [Go], [C], [DotNet], [Ruby] Support new messages keyword types fields an added with #1966 (#1741)
- [Java] the
GherkinDialectconstructor is no longer public (it's only used internally) - [Go] the
gherkin.GherkinDialectsBuildinid renamed togherkin.DialectsBuiltin - [Go] the
gherkin.GherkinDialectid renamed togherkin.Dialect - [Go] the
gherkin.GherkinDialectProviderid renamed togherkin.DialectProvider - The
ne(Nepali)andtranslation changed fromअनीtoअनि - The
uz(Uzbek)giventranslation changed fromАгарtoBelgilangan - The
en-old(Old English)whentranslation changed fromTha/Þa/ÐatoBæþsealf/Bæþsealfa/Bæþsealfe/Ciricæw/Ciricæwe/Ciricæwa
23.0.1 - 2022-03-31
- [PhP] Fix dependency of messages (#1943)
23.0.0 - 2022-03-30
- Update
messagesto v18.0.0 - [Java] Replaced
Gherkinwith aGherkinParserthat uses a builder to construct. - [Java] Made all internal classes package private
- [Java] Removed unused
stopAtFirstErrorproperty fromParser - [PHP] Implemented
Gherkin - [JavaScript]
@cucumber/message-streamshas been removed from the dependencies. If you are using@cucumber/gherkin-streamsv5.0.0 or later, you have to add@cucumber/message-streamsin your dependencies in addition to@cucumber/gherkin.
- [Java] the
io.cucumber.gherkin.Mainclass is no longer part of the jar.
22.0.0 - 2021-09-23
- [Perl] Documentation for most of the modules (#1740 ehuelsmann)
- [Perl] Changed API to pass around
Cucumber::Messagesinstead of hashesand increased minimum Perl version in accordance withCucumber::Messages(to 5.14; from 5.12) (#1735ehuelsmann)
- [Perl] Failure to include CHANGELOG.md in the release tarball (#1728 ehuelsmann)
21.0.0 - 2021-09-01
- [JavaScript] Expose
Errorsobject.
- Fixed
Ruletranslation forhi,sr-Cyrl,sr-Latnandtr(aslakhellesoy) - [Java] Renamed
Token#mathcedItemstoToken#matchedItems(#1687 aslakhellesoy) - [Perl] Minimum Perl version upgraded to 5.12 (from 5.10.1) (#1665 ehuelsmann)
- [Perl] Dependency on
IO::Scalarremoved (#1665 ehuelsmann)
20.0.1 - 2021-07-19
- Update
messagesto v17.0.1
20.0.0 - 2021-07-08
- Update messages to v17.0.0
- Update
rulepolish translation (#1579 l310) - Add US Texan translations. (#1625 willmac321)
- [Go] Move module paths to point to monorepo (#1550)
- [Ruby] Usage of Message DTOs instead of plain ruby hashes (#1603)
- [Ruby] Rules weren't inheriting the relevant tags during the Gherkin Query stage (Where it caches the NodeID) (#1593 luke-hill)
- MDG parser correctly removes leading space from content in DocStrings
19.0.3 - 2021-05-24
- MDG files must use the
.feature.mdextension. - Data Tables and Examples Tables in Markdown must be indented 2-5 spaces in order tobe recognised.
19.0.2 - 2021-05-19
- Upgrade to
@cucumber/message-streams^2.0.0 - Upgrade berp to 1.3.0 (parser behavior not changed) (#1542 gasparnagy)
19.0.1 - 2021-05-17
- [Perl] Updated to pass acceptance tests. (#1552 ehuelsmann)
19.0.0 - 2021-05-15
- [JavaScript] Experimental support for Markdown. See MARKDOWN_WITH_GHERKIN.md (#1209 aslakhellesoy)
- [DotNet] Replaced Utf8Json with source-embedded TinyJson. (#511 gasparnagy)
- Update Dutch translation of the "Rule" keyword. (#1513 OrhanTozan)
- Update Russian translation of the "Scenario Outline" keyword. (#1499 hkosova)
- Update Hungarian translation of the "Rule" keyword. (#1518 gasparnagy)
- [Go, Java, JavaScript, Ruby] Upgrade to messages 16.0.0: this may have a big impact on APIs.Please see messages/CHANGELOG.md for more details.
- [Perl] Reinstate Perl 5.10.1 compatibility. (#1495 #1494 ehuelsmann)
- [DotNet] Fixed .NET Gherkin compatibility with other Gherkin implementations. (#511 gasparnagy)
- [Elixir] The package was not released - it needs to be updated to pass acceptance tests.
- [Perl] The package was not released - it needs to be updated to pass acceptance tests.
18.1.1 - 2021-04-22
18.1.0 - 2021-04-06
- Python implementation re-enabled, with support for
Rulekeyword. (#1449 brasmusson)
18.0.0 - 2021-03-24
- [Perl] New APIs to spawn message streams:
Gherkin->from_pathsandGherkin->from_source(#1359 ehuelsmann) - [All] Rules can be tagged. Scenarios that belong to the rule "inherit" the rule tags. (#1356 [sebrose], gasparnagy, brasmusson, WannesFransen1994)
- [Perl] DOS line endings support on all platforms (not just DOS/Windows) (ehuelsmann)
- [Perl] Release engineering changes to make it non-interactive, update CHANGELOG.md correctly (#1350) ehuelsmann
- [JavaScript] the
GherkinStreamsexport has moved from@cucumber/gherkinto@cucumber/gherkin-streams - [JavaScript] the
gherkin-javascriptexecutable has moved to the new@cucumber/gherkin-streamsnpm module
17.0.2 - 2021-02-16
- [Perl] Release archive too large (8MB -> ) (#1350) ehuelsmann
- [Perl] Minimum Perl version (5.10.1) incorrectly declared, leading to CPANTESTERS failures (#1350) ehuelsmann
- [Perl] Kwalitee (Perl release quality checker) complaints/errors (#1350) ehuelsmann
17.0.1 - 2021-02-08
- Fix building of MacOS (darwin) executables. (#1347 #1348 aslakhellesoy)
17.0.0 - 2021-02-07
- [JavaScript] the
GherkinStreamsobject is not longer loaded by default. This makes it possible to use the library in a browser without a polyfill. To upgrade, useimport GherkinStreams from '@cucumber/gherkin/dist/src/stream/GherkinStreams'instead ofimport { GherkinStreams } from 'gherkin'. (#1333) - [Perl] Fully overhauled implementation, moving it up from 4.0.0 (#711, #1286) ehuelsmann
- Use Spanish translation for the "Rule" keyword and for the "Feature" synonym keywords (#1360 sergioforerogomez)
- Use Italian translation for the "Rule" keyword and for the "Feature" synonym keywords (#1318 mgiustiniani)
- Use Swedish translation for the "Rule" keyword (#1297 johnknoop)
- Elixir implementation - make sure the gherkin_languages.json is added with the release package. (#1293 WannesFransen1994)
- [JavaScript] removed circular dependencies. (#1292 davidjgoss)
- [JavaScript] remove
IGherkinOptions#createReadStream. This function was introduced in9.1.0in order to decouple this lib from the Node.jsfslibrary. This decoupling was improved in #1333 which made it obsolete. (Fixes #1284
16.0.0 - 2020-12-10
- [Elixir] New implementation! (#1251 WannesFransen1994)
- [JavaScript] The
Queryclass has been removed from this library, and has been added to@cucumber/gherkin-utils
15.0.2 - 2020-08-17
- Revert removal of Gherkin keywords from 15.0.1
15.0.1 - 2020-08-12
- Do not use this release. The removal of Gherkin keywords breaks backwards compatibility for Creole and French, and this should have been released as a major release. The keywords are restored in 15.0.2, and we'll remove them again in a future major release.
- Remove keyword aliases that only differ by letter case (French, Creole). The reason for this is that Cucumber-JVM generates annotation classes for each step keyword, and some file systems are case insensitive. This led to inconsistencies in the classes that were generated during the build. Removing these keywords fixes this problem. Theoretically this should trigger a new major release, but because the change is so minor and will affect very few users we've made this a patch release.
15.0.0 - 2020-08-07
- Update
messagesto 13.0.1
14.2.0 - 2020-07-31
- Update
messagesto 12.4.0
14.1.0 - 2020-07-29
- Update
messagesto 12.3.2
14.0.2 - 2020-06-29
- [JavaScript] Actually merge #1094 - it wasn't done in 14.0.1
- [JavaScript] Throw NoSuchLanguageException when language is unknown #1102 (#1102 mpkorstanje)
14.0.1 - 2020-06-29
- [JavaScript] Remove test code from exports (#1094 aslakhellesoy)
14.0.0 - 2020-06-27
- [Java] Enable consumers to find our version at runtime using
clazz.getPackage().getImplementationVersion()by upgrading tocucumber-parent:2.1.0(#976 aslakhellesoy) - [Java/Ruby/Go/Javascript] Add tests to ensure we do not delete whitespace inside a table cell (#769 mpkorstanje)
- Upgrade to messages 12.2.0
- [Ruby] gherkin-query: if a feature file is empty, do not update anything. (cucumber-ruby#1427 vincent-psarga)
- [JavaScript] Change gherkinQuery API: *
getPickleIds: now takes a URI and anastNodeIdto find the pickle ids instead of a line number *getPickleStepIds: now takes anastNodeIdparameter instead of a URL and a line number to locate the pickle step id * exposeparseandparseAndCompileutilities - Fixed Estonian translation of "Rule" (#973 ookull)
- Fixed Estonian translation of "Scenario Outline" (#972 ookull)
- [JavaScript] Update
gherkin-languages.json, which hadn't been updated for a few versions (not sure for how long!) - [Ruby] Fix the default constructor of
Gherkin::Parser(#1074 aslakhellesoy) - [Ruby] Use
require_relativefor internal requires (#1010 deivid-rodriguez) - [Javascript] Escape regex characters in table header (#1077 mpkorstanje)
13.0.0 - 2020-04-14
- Upgrade to messages 12.0.0
12.0.0 - 2020-03-31
- [JavaScript] New exports: *
Parser*compile(#924 davidjgoss) - [JavaScript] Add
Query#getPickles() - [JavaScript] Export
compilefunction for compilingPickles
- Upgrade to messages 11.x
- [JavaScript] The default export has been removed. Replaced with: *
import { GherkinStreams } from 'gherkin'to use thefromPaths,fromStreamandfromSourcesfunctions *import { dialects } from 'gherkin'to access dialects - [JavaScript]
Dialectproperties are read only - [JavaScript]
fromPaths,fromStreamandfromSourcesnow useReadOnlyArrayto prevent modifying the passed array.
- [JavaScript]
Gherkin.fromPathsis not a function (#857 #949 aslakhellesoy)
11.0.0 - 2020-03-02
- [JavaScript] Renamed
GherkinQuerytoQuery
- Update Indonesian Gherkin Language (#872 [#KniveX])
- [JavaScript] Removed
StrictMapandStrictArrayMultiMap
10.0.0 - 2020-02-13
- Upgrade to messages v10.0.1
- [Java/JavaScript/Go/Ruby] Fix parsing of commented tags (880, 721 mpkorstanje)
- [JavaScript]
Gherkin#fromPathsemits an error if a path can't be read (for example if it is a directory) - [Java/JavaScript/Ruby/Go] Escape triple backticks in alternative docstring (#889 mpkorstanje)
9.2.0 - 2020-01-22
- [JavaScript] Add
getGherkinDocuments(): messages.IGherkinDocument[] - [JavaScript] Add `getPickleStepIds(uri: string, lineNumber: number): string[]``
- [JavaScript] Change signature of
getPickleIds(uri: string, lineNumber?: number): string[]-lineNumberis optional - [JavaScript]
getPickleIdsonly operates on pickles, and not on pickle steps
9.1.0 - 2020-01-10
- [Ruby] Added
Gherkin::Querythat providesLocationfor various AST nodes. (#845 aslakhellesoy vincent-psarga)
- Upgrade to
messages9.0.1 - [JavaScript] the
Gherkin#fromStream,Gherkin#fromPathsandGherkin#fromSourcesfunctions'optionsargument is no longer optional, and it must have acreateReadStreamproperty. The reason for this is to decouple the library from Node'sfsmodule so it can be packaged with Webpack and be used in a browser.
9.0.0 - 2019-12-10
- Renamed
--jsoncommand line option to--format protobuf|ndjson - Upgrade to
cucumber-messages8.0.0
8.2.1 - 2019-11-22
- Do not trim leading newlines (#891 mpkorstanje)
- PickleStep have unique IDs when generated from a
Backgroundsection (#800 vincent-psarga)
8.2.0 - 2019-11-14
- [Ruby] Make CI build work on Ruby 2.3, 2.4, 2.5 and 2.6 (#777 vincent-psarga)
8.1.1 - 2019-10-17
- [Ruby] Replace internal
ProtobufMessageStreamwithProtobufIoEnumerator
8.1.0 - 2019-10-16
- Better Indonesian translation (#733 milhcbt)
- New Nepali translation (#729 ankitpokhrel)
- New Marathi keywords (#731 #758 upgundecha)
- [Java] restore native Java parser (#750 aslakhellesoy)
- [JavaScript] -
GherkinExeexposesstderr(#723 charlierudolph)
- [JavaScript] -
GherkinExe(after it was fixed)
8.0.0 - 2019-10-03
- New keywords for German (#352 #707 #708 coderbyheart)
- Upgrade cucumber-messages to 6.0.1
- [JavaScript] restore native JavaScript parser (#709 #689 badeball)
- [Ruby] restore native ruby parser (#702 brasmusson)
- [Go, Ruby] Fix trimming of whitespace in example cells (#703 aslakhellesoy)
7.0.4 - 2019-08-29
- Upgrade to cucumber-messages 5.0.1
7.0.3 - 2019-08-15
- [Ruby] Fix inclusion of gherkin executables
7.0.2 - 2019-08-14
- Upgrade to c21e 2.0.0
7.0.1 - 2019-08-14
- The 7.0.0 release failed
7.0.0 - 2019-08-14
- [TypeScript] dialect support (#597 charlierudolph)
- Populate the
Pickle#idfield with a SHA1 hash of the source + line + column.
- [TypeScript] ExeFile not a constructor (#641 #634 joscha)
- [Java,TypeScript] Fix parsing of long documents. (#566 aslakhellesoy)
6.0.17 - 2019-03-31
- Upgrade to cucumber-messages 2.1.2
6.0.15 - 2018-10-31
- (Go) Executables are uploaded to GitHub releases.
- Fix bug where leading tabs prevented parser from identifying keywords (#512 [VjacheslavVytjagov])
- [JavaScript] Fix JavaScript build (#499 noisygerman)
6.0.13 - 2018-09-25
- (TypeScript) - Added TypeScript definitions (
.d.ts) for Gherkin. - Added
Rulekeyword (#250 aslakhellesoy) - Added
Exampleas synonym forScenarioin English and many other languages. This is to align Gherkin with BDD and Example Mapping terminology. (aslakhellesoy) - Added
Ukolikoas an additional synonym forGiven, in Croatian. (#480 banovotz)
- This major release aligns Gherkin with Example Mapping, a collaborative technique for designing scenarios and discovering details about rules and behaviour. A new
Rulekeyword has been introduced, and acts as a grouping of one or moreExamples - a new synonym forScenario. TheScenario Outlinekeyword can now be interchanged with theScenariokeyword, which makes Gherkin a little less confusing, especially to beginners. These are the first major change to the Gherkin grammar in 8 years or so, and we're pretty excited about them. We hope they will guide people towards thinking of scenarios as examples of business rules rather than a series of form submissions and link clicking. This rule-focused style engages product owners, and can act as amazing living documentation of your product. It opens up for the true benefits of BDD - a business-friendly format for describing and agreeing on software behaviour, and a guide to development. Developers will code against this spec, and produce better (simpler) software faster. The software will do what it says on the tin. The new Gherkin grammar is backwards compatible, meaning that existing Gherkin documents are still valid. The library API however is not backwards compatible. It is now a stream-like API which produces a stream of messages (source, AST and pickle messages). Internally, each library shells out to a go executable (embedded in the library for all major OSes and processor architectures), and communicates via STDIN/STDOUT using protocol buffers. The rationale behind this architectural change is to reduce the maintenance burden (a single parser rather than a dozen), but also to make it quicker and easier to implement a Gherkin library in a new language. Just generate some protobuf classes/structs and write a small program that shells out and communicates using those messages. Our preliminary benchmarks suggest that performance is comparable to the native implementations, or better. There is a small hit in startup cost, but this is offset against a higher throughput of the parser. At the time of this writing Gherkin 6 is nearly integrated in Cucumber-JVM and Cucumber-Ruby. Integration with Cucumber.js has not started and we would really welcome some help with that. The message protocol will continue to evolve to represent runtime information such as results, parameter types, cucumber expressions and other metadata. This will make it easier for the community to build plugins for Cucumber. One HTML Gherkin formatter to rule them all. Statistic plugins and more. - (JavaScript,Java,Ruby) The native parsers are removed. Parsing is done by
gherkin-goexecutables which are bundled with the published libraries. (aslakhellesoy, [jaysonesmith]) - (JavaScript,Java,Ruby,Go)
Scenariokeyword (orExamplekeyword) can be used to createScenario Outline. (#353 aslakhellesoy)
- (JavaScript) Fix ability to pass language to parser. (#401 charlierudolph)
- (Java) OSGi support has been removed. (#412 aslakhellesoy)
5.1.0 - 2018-05-30
- (.NET) - Better .NET Core support
- Support for Aragonese (#298 danilat)
- (C) build a shared
libgherkin.solibrary which allows Gherkin to be used as a library. (Cucumber.ml currently uses this.) (cucumber/gherkin-c#6 cyocum)
- Pass the content type of a docstring down into its pickle string form (#292 rjwittams)
- Fixed Russian equivalents of
GivenandThen. (#369 cerebellum13)
- (C) Segfault when file does not exist (#394 #395 cyocum)
- (JavaScript) (#374 #377 charlierudolph)
- (Ruby, JavaScript) Remove berp.exe from packages (#289 aslakhellesoy)
- (Go) fixes validation for go vet tool on latest versions (#330 l3pp4rd)
- (Ruby) removed unneeded files from the gem
5.0.0 - 2017-10-13
- Ability to specify an initial language for the parser, so that the
# languageheader isn't required (#288 by charlierudolph and aslakhellesoy) - A better wording for the Greek translation of
Scenario Outline(Περίγραμμα Σεναρίου) (#185 by pmatsinopoulos) - Added female, singular
Givenin Romanian (Dată fiind) (#202 by tsundberg) - (C) CMake support (#2 #3 by Pwera)
- Compile empty scenarios to empty pickles (#249 #264 by brasmusson)
4.1.3 - 2017-05-04
- (JavaScript) Fix gherkin/javascript/examples so Gherkin loads in browser (#197 by aslakhellesoy)
- (JavaScript) Don't depend on fs in the library (#196 by aslakhellesoy)
- (Python) Fix executable (#194 #157 by aslakhellesoy)
- (C) Fix Windows related issues (#193 #168 by brasmusson)
- (C) Fix
uriin pickles on C command line (#176 #165 by brasmusson) - (Go) Add missing error handling (#170 by l3pp4rd)
- (Go) Fix build on go 1.8 (#137 #162 by l3pp4rd)
- (Python) Fix build on python 3.4 (#138 #158 by brasmusson)
4.1.2 - 2017-05-03
- Something went wrong during this release - do not use
4.1.1 - 2017-03-16
- (JavaScript, Ruby, Python) Packages include executabled. (#155 by aslakhellesoy)
- (Python) Python package 4.1.0 broken (#153 #156 by aslakhellesoy)
4.1.0 - 2017-03-16
- (.NET, Java, JavaScript, Ruby, Python) Streaming API and command line client. (#240)
- (Java): Add accessors for languages and dialect keywords. (#248 by brasmusson)
- (All): Add the language to the Pickles (#251 by brasmusson)
- (C): New parser and compiler in C (#187 by brasmusson)
- (I18n) mk-Cyrl/mk-Latn: Added Macedonian language (#249 by nikolovski)
- (Build) Automate the version update for the sub-projects (#211 by brasmusson)
- (Java) Make the jar a bundle to support execution in OSGi containers (#221 by brasmusson)
- (Java) Using full path when loading gherkin-languages.json (#225 by mauriciotogneri)
- (I18n) ru: Added word "Затем" as a synonym for when steps (#246 by dobiedad)
- (I18n) Georgian language (#218 by Pr-Mex)
- (I18n) nl: Added "Wanneer" as a synonym for when steps (#218 by jmezach)
- (I18n) ast: Add Asturian translation (#209 by ajspadial)
- (I18n) az: Add Azerbaijani translation (#218 by nalekberov)
- (Java) Add a getter for the tags of a pickle by brasmusson)
- Gherkin has moved from cucumber/gherkin to the cucumber/cucumber monorepo
- (.NET) Migrated code to .NET Core (#215 by SabotageAndi)
- (I18n) Russian translation fix (#255 by ehpc)
- (Javascript) Check for module before window (#204 by charlierudolph)
4.0.0 - 2016-04-10
- (JavaScript) Expose dialects (#177 by charlierudolph)
- (Perl) new implementation! (#161 by pjlsergeant)
- (Objective-C) Added Objective-C example to the README (#152 by Ahmed-Ali)
- (I18n) ru: Add "Функциональность" as translation of Feature (#165 by nixel2007)
- This is a major release because of two backwards-incompatible changes. First, the AST returned by the parser is a
GherkinDocumentnode, with afeatureproperty pointing to aFeaturenode. Prior to this release the parser would return aFeaturenode. Second, theFeaturenode now has an array/list ofchildrenthat areBackground,ScenarioorScenarioOutline. Other noteworthy changes is several minor improvements to bring the grammar closer to Gherkin 2. - (All) Allow emtpy Feature files (#189 by aslakhellesoy, brasmusson, enkessler)
- (All) Rename Feature.scenarioDefinitions to Feature.children (by aslakhellesoy)
- (All) Background as part of Feature.children (#174 by aslakhellesoy)
- (All) Remove scenario keyword from pickles (#176 by charlierudolph)
- (All) Don't make pickles out of step-less scenarios (#175 by enkessler)
- (Ruby) More consistent AST node types (#158 by enkessler)
- (All) Allow incomplete scenario outlines (#160, #170 by brasmusson)
- (Ruby) Use require instead of require_relative (#173 by maximeg)
- (JavaScript) Fixed undefined reference to stopOnFirstError on ES6 (by aslakhellesoy)
- (Python) Add the
gherkin.picklespackage to the Python installation (#157, #156 by Zearin) - (Ruby, Java) Make parser work even when system encoding ($LANG) is not UTF-8. (#151 by aslakhellesoy)
- (JavaScript) Remove bower package by aslakhellesoy)
3.2.0 - 2016-01-12
- (I18n) Mongolian translation of Gherkin (#140 by jargalan)
- (I18n) Emoji translation of Gherkin (by aslakhellesoy)
- (Python) Implemented compiler (#124 by Zearin)
- (Objective C) New implementation (#110 by LiohAu)
- (All) changed package/module/repo name from
gherkin3togherkin. (Python package is calledgherkin-official) - (I18n) Improved Malay translation of Gherkin (#132 by gabanz)
- (I18n) Improved Irish translation of Gherkin (#135 by merrua)
- (All) Escape only '|', 'n' and '' in table cells (#114 by brasmusson)
- (I18n) Support stricter French grammar (#134 by moreau-nicolas)
- (All) the AST's
DocStringcontentTypeproperty is not defined rather than an empty string when the Gherkin doc doesn't specify the type after three backticks. (by aslakhellesoy)
- (Python) Fix i18n support when parsing features from strings. (by brasmusson)
- (All) Do not change escaped docstring separators in descriptions (#115 by brasmusson)
- (Travis CI) Build Objective-C on Travis. Fix Travis language settings. (#122, #118, by brasmusson)
- (Python) Don't monkey-patch
io.StringIOintoken_scanner.py(#121 by zbmott) - (JavaScript) Interpolate replaces globally (#108 by charlierudolph)
- (JavaScript) Make parser work on Node 0.10 and 4.1 (by aslakhellesoy)
- (Go) Fix lookahead bug in the parser (by brasmusson)
3.1.2 - 2015-10-04
- (All)
TokenMatchernow accepts a default language (previously, only JavaScript had this behavior) (#78 by brasmusson) - (Ruby)
Parser.parsenow accepts aString,StringIO,IOorTokenScanner(#100 by maxmeyer) - (JavaScript) Add browserified
dist/gherkin.jsanddist/gherkin.min.js(by aslakhellesoy)
- (Python) Use
@propertiesinDialectclass (#86 by Zearin) - (Ruby)
Parser.parsenow treatsStringas source (not a file path)
- (Ruby) Fix lookahead bug in the parser (#104 by brasmusson and aslakhellesoy)
- (Python) Fix file parsing on Windows (#93 by brasmusson)
3.1.1 - 2015-09-03
- (All) Add Bosnian (#48 by paigehf)
- (All) Add support for
\n, '|', and '' in table cells (#40, #71, by koterpillar) - (JavaScript) Default arguments for
Parser(builder)andParser.parse(scanner, matcher)(by aslakhellesoy) - (JavaScript) It's now possible to pass a string directly to
Parser.parse() - (Python) It's now possible to pass a string directly to
Parser.parse()(by aslakhellesoy)
3.1.0 - 2015-08-16
- (Java) Change Maven
groupIdartifact frominfo.cukestoio.cucumber
- (All) Multiple calls to
parse()cannot use the same instance ofAstBuilder(#62) - (Python)
gherkin-languages.jsonnot packaged (#63)
- (JavaScript) Remove
tea-errordependency
- First release