{"id":28625609,"url":"https://github.com/inngest/inngestgo","last_synced_at":"2026-03-12T01:12:28.158Z","repository":{"id":38346568,"uuid":"366509996","full_name":"inngest/inngestgo","owner":"inngest","description":"Durable execution in Go with the Golang Inngest SDK.  Write durable functions in your existing app.","archived":false,"fork":false,"pushed_at":"2026-02-04T01:10:02.000Z","size":10258,"stargazers_count":88,"open_issues_count":10,"forks_count":19,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-02-11T17:59:35.758Z","etag":null,"topics":["go","golang","workflow-engine"],"latest_commit_sha":null,"homepage":"https://pkg.go.dev/github.com/inngest/inngestgo","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/inngest.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2021-05-11T20:51:09.000Z","updated_at":"2026-02-10T07:46:37.000Z","dependencies_parsed_at":"2024-01-31T03:44:55.767Z","dependency_job_id":"ecb70d23-7552-47d5-a4e0-9f08373bdd45","html_url":"https://github.com/inngest/inngestgo","commit_stats":null,"previous_names":[],"tags_count":39,"template":false,"template_full_name":null,"purl":"pkg:github/inngest/inngestgo","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/inngest%2Finngestgo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/inngest%2Finngestgo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/inngest%2Finngestgo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/inngest%2Finngestgo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/inngest","download_url":"https://codeload.github.com/inngest/inngestgo/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/inngest%2Finngestgo/sbom","scorecard":{"id":489146,"data":{"date":"2025-08-11","repo":{"name":"github.com/inngest/inngestgo","commit":"4197561463528757be2317ca810faa3125278e2b"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":6.4,"checks":[{"name":"Code-Review","score":9,"reason":"Found 28/29 approved changesets -- score normalized to 9","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":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/go.yml:1","Warn: no topLevel permission defined: .github/workflows/release.yml:1","Warn: no topLevel permission defined: .github/workflows/security.yaml: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":"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":"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":"Maintained","score":10,"reason":"27 commit(s) and 0 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":"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":"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":"Pinned-Dependencies","score":1,"reason":"dependency not pinned by hash detected -- score normalized to 1","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/go.yml:21: update your workflow using https://app.stepsecurity.io/secureworkflow/inngest/inngestgo/go.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/go.yml:23: update your workflow using https://app.stepsecurity.io/secureworkflow/inngest/inngestgo/go.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/go.yml:36: update your workflow using https://app.stepsecurity.io/secureworkflow/inngest/inngestgo/go.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/go.yml:38: update your workflow using https://app.stepsecurity.io/secureworkflow/inngest/inngestgo/go.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/go.yml:50: update your workflow using https://app.stepsecurity.io/secureworkflow/inngest/inngestgo/go.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/go.yml:52: update your workflow using https://app.stepsecurity.io/secureworkflow/inngest/inngestgo/go.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/go.yml:58: update your workflow using https://app.stepsecurity.io/secureworkflow/inngest/inngestgo/go.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:13: update your workflow using https://app.stepsecurity.io/secureworkflow/inngest/inngestgo/release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:20: update your workflow using https://app.stepsecurity.io/secureworkflow/inngest/inngestgo/release.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/inngest/inngestgo/release.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:34: update your workflow using https://app.stepsecurity.io/secureworkflow/inngest/inngestgo/release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/security.yaml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/inngest/inngestgo/security.yaml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/security.yaml:20: update your workflow using https://app.stepsecurity.io/secureworkflow/inngest/inngestgo/security.yaml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/security.yaml:26: update your workflow using https://app.stepsecurity.io/secureworkflow/inngest/inngestgo/security.yaml/main?enable=pin","Warn: downloadThenRun not pinned by hash: .github/workflows/go.yml:28","Info:   0 out of  11 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   3 third-party GitHubAction dependencies pinned","Info:   0 out of   1 downloadThenRun dependencies pinned","Info:   1 out of   1 npmCommand 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":"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":"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":"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":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":"Vulnerabilities","score":9,"reason":"1 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-52f5-9888-hmc6"],"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":10,"reason":"SAST tool is run on all commits","details":["Info: all commits (30) 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-19T18:36:12.992Z","repository_id":38346568,"created_at":"2025-08-19T18:36:12.992Z","updated_at":"2025-08-19T18:36:12.992Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30410373,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-12T00:40:14.898Z","status":"ssl_error","status_checked_at":"2026-03-12T00:40:08.439Z","response_time":84,"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":["go","golang","workflow-engine"],"created_at":"2025-06-12T08:11:05.238Z","updated_at":"2026-03-12T01:12:28.153Z","avatar_url":"https://github.com/inngest.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003ca href=\"https://www.inngest.com\"\u003e\u003cimg src=\"https://github.com/inngest/.github/raw/main/profile/github-readme-banner-2025-06-20.png\"/\u003e\u003c/a\u003e\n  \u003cbr/\u003e\n  \u003cbr/\u003e\n  \u003cp\u003e\n    Write durable functions in Go via the \u003ca href=\"https://www.inngest.com\"\u003eInngest\u003c/a\u003e SDK.\u003cbr /\u003e\n    Read the \u003ca href=\"https://www.inngest.com/docs?ref=github-inngest-js-readme\"\u003edocumentation\u003c/a\u003e and get started in minutes.\n  \u003c/p\u003e\n  \u003cp\u003e\n\n[![GoDoc](https://godoc.org/github.com/inngest/inngestgo?status.svg)](http://godoc.org/github.com/inngest/inngestgo)\n[![discord](https://img.shields.io/discord/842170679536517141?label=discord)](https://www.inngest.com/discord)\n[![twitter](https://img.shields.io/twitter/follow/inngest?style=social)](https://twitter.com/inngest)\n\n  \u003c/p\u003e\n\u003c/div\u003e\n\n\u003chr /\u003e\n\n# `inngestgo`: Durable execution in Go\n\n`inngestgo` allows you to create durable functions in your existing HTTP handlers or via outbound TCP connections,\nwithout managing orchestrators, state, scheduling, or new infrastructure.\n\nIt's useful if you want to build reliable software without worrying about queues, events, subscribers, workers, or other\ncomplex primitives such as concurrency, parallelism, event batching, or distributed debounce. These are all built in.\n\n- [Godoc docs](http://godoc.org/github.com/inngest/inngestgo)\n- [Inngest docs](https://www.inngest.com/docs)\n\n# Features\n\n- Type safe functions, durable workflows, and steps using generics\n- Event stream sampling built in\n- Declarative flow control (concurrency, prioritization, batching, debounce, rate limiting)\n- Zero-infrastructure. Inngest handles orchestration and calls your functions.\n\n# Examples\n\nThe following is the bare minimum setup for a fully distributed durable workflow:\n\n```go\npackage main\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"net/http\"\n\t\"time\"\n\n\t\"github.com/inngest/inngestgo\"\n\t\"github.com/inngest/inngestgo/step\"\n)\n\nfunc main() {\n\tclient, err := inngestgo.NewClient(inngestgo.ClientOpts{\n\t\tAppID: \"core\",\n\t})\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\t_, err = inngestgo.CreateFunction(\n\t\tclient,\n\t\tinngestgo.FunctionOpts{\n\t\t\tID: \"account-created\",\n\t\t},\n\t\t// Run on every api/account.created event.\n\t\tinngestgo.EventTrigger(\"api/account.created\", nil),\n\t\tAccountCreated,\n\t)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\thttp.ListenAndServe(\":8080\", client.Serve())\n}\n\n// AccountCreated is a durable function which runs any time the \"api/account.created\"\n// event is received by Inngest.\n//\n// It is invoked by Inngest, with each step being backed by Inngest's orchestrator.\n// Function state is automatically managed, and persists across server restarts,\n// cloud migrations, and language changes.\nfunc AccountCreated(\n\tctx context.Context,\n\tinput inngestgo.Input[AccountCreatedEventData],\n) (any, error) {\n\t// Sleep for a second, minute, hour, week across server restarts.\n\tstep.Sleep(ctx, \"initial-delay\", time.Second)\n\n\t// Run a step which emails the user.  This automatically retries on error.\n\t// This returns the fully typed result of the lambda.\n\tresult, err := step.Run(ctx, \"on-user-created\", func(ctx context.Context) (bool, error) {\n\t\t// Run any code inside a step.\n\t\tresult, err := emails.Send(emails.Opts{})\n\t\treturn result, err\n\t})\n\tif err != nil {\n\t\t// This step retried 5 times by default and permanently failed.\n\t\treturn nil, err\n\t}\n\t// `result` is  fully typed from the lambda\n\t_ = result\n\n\t// Sample from the event stream for new events.  The function will stop\n\t// running and automatially resume when a matching event is found, or if\n\t// the timeout is reached.\n\tfn, err := step.WaitForEvent[FunctionCreatedEvent](\n\t\tctx,\n\t\t\"wait-for-activity\",\n\t\tstep.WaitForEventOpts{\n\t\t\tName:    \"Wait for a function to be created\",\n\t\t\tEvent:   \"api/function.created\",\n\t\t\tTimeout: time.Hour * 72,\n\t\t\t// Match events where the user_id is the same in the async sampled event.\n\t\t\tIf: inngestgo.StrPtr(\"event.data.user_id == async.data.user_id\"),\n\t\t},\n\t)\n\tif err == step.ErrEventNotReceived {\n\t\t// A function wasn't created within 3 days.  Send a follow-up email.\n\t\tstep.Run(ctx, \"follow-up-email\", func(ctx context.Context) (any, error) {\n\t\t\t// ...\n\t\t\treturn true, nil\n\t\t})\n\t\treturn nil, nil\n\t}\n\n\t// The event returned from `step.WaitForEvent` is fully typed.\n\tfmt.Println(fn.Data.FunctionID)\n\n\treturn nil, nil\n}\n\n// AccountCreatedEvent represents the fully defined event received when an account is created.\n//\n// This is shorthand for defining a new Inngest-conforming struct:\n//\n//\ttype AccountCreatedEvent struct {\n//\t\tName      string                  `json:\"name\"`\n//\t\tData      AccountCreatedEventData `json:\"data\"`\n//\t\tUser      map[string]any          `json:\"user\"`\n//\t\tTimestamp int64                   `json:\"ts,omitempty\"`\n//\t\tVersion   string                  `json:\"v,omitempty\"`\n//\t}\ntype AccountCreatedEvent inngestgo.GenericEvent[AccountCreatedEventData]\ntype AccountCreatedEventData struct {\n\tAccountID string\n}\n\ntype FunctionCreatedEvent inngestgo.GenericEvent[FunctionCreatedEventData]\ntype FunctionCreatedEventData struct {\n\tFunctionID string\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Finngest%2Finngestgo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Finngest%2Finngestgo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Finngest%2Finngestgo/lists"}