{"id":30141209,"url":"https://github.com/bsv-blockchain/go-batcher","last_synced_at":"2026-05-07T16:40:08.498Z","repository":{"id":305080671,"uuid":"1021658686","full_name":"bsv-blockchain/go-batcher","owner":"bsv-blockchain","description":"High-performance batch processing for Go applications","archived":false,"fork":false,"pushed_at":"2026-05-01T13:05:01.000Z","size":1072,"stargazers_count":1,"open_issues_count":0,"forks_count":2,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-05-01T13:27:43.970Z","etag":null,"topics":["batcher","batching","bitcoin","bitcoinsv","bsv","golang","teranode"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bsv-blockchain.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":".github/CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":".github/CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":".github/SECURITY.md","support":".github/SUPPORT.md","governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":".github/AGENTS.md","dco":null,"cla":null},"funding":{"github":"bsv-blockchain"}},"created_at":"2025-07-17T18:28:42.000Z","updated_at":"2026-05-01T13:04:37.000Z","dependencies_parsed_at":"2026-04-22T17:01:03.671Z","dependency_job_id":null,"html_url":"https://github.com/bsv-blockchain/go-batcher","commit_stats":null,"previous_names":["bsv-blockchain/go-batcher"],"tags_count":14,"template":false,"template_full_name":"bsv-blockchain/go-template","purl":"pkg:github/bsv-blockchain/go-batcher","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bsv-blockchain%2Fgo-batcher","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bsv-blockchain%2Fgo-batcher/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bsv-blockchain%2Fgo-batcher/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bsv-blockchain%2Fgo-batcher/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bsv-blockchain","download_url":"https://codeload.github.com/bsv-blockchain/go-batcher/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bsv-blockchain%2Fgo-batcher/sbom","scorecard":{"id":926040,"data":{"date":"2025-08-25T08:00:51Z","repo":{"name":"github.com/bsv-blockchain/go-batcher","commit":"e1027ea9cff1db97c8ed0b56a50d3b95522a2ea3"},"scorecard":{"version":"v5.2.1","commit":"ab2f6e92482462fe66246d9e32f642855a691dc1"},"score":7.6,"checks":[{"name":"Maintained","score":0,"reason":"project was created within the last 90 days. Please review its contents carefully","details":["Warn: Repository was created within the last 90 days."],"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#maintained"}},{"name":"Code-Review","score":1,"reason":"Found 3/22 approved changesets -- score normalized to 1","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/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#code-review"}},{"name":"Dependency-Update-Tool","score":10,"reason":"update tool detected","details":["Info: detected update tool: Dependabot: .github/dependabot.yml:1"],"documentation":{"short":"Determines if the project uses a dependency update tool.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#dependency-update-tool"}},{"name":"Security-Policy","score":10,"reason":"security policy file detected","details":["Info: security policy file detected: .github/SECURITY.md:1","Info: Found linked content: .github/SECURITY.md:1","Info: Found disclosure, vulnerability, and/or timelines in security policy: .github/SECURITY.md:1","Info: Found text in security policy: .github/SECURITY.md:1"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#security-policy"}},{"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/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#binary-artifacts"}},{"name":"Token-Permissions","score":10,"reason":"GitHub workflow tokens follow principle of least privilege","details":["Warn: jobLevel 'contents' permission set to 'write': .github/workflows/auto-merge-on-approval.yml:91","Info: jobLevel 'actions' permission set to 'read': .github/workflows/codeql-analysis.yml:30","Info: jobLevel 'contents' permission set to 'read': .github/workflows/codeql-analysis.yml:31","Warn: jobLevel 'contents' permission set to 'write': .github/workflows/dependabot-auto-merge.yml:90","Warn: jobLevel 'contents' permission set to 'write': .github/workflows/fortress.yml:314","Info: jobLevel 'contents' permission set to 'read': .github/workflows/pull-request-management.yml:87","Info: jobLevel 'contents' permission set to 'read': .github/workflows/pull-request-management.yml:255","Info: jobLevel 'contents' permission set to 'read': .github/workflows/pull-request-management.yml:340","Info: jobLevel 'contents' permission set to 'read': .github/workflows/pull-request-management.yml:433","Warn: jobLevel 'actions' permission set to 'write': .github/workflows/pull-request-management.yml:537","Info: jobLevel 'contents' permission set to 'read': .github/workflows/pull-request-management.yml:538","Warn: jobLevel 'contents' permission set to 'write': .github/workflows/pull-request-management.yml:640","Info: jobLevel 'contents' permission set to 'read': .github/workflows/sync-labels.yml:104","Warn: jobLevel 'contents' permission set to 'write': .github/workflows/update-pre-commit-hooks.yml:94","Warn: jobLevel 'contents' permission set to 'write': .github/workflows/update-python-dependencies.yml:101","Info: topLevel 'contents' permission set to 'read': .github/workflows/auto-merge-on-approval.yml:41","Info: topLevel 'pull-requests' permission set to 'read': .github/workflows/auto-merge-on-approval.yml:42","Info: topLevel 'contents' permission set to 'read': .github/workflows/codeql-analysis.yml:22","Info: topLevel 'pull-requests' permission set to 'read': .github/workflows/dependabot-auto-merge.yml:38","Info: topLevel 'contents' permission set to 'read': .github/workflows/dependabot-auto-merge.yml:37","Info: topLevel 'contents' permission set to 'read': .github/workflows/fortress-benchmarks.yml:42","Info: topLevel 'contents' permission set to 'read': .github/workflows/fortress-code-quality.yml:53","Info: topLevel 'contents' permission set to 'read': .github/workflows/fortress-performance-summary.yml:73","Info: topLevel 'contents' permission set to 'read': .github/workflows/fortress-release.yml:47","Info: topLevel 'contents' permission set to 'read': .github/workflows/fortress-security-scans.yml:52","Info: topLevel 'contents' permission set to 'read': .github/workflows/fortress-setup-config.yml:101","Info: topLevel 'contents' permission set to 'read': .github/workflows/fortress-test-makefile.yml:26","Info: topLevel 'contents' permission set to 'read': .github/workflows/fortress-test-suite.yml:57","Info: topLevel 'contents' permission set to 'read': .github/workflows/fortress.yml:47","Info: topLevel 'contents' permission set to 'read': .github/workflows/pull-request-management.yml:38","Info: topLevel 'contents' permission set to 'read': .github/workflows/scorecard.yml:23","Info: topLevel 'security-events' permission set to 'read': .github/workflows/scorecard.yml:24","Info: topLevel 'contents' permission set to 'read': .github/workflows/stale-check.yml:34","Info: topLevel 'contents' permission set to 'read': .github/workflows/sync-labels.yml:38","Info: topLevel 'contents' permission set to 'read': .github/workflows/update-pre-commit-hooks.yml:45","Info: topLevel 'contents' permission set to 'read': .github/workflows/update-python-dependencies.yml:52"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#token-permissions"}},{"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/ab2f6e92482462fe66246d9e32f642855a691dc1/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/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#cii-best-practices"}},{"name":"Pinned-Dependencies","score":10,"reason":"all dependencies are pinned","details":["Info: Possibly incomplete results: error parsing job operating system: .github/workflows/fortress-benchmarks.yml:60","Info: Possibly incomplete results: error parsing job operating system: .github/workflows/fortress-benchmarks.yml:75","Info: Possibly incomplete results: error parsing job operating system: .github/workflows/fortress-benchmarks.yml:170","Info: Possibly incomplete results: error parsing job operating system: .github/workflows/fortress-benchmarks.yml:178","Info: Possibly incomplete results: error parsing job operating system: .github/workflows/fortress-benchmarks.yml:205","Info: Possibly incomplete results: error parsing job operating system: .github/workflows/fortress-test-suite.yml:75","Info: Possibly incomplete results: error parsing job operating system: .github/workflows/fortress-test-suite.yml:90","Info: Possibly incomplete results: error parsing job operating system: .github/workflows/fortress-test-suite.yml:187","Info: Possibly incomplete results: error parsing job operating system: .github/workflows/fortress-test-suite.yml:195","Info: Possibly incomplete results: error parsing job operating system: .github/workflows/fortress-test-suite.yml:223","Info: Possibly incomplete results: error parsing job operating system: .github/workflows/fortress-test-suite.yml:233","Info: Possibly incomplete results: error parsing job operating system: .github/workflows/fortress.yml:131","Info:  73 out of  73 GitHub-owned GitHubAction dependencies pinned","Info:   7 out of   7 third-party GitHubAction dependencies pinned","Info:   3 out of   3 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/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#pinned-dependencies"}},{"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/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#signed-releases"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#vulnerabilities"}},{"name":"SAST","score":10,"reason":"SAST tool is run on all commits","details":["Info: SAST configuration detected: CodeQL","Info: all commits (7) are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#sast"}},{"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/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#packaging"}},{"name":"Fuzzing","score":10,"reason":"project is fuzzed","details":["Info: GoBuiltInFuzzer integration found: batcher_fuzz_test.go:19","Info: GoBuiltInFuzzer integration found: batcher_fuzz_test.go:95","Info: GoBuiltInFuzzer integration found: batcher_fuzz_test.go:186","Info: GoBuiltInFuzzer integration found: batcher_fuzz_test.go:265","Info: GoBuiltInFuzzer integration found: batcher_fuzz_test.go:360"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#fuzzing"}},{"name":"License","score":9,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Warn: project license file does not contain an FSF or OSI license."],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#license"}},{"name":"Branch-Protection","score":5,"reason":"branch protection is not maximal on development and all release branches","details":["Info: 'allow deletion' disabled on branch 'master'","Info: 'force pushes' disabled on branch 'master'","Warn: 'branch protection settings apply to administrators' is disabled on branch 'master'","Warn: 'stale review dismissal' is disabled on branch 'master'","Warn: required approving review count is 1 on branch 'master'","Warn: codeowners review is not required on branch 'master'","Warn: 'last push approval' is disabled on branch 'master'","Warn: no status checks found to merge onto branch 'master'","Info: PRs are required in order to make changes on branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#branch-protection"}},{"name":"Contributors","score":3,"reason":"project has 1 contributing companies or organizations -- score normalized to 3","details":["Info: found contributions from: skyetel @buxorg @bitcoinschema @tonicpow  @bitcoin-sv"],"documentation":{"short":"Determines if the project has a set of contributors from multiple organizations (e.g., companies).","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#contributors"}},{"name":"CI-Tests","score":10,"reason":"7 out of 7 merged PRs checked by a CI test -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project runs tests before pull requests are merged.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#ci-tests"}}]},"last_synced_at":"2025-08-26T03:38:09.446Z","repository_id":305080671,"created_at":"2025-08-26T03:38:09.447Z","updated_at":"2025-08-26T03:38:09.447Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32746407,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-07T02:14:30.463Z","status":"ssl_error","status_checked_at":"2026-05-07T02:14:29.405Z","response_time":62,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6: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":["batcher","batching","bitcoin","bitcoinsv","bsv","golang","teranode"],"created_at":"2025-08-11T04:35:18.296Z","updated_at":"2026-05-07T16:40:08.491Z","avatar_url":"https://github.com/bsv-blockchain.png","language":"Go","funding_links":["https://github.com/sponsors/bsv-blockchain"],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n# ⚡\u0026nbsp;\u0026nbsp;go-batcher\n\n**High-performance batch processing for Go applications**\n\n\u003cbr/\u003e\n\n\u003ca href=\"https://github.com/bsv-blockchain/go-batcher/releases\"\u003e\u003cimg src=\"https://img.shields.io/github/release-pre/bsv-blockchain/go-batcher?include_prereleases\u0026style=flat-square\u0026logo=github\u0026color=black\" alt=\"Release\"\u003e\u003c/a\u003e\n\u003ca href=\"https://golang.org/\"\u003e\u003cimg src=\"https://img.shields.io/github/go-mod/go-version/bsv-blockchain/go-batcher?style=flat-square\u0026logo=go\u0026color=00ADD8\" alt=\"Go Version\"\u003e\u003c/a\u003e\n\u003ca href=\"https://github.com/bsv-blockchain/go-batcher/blob/master/LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/badge/license-OpenBSV-blue?style=flat-square\" alt=\"License\"\u003e\u003c/a\u003e\n\n\u003cbr/\u003e\n\n\u003ctable align=\"center\" border=\"0\"\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"right\"\u003e\n       \u003ccode\u003eCI / CD\u003c/code\u003e \u0026nbsp;\u0026nbsp;\n    \u003c/td\u003e\n    \u003ctd align=\"left\"\u003e\n       \u003ca href=\"https://github.com/bsv-blockchain/go-batcher/actions\"\u003e\u003cimg src=\"https://img.shields.io/github/actions/workflow/status/bsv-blockchain/go-batcher/fortress.yml?branch=master\u0026label=build\u0026logo=github\u0026style=flat-square\" alt=\"Build\"\u003e\u003c/a\u003e\n       \u003ca href=\"https://github.com/bsv-blockchain/go-batcher/commits/master\"\u003e\u003cimg src=\"https://img.shields.io/github/last-commit/bsv-blockchain/go-batcher?style=flat-square\u0026logo=git\u0026logoColor=white\u0026label=last%20update\" alt=\"Last Commit\"\u003e\u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"right\"\u003e\n       \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; \u003ccode\u003eQuality\u003c/code\u003e \u0026nbsp;\u0026nbsp;\n    \u003c/td\u003e\n    \u003ctd align=\"left\"\u003e\n       \u003ca href=\"https://goreportcard.com/report/github.com/bsv-blockchain/go-batcher\"\u003e\u003cimg src=\"https://goreportcard.com/badge/github.com/bsv-blockchain/go-batcher?style=flat-square\" alt=\"Go Report\"\u003e\u003c/a\u003e\n       \u003ca href=\"https://codecov.io/gh/bsv-blockchain/go-batcher\"\u003e\u003cimg src=\"https://codecov.io/gh/bsv-blockchain/go-batcher/branch/master/graph/badge.svg?style=flat-square\" alt=\"Coverage\"\u003e\u003c/a\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n\n  \u003ctr\u003e\n    \u003ctd align=\"right\"\u003e\n       \u003ccode\u003eSecurity\u003c/code\u003e \u0026nbsp;\u0026nbsp;\n    \u003c/td\u003e\n    \u003ctd align=\"left\"\u003e\n       \u003ca href=\"https://scorecard.dev/viewer/?uri=github.com/bsv-blockchain/go-batcher\"\u003e\u003cimg src=\"https://api.scorecard.dev/projects/github.com/bsv-blockchain/go-batcher/badge?style=flat-square\" alt=\"Scorecard\"\u003e\u003c/a\u003e\n       \u003ca href=\".github/SECURITY.md\"\u003e\u003cimg src=\"https://img.shields.io/badge/policy-active-success?style=flat-square\u0026logo=security\u0026logoColor=white\" alt=\"Security\"\u003e\u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"right\"\u003e\n       \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; \u003ccode\u003eCommunity\u003c/code\u003e \u0026nbsp;\u0026nbsp;\n    \u003c/td\u003e\n    \u003ctd align=\"left\"\u003e\n       \u003ca href=\"https://github.com/bsv-blockchain/go-batcher/graphs/contributors\"\u003e\u003cimg src=\"https://img.shields.io/github/contributors/bsv-blockchain/go-batcher?style=flat-square\u0026color=orange\" alt=\"Contributors\"\u003e\u003c/a\u003e\n       \u003ca href=\"https://github.com/sponsors/bsv-blockchain\"\u003e\u003cimg src=\"https://img.shields.io/badge/sponsor-BSV-181717?style=flat-square\u0026logo=github\" alt=\"Sponsor\"\u003e\u003c/a\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n\u003c/div\u003e\n\n\u003cbr/\u003e\n\u003cbr/\u003e\n\n\u003cdiv align=\"center\"\u003e\n\n### \u003ccode\u003eProject Navigation\u003c/code\u003e\n\n\u003c/div\u003e\n\n\u003ctable align=\"center\"\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\" width=\"33%\"\u003e\n       📦\u0026nbsp;\u003ca href=\"#-installation\"\u003e\u003ccode\u003eInstallation\u003c/code\u003e\u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\" width=\"33%\"\u003e\n       🎯\u0026nbsp;\u003ca href=\"#-whats-inside\"\u003e\u003ccode\u003eWhat's\u0026nbsp;Inside\u003c/code\u003e\u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\" width=\"33%\"\u003e\n       📚\u0026nbsp;\u003ca href=\"#-documentation\"\u003e\u003ccode\u003eDocumentation\u003c/code\u003e\u003c/a\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\"\u003e\n       🧪\u0026nbsp;\u003ca href=\"#-examples--tests\"\u003e\u003ccode\u003eExamples\u0026nbsp;\u0026\u0026nbsp;Tests\u003c/code\u003e\u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\n       ⚡\u0026nbsp;\u003ca href=\"#-benchmarks\"\u003e\u003ccode\u003eBenchmarks\u003c/code\u003e\u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\n       🛠️\u0026nbsp;\u003ca href=\"#-code-standards\"\u003e\u003ccode\u003eCode\u0026nbsp;Standards\u003c/code\u003e\u003c/a\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\"\u003e\n       🤖\u0026nbsp;\u003ca href=\"#-ai-usage--assistant-guidelines\"\u003e\u003ccode\u003eAI\u0026nbsp;Usage\u003c/code\u003e\u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\n       🤝\u0026nbsp;\u003ca href=\"#-contributing\"\u003e\u003ccode\u003eContributing\u003c/code\u003e\u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\n       👥\u0026nbsp;\u003ca href=\"#-maintainers\"\u003e\u003ccode\u003eMaintainers\u003c/code\u003e\u003c/a\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\" colspan=\"3\"\u003e\n       📝\u0026nbsp;\u003ca href=\"#-license\"\u003e\u003ccode\u003eLicense\u003c/code\u003e\u003c/a\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\u003cbr/\u003e\n\n## 🎯 What's Inside\n\n### Lightning-Fast Batch Processing in Action\n\n```go\npackage main\n\nimport (\n    \"fmt\"\n    \"time\"\n    \"github.com/bsv-blockchain/go-batcher\"\n)\n\nfunc main() {\n    // Create a batcher that processes items every 100ms or when batch size hits 1000\n    b := batcher.New[string](\n        1000,                                        // batch size\n        100*time.Millisecond,                        // timeout interval\n        func(batch []*string) {                      // processor function\n            fmt.Printf(\"⚡ Processing %d items in one go!\\n\", len(batch))\n            // Your batch processing logic here\n            for _, item := range batch {\n                fmt.Printf(\"Processing: %s\\n\", *item)\n            }\n        },\n        true, // background processing\n    )\n\n    // Feed items - they'll be intelligently batched\n    for i := 0; i \u003c 5000; i++ {\n        item := fmt.Sprintf(\"item-%d\", i)\n        b.Put(\u0026item)\n    }\n\n    // Process any remaining items before shutdown\n    b.Trigger()\n    // Note: The batcher worker runs indefinitely - use context cancellation for cleanup\n}\n```\n\n\u003cbr/\u003e\n\n### Constructor Variants\n\nThe `go-batcher` library provides several constructor options to fit different use cases:\n\n```go\n// Basic batcher - simple batching with size and timeout triggers\nb := batcher.New[string](100, time.Second, processFn, true)\n\n// With slice pooling - reduces memory allocations for high-throughput scenarios\nb := batcher.NewWithPool[string](100, time.Second, processFn, true)\n\n// With automatic deduplication - filters duplicate items within a 1-minute window\nb := batcher.NewWithDeduplication[string](100, time.Second, processFn, true)\n\n// Combined pooling and deduplication - maximum performance with duplicate filtering\nb := batcher.NewWithDeduplicationAndPool[string](100, time.Second, processFn, true)\n```\n\n\u003cbr/\u003e\n\n### Why You'll Love This Batcher\n\n* **Blazing Performance** – Process millions of items with minimal overhead ([benchmarks](#benchmark-results): 135 ns/op)\n* **Smart Batching** – Auto-groups by size or time interval, whichever comes first\n* **Optional Deduplication** – Built-in dedup variant ensures each item is processed only once within a time window\n* **Memory Pool Optimization** – Optional slice pooling reduces GC pressure in high-throughput scenarios\n* **Thread-Safe by Design** – Concurrent Put() from multiple goroutines without worry\n* **Time-Partitioned Storage** – Efficient memory usage with automatic cleanup (dedup variant)\n* **Minimal Dependencies** – Pure Go with only essential external dependencies\n* **Flexible Configuration** – Multiple constructor variants for different use cases\n* **Production-Ready** – Battle-tested with full test coverage and benchmarks\n\nPerfect for high-throughput scenarios like log aggregation, metrics collection, event processing, or any situation where you need to efficiently batch operations for downstream systems.\n\n\u003cbr/\u003e\n\n## 📦 Installation\n\n**go-batcher** requires a [supported release of Go](https://golang.org/doc/devel/release.html#policy).\n```shell script\ngo get -u github.com/bsv-blockchain/go-batcher\n```\n\n\u003cbr/\u003e\n\n## 📈 Observability\n\nAll constructors accept a trailing variadic `...Option` so you can attach a\nlogger, Prometheus metrics, an OpenTelemetry tracer, and a name without\nbreaking the existing API. Omit the options and you get the original zero-cost\nbehaviour — defaults are no-op.\n\n```go\nm := batcher.NewPrometheusMetrics(reg, \"myservice\", \"batcher\")\n\nstore := batcher.New(100, 5*time.Second, fn, true,\n    batcher.WithName(\"store\"),                // distinguishes batchers in metrics \u0026 traces\n    batcher.WithLogger(logger),               // ulogger.Logger satisfies it directly\n    batcher.WithMetrics(m),                   // share one Metrics across all batchers\n    batcher.WithTracer(otel.Tracer(\"batcher\")),\n)\n\n// Tracing-aware enqueue: the SpanContext from ctx is recorded as a link on\n// the batch span when this item is flushed.\nstore.PutCtx(ctx, item)\n```\n\nWhen a service runs multiple batchers, share one `Metrics` provider and\ndistinguish them by `WithName`:\n\n```go\nm := batcher.NewPrometheusMetrics(reg, \"myservice\", \"batcher\")\nstoreBatcher    := batcher.New(..., batcher.WithName(\"store\"),     batcher.WithMetrics(m))\ngetBatcher      := batcher.New(..., batcher.WithName(\"get\"),       batcher.WithMetrics(m))\nsetMinedBatcher := batcher.New(..., batcher.WithName(\"set_mined\"), batcher.WithMetrics(m))\n```\n\nAll series carry a `batcher` label so each one can be graphed independently.\nSeries exported (under your chosen `\u003cnamespace\u003e_\u003csubsystem\u003e_…`):\n\n| Metric                            | Type           | Labels                  |\n|-----------------------------------|----------------|-------------------------|\n| `enqueued_total`                  | counter        | `batcher`               |\n| `enqueue_blocked_seconds`         | histogram      | `batcher`               |\n| `batches_total`                   | counter        | `batcher`, `reason`     |\n| `batch_size`                      | histogram      | `batcher`               |\n| `batch_duration_seconds`          | histogram      | `batcher`               |\n| `backpressure_wait_seconds`       | histogram      | `batcher`               |\n| `dedup_total`                     | counter        | `batcher`, `result`     |\n| `panic_total`                     | counter        | `batcher`               |\n\n`reason` ∈ `{size, timeout, manual, drain, shutdown}`; `result` ∈ `{hit, miss}`.\n\nEach batch dispatch is wrapped in an OTel span named `\u003cname\u003e.flush` with\nattributes `batcher.name`, `batcher.batch_size`, `batcher.reason`. Span links\nare added for every item enqueued via `PutCtx`. Panics in the user batch\nfunction are recovered, logged, and recorded on both the panic counter and\nthe span (status = error) — the worker keeps running.\n\n\u003cbr/\u003e\n\n## 📚 Documentation\n\n- **API Reference** – Dive into the godocs at [pkg.go.dev/github.com/bsv-blockchain/go-batcher](https://pkg.go.dev/github.com/bsv-blockchain/go-batcher)\n- **Usage Examples** – Browse practical patterns either the [examples directory](examples) or view the [example functions](batcher_example_test.go)\n- **Benchmarks** – Check the latest numbers in the [benchmark results](#benchmark-results)\n- **Test Suite** – Review both the [unit tests](batcher_test.go) and [fuzz tests](batcher_fuzz_test.go) (powered by [`testify`](https://github.com/stretchr/testify))\n\n\u003cbr/\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003e\u003ccode\u003eDevelopment Build Commands\u003c/code\u003e\u003c/strong\u003e\u003c/summary\u003e\n\u003cbr/\u003e\n\nGet the [MAGE-X](https://github.com/mrz1836/mage-x) build tool for development:\n```shell script\ngo install github.com/mrz1836/mage-x/cmd/magex@latest\n```\n\nView all build commands\n\n```bash script\nmagex help\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eRepository Features\u003c/strong\u003e\u003c/summary\u003e\n\u003cbr/\u003e\n\nThis repository includes 25+ built-in features covering CI/CD, security, code quality, developer experience, and community tooling.\n\n**[View the full Repository Features list →](.github/docs/repository-features.md)**\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003e\u003ccode\u003eLibrary Deployment\u003c/code\u003e\u003c/strong\u003e\u003c/summary\u003e\n\u003cbr/\u003e\n\nThis project uses [goreleaser](https://github.com/goreleaser/goreleaser) for streamlined binary and library deployment to GitHub. To get started, install it via:\n\n```bash\nbrew install goreleaser\n```\n\nThe release process is defined in the [.goreleaser.yml](.goreleaser.yml) configuration file.\n\n\nThen create and push a new Git tag using:\n\n```bash\nmagex version:bump push=true bump=patch branch=master\n```\n\nThis process ensures consistent, repeatable releases with properly versioned artifacts and citation metadata.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003e\u003ccode\u003ePre-commit Hooks\u003c/code\u003e\u003c/strong\u003e\u003c/summary\u003e\n\u003cbr/\u003e\n\nSet up the Go-Pre-commit System to run the same formatting, linting, and tests defined in [AGENTS.md](.github/AGENTS.md) before every commit:\n\n```bash\ngo install github.com/mrz1836/go-pre-commit/cmd/go-pre-commit@latest\ngo-pre-commit install\n```\n\nThe system is configured via [modular env files](.github/env/README.md) and provides 17x faster execution than traditional Python-based pre-commit hooks. See the [complete documentation](http://github.com/mrz1836/go-pre-commit) for details.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eGitHub Workflows\u003c/strong\u003e\u003c/summary\u003e\n\u003cbr/\u003e\n\nAll workflows are driven by modular configuration in [`.github/env/`](.github/env/README.md) — no YAML editing required.\n\n**[View all workflows and the control center →](.github/docs/workflows.md)**\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003e\u003ccode\u003eUpdating Dependencies\u003c/code\u003e\u003c/strong\u003e\u003c/summary\u003e\n\u003cbr/\u003e\n\nTo update all dependencies (Go modules, linters, and related tools), run:\n\n```bash\nmagex deps:update\n```\n\nThis command ensures all dependencies are brought up to date in a single step, including Go modules and any tools managed by [MAGE-X](https://github.com/mrz1836/mage-x). It is the recommended way to keep your development environment and CI in sync with the latest versions.\n\n\u003c/details\u003e\n\n\u003cbr/\u003e\n\n## 🧪 Examples \u0026 Tests\n\nAll unit tests and [examples](examples) run via [GitHub Actions](https://github.com/bsv-blockchain/go-batcher/actions) and use [Go version 1.25.x](https://go.dev/doc/go1.25). View the [configuration file](.github/workflows/fortress.yml).\n\nRun all tests (fast):\n\n```bash script\nmagex test\n```\n\nRun all tests with race detector (slower):\n```bash script\nmagex test:race\n```\n\n\u003cbr/\u003e\n\n## ⚡ Benchmarks\n\nRun the Go [benchmarks](batcher_benchmark_test.go):\n\n```bash script\nmagex bench\n```\n\n\u003cbr/\u003e\n\n### Benchmark Results\n\n| Benchmark                                                                            | Description                      |   ns/op |  B/op | allocs/op |\n|--------------------------------------------------------------------------------------|----------------------------------|--------:|------:|----------:|\n| [BenchmarkBatcherPut](batcher_comprehensive_benchmark_test.go)                       | Basic Put operation              |   135.1 |     8 |         0 |\n| [BenchmarkBatcherPutParallel](batcher_comprehensive_benchmark_test.go)               | Concurrent Put operations        |   310.0 |     9 |         0 |\n| [BenchmarkPutComparison/Put](benchmark_comparison_test.go)                           | Put operation (non-blocking)     |   300.7 |     9 |         0 |\n| [BenchmarkPutComparison/PutWithPool](benchmark_comparison_test.go)                   | Put with slice pooling           |   309.9 |     1 |         0 |\n| [BenchmarkWithPoolComparison/Batcher](benchmark_comparison_test.go)                  | Standard batcher                 |   171.2 |    18 |         1 |\n| [BenchmarkWithPoolComparison/WithPool](benchmark_comparison_test.go)                 | Pooled batcher                   |   184.0 |     9 |         1 |\n| [BenchmarkTimePartitionedMapSet](batcher_comprehensive_benchmark_test.go)            | Map Set operation (bloom filter) |   366.7 |   147 |         6 |\n| [BenchmarkTimePartitionedMapGet](batcher_comprehensive_benchmark_test.go)            | Map Get operation (bloom filter) |    80.5 |    39 |         2 |\n| [BenchmarkBatcherWithDedupPut](batcher_comprehensive_benchmark_test.go)              | Put with deduplication           |   740.1 |   166 |         7 |\n| [BenchmarkBatcher](batcher_benchmark_test.go)                                        | Full batch processing (1M items) | 1,081ms | 710MB |      1.9M |\n| [BenchmarkBatcherWithDeduplication](batcher_benchmark_test.go)                       | Deduplication processing         |    90.7 |    13 |         0 |\n\n\u003e Performance benchmarks for the core functions in this library, executed on an Apple M1 Max (ARM64).\n\u003e The benchmarks demonstrate excellent performance with minimal allocations for basic operations.\n\n\u003cbr/\u003e\n\n## 🛠️ Code Standards\nRead more about this Go project's [code standards](.github/CODE_STANDARDS.md).\n\n\u003cbr/\u003e\n\n## 🤖 AI Usage \u0026 Assistant Guidelines\nRead the [AI Usage \u0026 Assistant Guidelines](.github/tech-conventions/ai-compliance.md) for details on how AI is used in this project and how to interact with AI assistants.\n\n\u003cbr/\u003e\n\n## 👥 Maintainers\n| [\u003cimg src=\"https://github.com/icellan.png\" height=\"50\" alt=\"Siggi\" /\u003e](https://github.com/icellan) | [\u003cimg src=\"https://github.com/galt-tr.png\" height=\"50\" alt=\"Galt\" /\u003e](https://github.com/galt-tr) | [\u003cimg src=\"https://github.com/mrz1836.png\" height=\"50\" alt=\"MrZ\" /\u003e](https://github.com/mrz1836) |\n|:--------------------------------------------------------------------------------------------------:|:-------------------------------------------------------------------------------------------------:|:------------------------------------------------------------------------------------------------:|\n|                                [Siggi](https://github.com/icellan)                                 |                                [Dylan](https://github.com/galt-tr)                                 |                                [MrZ](https://github.com/mrz1836)                                 |\n\n\u003cbr/\u003e\n\n## 🤝 Contributing\nView the [contributing guidelines](.github/CONTRIBUTING.md) and please follow the [code of conduct](.github/CODE_OF_CONDUCT.md).\n\n### How can I help?\nAll kinds of contributions are welcome :raised_hands:!\nThe most basic way to show your support is to star :star2: the project, or to raise issues :speech_balloon:.\n\n[![Stars](https://img.shields.io/github/stars/bsv-blockchain/go-batcher?label=Please%20like%20us\u0026style=social\u0026v=1)](https://github.com/bsv-blockchain/go-batcher/stargazers)\n\n\u003cbr/\u003e\n\n## 📝 License\n\n[![License](https://img.shields.io/badge/license-OpenBSV-blue?style=flat-square)](LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbsv-blockchain%2Fgo-batcher","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbsv-blockchain%2Fgo-batcher","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbsv-blockchain%2Fgo-batcher/lists"}