{"id":19491712,"url":"https://github.com/rudderlabs/rudder-plugins-manager","last_synced_at":"2025-08-25T05:05:48.484Z","repository":{"id":143197897,"uuid":"604614129","full_name":"rudderlabs/rudder-plugins-manager","owner":"rudderlabs","description":"Go library to  create plugins and workflows for data pipelines","archived":false,"fork":false,"pushed_at":"2024-06-11T04:26:45.000Z","size":211,"stargazers_count":6,"open_issues_count":1,"forks_count":3,"subscribers_count":6,"default_branch":"main","last_synced_at":"2025-08-18T06:53:21.023Z","etag":null,"topics":["golang-library","plugin-manager","plugins","workflow-engine","workflows"],"latest_commit_sha":null,"homepage":"https://www.rudderstack.com/","language":"Go","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/rudderlabs.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":"CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2023-02-21T12:39:20.000Z","updated_at":"2023-03-24T08:49:47.000Z","dependencies_parsed_at":"2024-06-20T17:28:46.921Z","dependency_job_id":"3df4ce75-91c0-4e0d-ada7-ddcd1d66f796","html_url":"https://github.com/rudderlabs/rudder-plugins-manager","commit_stats":null,"previous_names":[],"tags_count":13,"template":false,"template_full_name":"rudderlabs/rudder-repo-template","purl":"pkg:github/rudderlabs/rudder-plugins-manager","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rudderlabs%2Frudder-plugins-manager","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rudderlabs%2Frudder-plugins-manager/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rudderlabs%2Frudder-plugins-manager/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rudderlabs%2Frudder-plugins-manager/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rudderlabs","download_url":"https://codeload.github.com/rudderlabs/rudder-plugins-manager/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rudderlabs%2Frudder-plugins-manager/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":272008753,"owners_count":24857658,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-25T02:00:12.092Z","response_time":1107,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["golang-library","plugin-manager","plugins","workflow-engine","workflows"],"created_at":"2024-11-10T21:17:53.288Z","updated_at":"2025-08-25T05:05:48.417Z","avatar_url":"https://github.com/rudderlabs.png","language":"Go","readme":"[![codecov](https://codecov.io/gh/rudderlabs/rudder-plugins-manager/branch/main/graph/badge.svg?token=ErUmduv9C8)](https://codecov.io/gh/rudderlabs/rudder-plugins-manager)\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://rudderstack.com/\"\u003e\n    \u003cimg src=\"https://user-images.githubusercontent.com/59817155/121357083-1c571300-c94f-11eb-8cc7-ce6df13855c9.png\"\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\u003cb\u003eThe Customer Data Platform for Developers\u003c/b\u003e\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cb\u003e\n    \u003ca href=\"https://rudderstack.com\"\u003eWebsite\u003c/a\u003e\n    ·\n    \u003ca href=\"\"\u003eDocumentation\u003c/a\u003e\n    ·\n    \u003ca href=\"https://rudderstack.com/join-rudderstack-slack-community\"\u003eCommunity Slack\u003c/a\u003e\n  \u003c/b\u003e\n\u003c/p\u003e\n\n---\n\n## Rudder Plugins Manager\nWe process different customer events and then send them to 200+ destinations. We need to write custom code specific to the customer events. This library helps to implement such requirements as plugins or workflows. This is designed as per our needs but we believe this is a general tool for defining any custom data pipelines.\n\n### Use cases\n* Alert Management\n  * Different type of alerts may need to be enriched differently\n  * Based on context of the alert, alert may need to be routed to different destinations.\n* Customer Notifications\n  * Similar to alert management, different notifications require different processing.\n* Data pipelines\n  * If you receive from or deliver to multiple third-party services then this can be used to standardize the incoming event and then do common processing and then again customize outgoing events as per different services API contracts.\n* General automation\n  * Database cleanup workflows\n  * Report generation workflows.\n\n## Features\n\n* [Plugin Interfaces](./plugins/types.go)\n* Useful Plugins to get started\n  * [Base Plugin](./plugins/base.go)\n  * [Bloblang Plugin](./plugins/bloblang.go) (using [bloblang](https://www.benthos.dev/docs/guides/bloblang/about))\n  * [Workflow Plugin](./plugins/workflow.go)\n    * Supports retrying from last failed step.\n  * [Retryable Plugin](./plugins/retryable.go)\n  * [Orchestrator Plugin](./plugins/orchestrator.go)\n* Managers\n  * [Plugin Manager](./plugins/manager.go)\n  * [Workflow Manager](./plugins/manager.go)\n\n## Getting started\n* Install `go get github.com/rudderlabs/rudder-plugins-manager`\n* Create a plugin\n```go\nplugin := plugins.NewBasePlugin(\"no-op\",\n\t\tplugins.ExecuteFunc(\n\t\t\tfunc(ctx context.Context, data *plugins.Message) (*plugins.Message, error) {\n\t\t\t\treturn data, nil\n\t\t\t},\n\t\t),\n\t)\n// Add to Manager\npluginManager := plugins.NewBasePluginManager()\npluginManager.Add(plugin)\n// Execute Plugin\npluginManager.Execute(context.Background(), \"no-op\", plugins.NewMessage(\"some data\"))\n```\n* Create a workflow\n```go\nworkflow := lo.Must(plugins.NewBaseWorkflowPlugin(pluginManager, plugins.WorkflowConfig{\n\tName: \"test\",\n\tSteps: []plugins.StepConfig{\n\t\t{\n\t\t\tName:     \"blobl\",\n\t\t\tBloblang: `root.test = \"test\"`,\n\t\t},\n    {\n\t\t\tName:     \"plugin\",\n\t\t\tPlugin: \"no-op\",\n\t\t},\n\t},\n}))\n\n// Add to Manager\nworkflowManager := plugins.NewBaseWorkflowManager()\nworkflowManager.Add(workflow)\n// Execute Plugin\nworkflowManager.Execute(context.Background(), \"test\", plugins.NewMessage(\"some data\"))\n```\n## Examples\n* [Base Plugin](./plugins/base_test.go)\n* [Bloblang Plugin](./plugins/bloblang_test.go)\n* [Workflow Plugin](./plugins/workflow_test.go)\n  * [Sample Workflow](./test_data/workflows/sample.yaml)\n* [Retryable Plugin](./plugins/retryable_test.go)\n* [Orchestrator Plugin](./plugins/orchestrator_test.go)\n* Managers\n  * [Plugin Manager](./plugins/manager_test.go)\n  * [Workflow Manager](./plugins/manager_test.go)\n\n## Contribute\n\nWe would love to see you contribute to RudderStack. Get more information on how to contribute [**here**](CONTRIBUTING.md).\n\n## License\n\nThe RudderStack Plugins Manager is released under the [**MIT License**](https://opensource.org/licenses/MIT).\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frudderlabs%2Frudder-plugins-manager","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frudderlabs%2Frudder-plugins-manager","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frudderlabs%2Frudder-plugins-manager/lists"}