{"id":17968401,"url":"https://github.com/danielgerlag/conductor","last_synced_at":"2025-05-15T14:06:35.597Z","repository":{"id":41839291,"uuid":"187114977","full_name":"danielgerlag/conductor","owner":"danielgerlag","description":"Distributed workflow server","archived":false,"fork":false,"pushed_at":"2025-01-18T16:00:14.000Z","size":212,"stargazers_count":554,"open_issues_count":25,"forks_count":100,"subscribers_count":24,"default_branch":"master","last_synced_at":"2025-04-07T20:07:41.557Z","etag":null,"topics":["workflow","workflow-engine","workflow-management-system"],"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/danielgerlag.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":"docs/roadmap.md","authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-05-16T23:34:16.000Z","updated_at":"2025-04-02T14:25:42.000Z","dependencies_parsed_at":"2024-12-21T22:12:14.020Z","dependency_job_id":"a5e38567-624f-4507-b61e-77ddea257314","html_url":"https://github.com/danielgerlag/conductor","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danielgerlag%2Fconductor","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danielgerlag%2Fconductor/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danielgerlag%2Fconductor/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danielgerlag%2Fconductor/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/danielgerlag","download_url":"https://codeload.github.com/danielgerlag/conductor/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254355335,"owners_count":22057354,"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","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":["workflow","workflow-engine","workflow-management-system"],"created_at":"2024-10-29T14:21:15.359Z","updated_at":"2025-05-15T14:06:30.575Z","avatar_url":"https://github.com/danielgerlag.png","language":"C#","readme":"# Conductor\n\n[\u003cimg src=\"https://api.gitsponsors.com/api/badge/img?id=187114977\" height=\"20\"\u003e](https://api.gitsponsors.com/api/badge/link?p=VRRpnj284ID04Uw6fKDc21mrU6r++mUHdMSZNVlIaLz4jFHULFMyOhDA6rwZPQFwM1OB9Ll+A/O332YVVamqwQ==)\n\nConductor is a workflow server built upon [Workflow Core](https://github.com/danielgerlag/workflow-core) that enables you to coordinate multiple services and scripts into workflows so that you can rapidly create complex workflow applications.  Workflows are composed of a series of steps, with an internal data object shared between them to pass information around.  Conductor automatically runs and tracks each step, and retries when there are errors.\n\nWorkflows are written in either JSON or YAML and then added to Conductor's internal registry via the definition API.  Then you use the workflow API to invoke them with or without custom data.\n\n### Installation\n\nConductor is available as a Docker image - `danielgerlag/conductor`\n\nConductor uses MongoDB as it's datastore, you will also need an instance of MongoDB in order to run Conductor.\n\nUse this command to start a container (with the API available on port 5001) that points to `mongodb://my-mongo-server:27017/` as it's datastore.\n\n```bash\n$ docker run -p 127.0.0.1:5001:80/tcp --env dbhost=mongodb://my-mongo-server:27017/ danielgerlag/conductor\n```\n\nIf you wish to run a fleet of Conductor nodes, then you also need to have a Redis instance, which they will use as a backplane.  This is not required if you are only running one instance.\nSimply have all your conductor instances point to the same MongoDB and Redis instance, and they will operate as a load balanced fleet.\n\n#### Environment Variables to configure\n\nYou can configure the database and Redis backplane by setting environment variables.\n```\ndbhost: \u003c\u003cinsert connection string to your MongoDB server\u003e\u003e\nredis: \u003c\u003cinsert connection string to your Redis server\u003e\u003e (optional)\n```\n\nIf you would like to setup a conductor container (API on port 5001) and a MongoDB container at the same time and have them linked, use this docker compose file:\n\n```Dockerfile\nversion: '3'\nservices:\n  conductor:\n    image: danielgerlag/conductor\n    ports:\n    - \"5001:80\"\n    links:\n    - mongo\n    environment:\n      dbhost: mongodb://mongo:27017/\n  mongo:\n    image: mongo\n```\n\n### Quick example\n\nWe'll start by defining a simple workflow that will log \"Hello world\" as it's first step and then \"Goodbye!!!\" as it's second and final step.  We `POST` the definition to `api/definition` in either `YAML` or `JSON`.\n\n```http\nPOST /api/definition\nContent-Type: application/yaml\n```\n```yml\nId: Hello1\nSteps:\n- Id: Step1\n  StepType: EmitLog\n  NextStepId: Step2\n  Inputs:\n    Message: '\"Hello world\"'\n    Level: '\"Information\"'\n- Id: Step2\n  StepType: EmitLog\n  Inputs:\n    Message: '\"Goodbye!!!\"'\n    Level: '\"Information\"'\n```\n\nNow, lets test it by invoking a new instance of our workflow.\nWe do this with a `POST` to `/api/workflow/Hello1`\n```\nPOST /api/workflow/Hello1\n```\n\nWe can also rewrite our workflow to pass custom data to any input on any of it's steps.\n\n```yml\nId: Hello2\nSteps:\n- Id: Step1\n  StepType: EmitLog\n  Inputs:\n    Message: data.CustomMessage\n    Level: '\"Information\"'\n```\n\nNow, when we start a new instance of the workflow, we also initialize it with some data.\n\n```\nPOST /api/workflow/Hello2\nContent-Type: application/x-yaml\n```\n```yaml\nCustomMessage: foobar\n```\n\n\n## Further reading\n* [Documentation](https://conductor-core.readthedocs.io/en/latest/)\n\n## Resources\n\n* Download the [Postman Collection](https://raw.githubusercontent.com/danielgerlag/conductor/master/docs/Conductor.postman_collection.json)\n\n\n## License\n\nThis project is licensed under the MIT License - see the [LICENSE.md](LICENSE.md) file for details\n","funding_links":[],"categories":["C\\#","others"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdanielgerlag%2Fconductor","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdanielgerlag%2Fconductor","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdanielgerlag%2Fconductor/lists"}