{"id":14969246,"url":"https://github.com/cucumber/messages","last_synced_at":"2026-01-25T12:05:01.895Z","repository":{"id":41399513,"uuid":"508617978","full_name":"cucumber/messages","owner":"cucumber","description":"A message protocol for representing results and other information from Cucumber","archived":false,"fork":false,"pushed_at":"2026-01-16T00:30:04.000Z","size":4087,"stargazers_count":34,"open_issues_count":36,"forks_count":22,"subscribers_count":69,"default_branch":"main","last_synced_at":"2026-01-16T01:54:46.715Z","etag":null,"topics":["dotnet","elixir","go","java","javascript","perl","php","polyglot-release","ruby","tidelift"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cucumber.png","metadata":{"funding":{"open_collective":"cucumber","github":"cucumber"},"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2022-06-29T08:59:09.000Z","updated_at":"2026-01-16T00:29:39.000Z","dependencies_parsed_at":"2022-08-28T21:41:19.408Z","dependency_job_id":"85aa9efb-1403-4dcc-ab9e-327e2e78ad63","html_url":"https://github.com/cucumber/messages","commit_stats":{"total_commits":1372,"total_committers":31,"mean_commits":44.25806451612903,"dds":0.6756559766763848,"last_synced_commit":"73523c0b3d6b2591a2b7a1d12367c1066e567b8d"},"previous_names":[],"tags_count":93,"template":false,"template_full_name":null,"purl":"pkg:github/cucumber/messages","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cucumber%2Fmessages","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cucumber%2Fmessages/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cucumber%2Fmessages/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cucumber%2Fmessages/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cucumber","download_url":"https://codeload.github.com/cucumber/messages/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cucumber%2Fmessages/sbom","scorecard":{"id":54514,"data":{"date":"2025-08-11","repo":{"name":"github.com/cucumber/messages","commit":"d15c9ac4ac1608b291782a445590876749ace93d"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":5.9,"checks":[{"name":"Code-Review","score":2,"reason":"Found 6/27 approved changesets -- score normalized to 2","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Maintained","score":10,"reason":"30 commit(s) and 2 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: jobLevel 'contents' permission set to 'write': .github/workflows/release-cpan.yml:13","Warn: jobLevel 'contents' permission set to 'write': .github/workflows/release-github.yml:13","Warn: jobLevel 'contents' permission set to 'write': .github/workflows/release-hex.yml:13","Warn: jobLevel 'contents' permission set to 'write': .github/workflows/release-php.yml:13","Warn: no topLevel permission defined: .github/workflows/release-cpan.yml:1","Warn: no topLevel permission defined: .github/workflows/release-github.yml:1","Warn: no topLevel permission defined: .github/workflows/release-hex.yml:1","Warn: no topLevel permission defined: .github/workflows/release-mvn.yml:1","Warn: no topLevel permission defined: .github/workflows/release-npm.yml:1","Warn: no topLevel permission defined: .github/workflows/release-nuget.yml:1","Warn: no topLevel permission defined: .github/workflows/release-php.yml:1","Warn: no topLevel permission defined: .github/workflows/release-pypi.yml:1","Warn: no topLevel permission defined: .github/workflows/release-rubygem.yml:1","Warn: no topLevel permission defined: .github/workflows/test-codegen.yml:1","Warn: no topLevel permission defined: .github/workflows/test-cpp.yml:1","Warn: no topLevel permission defined: .github/workflows/test-dotnet.yml:1","Warn: no topLevel permission defined: .github/workflows/test-elixir.yml:1","Warn: no topLevel permission defined: .github/workflows/test-go.yml:1","Warn: no topLevel permission defined: .github/workflows/test-java.yml:1","Warn: no topLevel permission defined: .github/workflows/test-javascript.yml:1","Warn: no topLevel permission defined: .github/workflows/test-perl.yml:1","Warn: no topLevel permission defined: .github/workflows/test-php.yml:1","Warn: no topLevel permission defined: .github/workflows/test-python.yml:1","Warn: no topLevel permission defined: .github/workflows/test-ruby.yml:1"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Packaging","score":10,"reason":"packaging workflow detected","details":["Info: Project packages its releases by way of GitHub Actions.: .github/workflows/release-pypi.yml:8"],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Security-Policy","score":10,"reason":"security policy file detected","details":["Info: security policy file detected: github.com/cucumber/.github/SECURITY.md:1","Info: Found linked content: github.com/cucumber/.github/SECURITY.md:1","Info: Found disclosure, vulnerability, and/or timelines in security policy: github.com/cucumber/.github/SECURITY.md:1","Info: Found text in security policy: github.com/cucumber/.github/SECURITY.md:1"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release-cpan.yml:15: update your workflow using https://app.stepsecurity.io/secureworkflow/cucumber/messages/release-cpan.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release-cpan.yml:16: update your workflow using https://app.stepsecurity.io/secureworkflow/cucumber/messages/release-cpan.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release-github.yml:15: update your workflow using https://app.stepsecurity.io/secureworkflow/cucumber/messages/release-github.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release-github.yml:16: update your workflow using https://app.stepsecurity.io/secureworkflow/cucumber/messages/release-github.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release-hex.yml:16: update your workflow using https://app.stepsecurity.io/secureworkflow/cucumber/messages/release-hex.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release-hex.yml:18: update your workflow using https://app.stepsecurity.io/secureworkflow/cucumber/messages/release-hex.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release-hex.yml:23: update your workflow using https://app.stepsecurity.io/secureworkflow/cucumber/messages/release-hex.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release-hex.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/cucumber/messages/release-hex.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release-mvn.yml:13: update your workflow using https://app.stepsecurity.io/secureworkflow/cucumber/messages/release-mvn.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release-mvn.yml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/cucumber/messages/release-mvn.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release-mvn.yml:19: update your workflow using https://app.stepsecurity.io/secureworkflow/cucumber/messages/release-mvn.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release-npm.yml:13: update your workflow using https://app.stepsecurity.io/secureworkflow/cucumber/messages/release-npm.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release-npm.yml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/cucumber/messages/release-npm.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release-npm.yml:21: update your workflow using https://app.stepsecurity.io/secureworkflow/cucumber/messages/release-npm.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release-nuget.yml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/cucumber/messages/release-nuget.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release-nuget.yml:16: update your workflow using https://app.stepsecurity.io/secureworkflow/cucumber/messages/release-nuget.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release-nuget.yml:19: update your workflow using https://app.stepsecurity.io/secureworkflow/cucumber/messages/release-nuget.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release-php.yml:15: update your workflow using https://app.stepsecurity.io/secureworkflow/cucumber/messages/release-php.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release-php.yml:18: update your workflow using https://app.stepsecurity.io/secureworkflow/cucumber/messages/release-php.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release-pypi.yml:19: update your workflow using https://app.stepsecurity.io/secureworkflow/cucumber/messages/release-pypi.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release-pypi.yml:22: update your workflow using https://app.stepsecurity.io/secureworkflow/cucumber/messages/release-pypi.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release-pypi.yml:36: update your workflow using https://app.stepsecurity.io/secureworkflow/cucumber/messages/release-pypi.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release-rubygem.yml:13: update your workflow using https://app.stepsecurity.io/secureworkflow/cucumber/messages/release-rubygem.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release-rubygem.yml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/cucumber/messages/release-rubygem.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release-rubygem.yml:18: update your workflow using https://app.stepsecurity.io/secureworkflow/cucumber/messages/release-rubygem.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test-codegen.yml:30: update your workflow using https://app.stepsecurity.io/secureworkflow/cucumber/messages/test-codegen.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test-codegen.yml:33: update your workflow using https://app.stepsecurity.io/secureworkflow/cucumber/messages/test-codegen.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/test-codegen.yml:44: update your workflow using https://app.stepsecurity.io/secureworkflow/cucumber/messages/test-codegen.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test-cpp.yml:36: update your workflow using https://app.stepsecurity.io/secureworkflow/cucumber/messages/test-cpp.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/test-cpp.yml:37: update your workflow using https://app.stepsecurity.io/secureworkflow/cucumber/messages/test-cpp.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test-dotnet.yml:26: update your workflow using https://app.stepsecurity.io/secureworkflow/cucumber/messages/test-dotnet.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test-dotnet.yml:27: update your workflow using https://app.stepsecurity.io/secureworkflow/cucumber/messages/test-dotnet.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test-elixir.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/cucumber/messages/test-elixir.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/test-elixir.yml:30: update your workflow using https://app.stepsecurity.io/secureworkflow/cucumber/messages/test-elixir.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/test-elixir.yml:36: update your workflow using https://app.stepsecurity.io/secureworkflow/cucumber/messages/test-elixir.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test-go.yml:37: update your workflow using https://app.stepsecurity.io/secureworkflow/cucumber/messages/test-go.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test-go.yml:39: update your workflow using https://app.stepsecurity.io/secureworkflow/cucumber/messages/test-go.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test-java.yml:38: update your workflow using https://app.stepsecurity.io/secureworkflow/cucumber/messages/test-java.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test-java.yml:40: update your workflow using https://app.stepsecurity.io/secureworkflow/cucumber/messages/test-java.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test-javascript.yml:40: update your workflow using https://app.stepsecurity.io/secureworkflow/cucumber/messages/test-javascript.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test-javascript.yml:43: update your workflow using https://app.stepsecurity.io/secureworkflow/cucumber/messages/test-javascript.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test-perl.yml:26: update your workflow using https://app.stepsecurity.io/secureworkflow/cucumber/messages/test-perl.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/test-perl.yml:29: update your workflow using https://app.stepsecurity.io/secureworkflow/cucumber/messages/test-perl.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test-php.yml:30: update your workflow using https://app.stepsecurity.io/secureworkflow/cucumber/messages/test-php.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/test-php.yml:33: update your workflow using https://app.stepsecurity.io/secureworkflow/cucumber/messages/test-php.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test-php.yml:43: update your workflow using https://app.stepsecurity.io/secureworkflow/cucumber/messages/test-php.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test-python.yml:36: update your workflow using https://app.stepsecurity.io/secureworkflow/cucumber/messages/test-python.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test-python.yml:38: update your workflow using https://app.stepsecurity.io/secureworkflow/cucumber/messages/test-python.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test-ruby.yml:35: update your workflow using https://app.stepsecurity.io/secureworkflow/cucumber/messages/test-ruby.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/test-ruby.yml:36: update your workflow using https://app.stepsecurity.io/secureworkflow/cucumber/messages/test-ruby.yml/main?enable=pin","Warn: containerImage not pinned by hash: cpp/Dockerfile:4","Warn: containerImage not pinned by hash: cpp/Dockerfile:24","Warn: containerImage not pinned by hash: cpp/Dockerfile:33","Warn: npmCommand not pinned by hash: .github/workflows/release-npm.yml:20","Warn: pipCommand not pinned by hash: .github/workflows/release-pypi.yml:31","Warn: pipCommand not pinned by hash: .github/workflows/test-python.yml:43","Warn: pipCommand not pinned by hash: .github/workflows/test-python.yml:44","Warn: pipCommand not pinned by hash: .github/workflows/test-python.yml:45","Info:   0 out of  31 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of  19 third-party GitHubAction dependencies pinned","Info:   0 out of   3 containerImage dependencies pinned","Info:   1 out of   2 npmCommand dependencies pinned","Info:   0 out of   4 pipCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 11 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":9,"reason":"1 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-v6h2-p8h4-qcjw"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-15T00:24:10.644Z","repository_id":41399513,"created_at":"2025-08-15T00:24:10.644Z","updated_at":"2025-08-15T00:24:10.644Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28629916,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-21T04:47:28.174Z","status":"ssl_error","status_checked_at":"2026-01-21T04:47:22.943Z","response_time":86,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dotnet","elixir","go","java","javascript","perl","php","polyglot-release","ruby","tidelift"],"created_at":"2024-09-24T13:41:25.695Z","updated_at":"2026-01-21T20:02:44.153Z","avatar_url":"https://github.com/cucumber.png","language":"C#","readme":"# Cucumber Messages\n\n*Cucumber Messages* is a message protocol for representing results and other information\nfrom Cucumber. The protocol aims to decouple various components of the Cucumber platform, with the following advantages:\n\n* Each component only needs to know about a subset of messages\n* Gherkin is decoupled from the Cucumber execution component\n* Enables the future support other formats such as Markdown and Excel\n\n## Message Overview\n\n![messages.png](jsonschema/messages.png)\n\nNotes:\n * The image sketches out the general concept, but is incomplete. See [relations.md](jsonschema/relations.md) for a complete visualisation of the relationships between messages. \n * Markdown and Excel formats are currently not supported and mentioned here as potential future alternative languages to express BDD scenarios.\n\n## JSON Schema\n\nThe [jsonschema](jsonschema) directory contains [JSON Schema](https://json-schema.org/)\ndefinitions for each message type.\n\nSee [messages.md](jsonschema/messages.md) for a detailed description of each message type.\n\n## Encoding\n\nWhen Cucumber Messages are stored in a file or sent over a network, they are\nencoded as NDJSON. We call this a *message stream*.\n\nEach message in a message stream is of type [Envelope](jsonschema/messages.md#envelope).\n\n## Language implementations\n\nEach subdirectory defines language-specific implementations of these messages,\ngenerated from the JSON schemas. The current implementations are:\n\n### Languages automatically released for every version\n\nThe release process for the below languages uses [polyglot-release](./RELEASING.md)\n\n- .NET\n- Java\n- Javascript\n- Perl\n- PHP\n- Python\n- Ruby\n\n### Go\n\nThe Go implementation is also cut for every version but is just maintained as a GitHub tag\n\n### C++\n\nThis is currently tested but not automatically released. We are seeking help for this implementation\n\n### Elixir\n\nThere is also a subdirectory for Elixir which contains the legacy implementation which was largely\ndriven by protobuf. This has recently been re-integrated into our CI and will be ported over to\nthe JSON schema protocol in due course, for now it remains written in protobuf\n\n## Message emitters\n\nCucumber Messages are currently sent by the following versions of Cucumber (using the `message` formatter):\n\n* Cucumber-JVM `6.0.0` and later\n* Cucumber-Ruby `4.0.0` and later\n* Cucumber.js `7.0.0` and later\n\nMessages emitters for the other Cucumber languages (e.g. Perl) are not yet implemented. \n\n## Why Cucumber Messages\n\nCucumber needs to produce results in a machine-readable format so that other tools can generate reports.\n\n![messages-stream.svg](jsonschema/messages-stream.svg)\n\nHistorically, Cucumber did this with the `json` and `junit` formatters.\nThese formats however, have several shortcomings that are now addressed by using Cucumber Messages.\n\nThe `json` formatter is now in maintenance mode for these implementations, and Messages is the preferred standard.\nSee [utilities](#utilities) for a list of tools that may help with backward and forward compatibility\nwith the `json` format.\n\n### High memory footprint\n\nJSON and XML production/consumption is done by serialising/deserialising an object graph. For \"big\" Cucumber\nruns this graph may consume a considerable amount of RAM, in particular if several large attachments\n(screenshots) are attached.\n\nThis can cause out of memory errors, aborting Cucumber runs or reporting jobs. It also means that no results can be\nconsumed by downstream processors until the last scenario has finished.\n\nWith Cucumber Messages, several messages containing smaller pieces of information are emitted\ncontinuously to a *stream* (NDJSON, see above), avoiding high memory consumption and enabling real-time processing\nof results.\n\n### Lack of a schema\n\nThe JSON reporter does not have a formal schema. This has led to slightly inconsistent implementations\nof the JSON formatter in various Cucumber implementations. Consumers of the JSON format have\nto anticipate and detect these inconsistencies and try to cope with them.\n\n### Limited information\n\nThe `junit` XML format can only contain very limited information such as test case name and status.\nWhile there isn't an official schema for JUnit XML, there are a few defacto ones around which are very limited.\n\nThe `json` format represents the following information:\n\n* Gherkin source (as a rough and lossy representation of a Gherkin document's abstract syntax tree)\n* Attachments (formerly called `embeddings`)\n* Path and line for step definitions\n* Results for hooks\n\nHowever, it does not contain the following information (but Cucumber Messages does):\n\n* Original source code of the Gherkin document\n* Gherkin document abstract syntax tree\n* Step definitions\n* Parameter types\n\nThis kind of information is required to produce rich reports and analytics, and is\nused in [@cucumber/react-components](https://github.com/cucumber/react-components) and [Cucumber Reports](https://reports.cucumber.io/).\n\n## Examples\n\nYou will find examples of Cucumber Messages in the [compatibility-kit](https://github.com/cucumber/compatibility-kit/) project.\n\n## Utilities\n\n* [@cucumber/react](https://github.com/cucumber/cucumber-react) - React component that renders Cucumber Messages nicely\n  * Used internally by [Cucumber Reports](https://reports.cucumber.io/).\n","funding_links":["https://opencollective.com/cucumber","https://github.com/sponsors/cucumber"],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcucumber%2Fmessages","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcucumber%2Fmessages","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcucumber%2Fmessages/lists"}