{"id":43066994,"url":"https://github.com/cloudchacho/hedwig-go","last_synced_at":"2026-01-31T12:51:34.984Z","repository":{"id":39851478,"uuid":"369601818","full_name":"cloudchacho/hedwig-go","owner":"cloudchacho","description":"Messaging bus for micro-services that works on cloud native queues https://cloudchacho.github.io/hedwig/","archived":false,"fork":false,"pushed_at":"2025-06-18T18:31:31.000Z","size":9384,"stargazers_count":1,"open_issues_count":1,"forks_count":3,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-06-18T19:27:52.638Z","etag":null,"topics":["distributed-systems","message-bus","messagebus","messaging","microservices"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cloudchacho.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","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}},"created_at":"2021-05-21T17:00:29.000Z","updated_at":"2025-06-18T18:14:55.000Z","dependencies_parsed_at":"2024-06-20T22:08:25.618Z","dependency_job_id":null,"html_url":"https://github.com/cloudchacho/hedwig-go","commit_stats":null,"previous_names":[],"tags_count":19,"template":false,"template_full_name":null,"purl":"pkg:github/cloudchacho/hedwig-go","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cloudchacho%2Fhedwig-go","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cloudchacho%2Fhedwig-go/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cloudchacho%2Fhedwig-go/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cloudchacho%2Fhedwig-go/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cloudchacho","download_url":"https://codeload.github.com/cloudchacho/hedwig-go/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cloudchacho%2Fhedwig-go/sbom","scorecard":{"id":292388,"data":{"date":"2025-08-11","repo":{"name":"github.com/cloudchacho/hedwig-go","commit":"5b1f51bdf0f56268becae5ab55135d7fdb3a5f8a"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.6,"checks":[{"name":"Code-Review","score":7,"reason":"Found 22/30 approved changesets -- score normalized to 7","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":1,"reason":"2 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 1","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Binary-Artifacts","score":9,"reason":"binaries present in source code","details":["Warn: binary detected: examples/examples:1"],"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":"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":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/golangci-lint.yml:1","Warn: no topLevel permission defined: .github/workflows/gotest.yml:1","Info: no jobLevel write permissions found"],"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":"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":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"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":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"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":"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":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE.md:0","Info: FSF or OSI recognized license: Apache License 2.0: LICENSE.md:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"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":"Pinned-Dependencies","score":2,"reason":"dependency not pinned by hash detected -- score normalized to 2","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/golangci-lint.yml:25: update your workflow using https://app.stepsecurity.io/secureworkflow/cloudchacho/hedwig-go/golangci-lint.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/golangci-lint.yml:31: update your workflow using https://app.stepsecurity.io/secureworkflow/cloudchacho/hedwig-go/golangci-lint.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/golangci-lint.yml:34: update your workflow using https://app.stepsecurity.io/secureworkflow/cloudchacho/hedwig-go/golangci-lint.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/gotest.yml:19: update your workflow using https://app.stepsecurity.io/secureworkflow/cloudchacho/hedwig-go/gotest.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/gotest.yml:26: update your workflow using https://app.stepsecurity.io/secureworkflow/cloudchacho/hedwig-go/gotest.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/gotest.yml:30: update your workflow using https://app.stepsecurity.io/secureworkflow/cloudchacho/hedwig-go/gotest.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/gotest.yml:44: update your workflow using https://app.stepsecurity.io/secureworkflow/cloudchacho/hedwig-go/gotest.yml/main?enable=pin","Info:   0 out of   4 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   3 third-party GitHubAction dependencies pinned","Info:   1 out of   1 goCommand 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":"Vulnerabilities","score":0,"reason":"17 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GO-2024-2611 / GHSA-8r3f-844c-mc37","Warn: Project is vulnerable to: GO-2022-0635","Warn: Project is vulnerable to: GO-2022-0646","Warn: Project is vulnerable to: GO-2022-0969 / GHSA-69cg-p879-7622","Warn: Project is vulnerable to: GO-2023-1495 / GHSA-fxg5-wq6x-vr4w","Warn: Project is vulnerable to: GO-2022-1144 / GHSA-xrjj-mj9h-534m","Warn: Project is vulnerable to: GO-2023-1571 / GHSA-vvpx-j8f3-3w6h","Warn: Project is vulnerable to: GO-2023-1988 / GHSA-2wrh-6pvc-2jm9","Warn: Project is vulnerable to: GO-2023-2102 / GHSA-4374-p667-p6c8","Warn: Project is vulnerable to: GO-2023-2153 / GHSA-m425-mq94-257g / GHSA-qppj-fm5r-hxr3","Warn: Project is vulnerable to: GO-2024-2687 / GHSA-4v7x-pqxf-cx7m","Warn: Project is vulnerable to: GO-2024-3333","Warn: Project is vulnerable to: GO-2025-3503 / GHSA-qxp5-gwg8-xv66","Warn: Project is vulnerable to: GO-2025-3595 / GHSA-vvgc-356p-c3xw","Warn: Project is vulnerable to: GO-2025-3488 / GHSA-6v2p-p543-phr9","Warn: Project is vulnerable to: GO-2022-1059 / GHSA-69ch-w2m2-3vjp","Warn: Project is vulnerable to: GO-2022-0603 / GHSA-hp87-p4gw-j4gq"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 24 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"}}]},"last_synced_at":"2025-08-17T18:36:29.644Z","repository_id":39851478,"created_at":"2025-08-17T18:36:29.644Z","updated_at":"2025-08-17T18:36:29.644Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28943638,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-31T12:10:04.904Z","status":"ssl_error","status_checked_at":"2026-01-31T12:09:58.894Z","response_time":128,"last_error":"SSL_read: 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":["distributed-systems","message-bus","messagebus","messaging","microservices"],"created_at":"2026-01-31T12:51:34.296Z","updated_at":"2026-01-31T12:51:34.977Z","avatar_url":"https://github.com/cloudchacho.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Hedwig Library for Go\n\n[![Build Status](https://github.com/cloudchacho/hedwig-go/checks)](https://github.com/cloudchacho/hedwig-go/actions/workflows/gotest.yml/badge.svg)\n[![Go Report Card](https://goreportcard.com/badge/github.com/cloudchacho/hedwig-go)](https://goreportcard.com/report/github.com/cloudchacho/hedwig-go)\n[![Godoc](https://godoc.org/github.com/cloudchacho/hedwig-go?status.svg)](http://godoc.org/github.com/cloudchacho/hedwig-go)\n[![codecov](https://codecov.io/gh/cloudchacho/hedwig-go/branch/main/graph/badge.svg?token=H6VWFF04JD)](https://codecov.io/gh/cloudchacho/hedwig-go)\n\nHedwig is an inter-service communication bus that works on AWS and GCP, while keeping things pretty simple and straight\nforward.\n\nIt allows validation of the message payloads before they are sent, helping to catch cross-component incompatibilities\nearly.\n\nHedwig allows separation of concerns between consumers and publishers so your services are loosely coupled, and the\ncontract is enforced by the message payload validation. Hedwig may also be used to build asynchronous APIs.\n\nFor intra-service messaging, see [Taskhawk](https://github.com/cloudchacho/taskhawk-go).\n\nTo learn more, [read the docs](https://cloudchacho.github.io/hedwig).\n\n## Fan Out\n\nHedwig utilizes SNS for fan-out configuration. A publisher publishes messages on a topic. This message may be received by zero or more consumers. The publisher need not be aware of the consuming application. There are a variety of messages that may be published as such, but they generally fall into two buckets:\n\n- **Asynchronous API Requests**: Hedwig may be used to call APIs asynchronously. The contract is enforced by your infra-structure by connecting SNS topics to SQS queues, and payload is validated using the schema you define. Response is a delivered using a separate message if required.\n- **Notifications**: The most common use case is to notify other services/apps that may be interested in events. For example, your User Management app can publish a user.created message notification to all your apps. As publishers and consumers are loosely coupled, this separation of concerns is very effective in ensuring a stable eco-system.\n\n## Provisioning\n\nHedwig works on SQS and SNS as backing queues. Before you can publish/consume messages, you need to provision the\nrequired infra. This may be done manually, or, preferably, using Terraform. Hedwig provides tools to make infra\nconfiguration easier: see [Terraform Google](https://github.com/cloudchacho/terraform-google-hedwig) for further \ndetails.\n\n## Quick Start\n\nFirst, install the library:\n\n```bash\ngo get github.com/cloudchacho/hedwig-go\n```\n\nCreate a protobuf schema and save as ``schema.proto``:\n\n```protobuf\nsyntax = \"proto2\";\n\npackage main;\n\nimport \"hedwig/protobuf/options.proto\";\n\noption go_package = \"example.com/hedwig;main\";\n\nmessage SendEmailV1 {\n    option (hedwig.message_options).major_version = 1;\n    option (hedwig.message_options).minor_version = 0;\n    option (hedwig.message_options).message_type = \"email.send\";\n\n    string to = 1;\n    string message = 1;\n}\n```\n\nClone hedwig Options definition file and compile your schema:\n```shell\ngit clone github.com/cloudchacho/hedwig /usr/local/lib/protobuf/include/hedwig/\nprotoc -I/usr/local/lib/protobuf/include -I. --go_out=. schema.proto\n```\n\nIn publisher application, initialize the publisher:\n\n```go\n    settings := aws.Settings {\n        AWSAccessKey:    \u003cYOUR AWS KEY\u003e,\n        AWSAccountID:    \u003cYOUR AWS ACCOUNT ID\u003e,\n        AWSRegion:       \u003cYOUR AWS REGION\u003e,\n        AWSSecretKey:    \u003cYOUR AWS SECRET KEY\u003e,\n        AWSSessionToken: \u003cYOUR AWS SESSION TOKEN\u003e, \n    }\n    backend := aws.NewBackend(settings, nil)\n\tencoderDecoder := protobuf.NewMessageEncoderDecoder([]proto.Message{\u0026SendEmailV1{}})\n    routing := map[hedwig.MessageRouteKey]string{\n        {\n            MessageType:    \"email.send\",\n            MessageMajorVersion: 1,\n        }: \"send_email\",\n    }\n    publisher := hedwig.NewPublisher(backend, encoderDecoder, encoderDecoder, routing)\n```\n\nAnd finally, send a message:\n\n```go\n    headers := map[string]string{}\n    msg, err := hedwig.NewMessage(\"email.send\", \"1.0\", headers, data, \"myapp\")\n    if err != nil {\n        return err\n    }\n    err := publisher.Publish(context.Background(), msg)\n```\n\nIn consumer application, define your callback:\n\n```go\n    // Handler\n    func HandleSendEmail(ctx context.Context, msg *hedwig.Message) error {\n        to := msg.data.(*SendEmailV1).GetTo()\n\t\t// actually send email\n    }\n```\n\nAnd start the consumer:\n```go\n    settings := aws.Settings {\n        AWSAccessKey:    \u003cYOUR AWS KEY\u003e,\n        AWSAccountID:    \u003cYOUR AWS ACCOUNT ID\u003e,\n        AWSRegion:       \u003cYOUR AWS REGION\u003e,\n        AWSSecretKey:    \u003cYOUR AWS SECRET KEY\u003e,\n        AWSSessionToken: \u003cYOUR AWS SESSION TOKEN\u003e, \n    }\n    backend := aws.NewBackend(settings, nil)\n\tencoderDecoder := protobuf.NewMessageEncoderDecoder([]proto.Message{\u0026SendEmailV1{}})\n    registry := hedwig.CallbackRegistry{{\"email.send\", 1}: HandleSendEmail}\n    consumer := hedwig.NewConsumer(backend, encoderDecoder, nil, registry)\n    err := consumer.ListenForMessages(context.Background(), hedwig.ListenRequest{})\n```\n\nFor more complete code, see [examples](examples).\n\n## Development\n\n### Prerequisites\n\nInstall go1.11.x\n\n### Getting Started\n\n```bash\n\n$ cd ${GOPATH}/src/github.com/cloudchacho/hedwig-go\n$ go build\n```\n\n### Running Tests\n\n```bash\n\n$ make test\n```\n\n## Getting Help\n\nWe use GitHub issues for tracking bugs and feature requests.\n\n* If it turns out that you may have found a bug, please [open an issue](https://github.com/cloudchacho/hedwig-go/issues/new\u003e)\n\n## Release notes\n\n### v0.8\n\n- Cleaned up interfaces to be more idiomatic Go\n\n### v0.7\n\n- Initial version \n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcloudchacho%2Fhedwig-go","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcloudchacho%2Fhedwig-go","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcloudchacho%2Fhedwig-go/lists"}