{"id":13816048,"url":"https://github.com/salesforce/craft","last_synced_at":"2025-09-02T23:34:03.168Z","repository":{"id":44758212,"uuid":"268924063","full_name":"salesforce/craft","owner":"salesforce","description":"CRAFT removes the language barrier to create Kubernetes Operators.","archived":false,"fork":false,"pushed_at":"2023-10-11T21:05:24.000Z","size":55098,"stargazers_count":92,"open_issues_count":5,"forks_count":15,"subscribers_count":12,"default_branch":"master","last_synced_at":"2025-04-15T14:59:21.152Z","etag":null,"topics":["kubernetes","operator"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/salesforce.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-06-02T22:45:41.000Z","updated_at":"2025-03-02T22:21:00.000Z","dependencies_parsed_at":"2024-06-20T05:52:58.008Z","dependency_job_id":null,"html_url":"https://github.com/salesforce/craft","commit_stats":{"total_commits":22,"total_committers":6,"mean_commits":"3.6666666666666665","dds":"0.40909090909090906","last_synced_commit":"387ce5ec20500071f5d3cd3180f8f1b6a3c45ade"},"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/salesforce%2Fcraft","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/salesforce%2Fcraft/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/salesforce%2Fcraft/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/salesforce%2Fcraft/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/salesforce","download_url":"https://codeload.github.com/salesforce/craft/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":249094940,"owners_count":21211837,"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":["kubernetes","operator"],"created_at":"2024-08-04T05:00:31.738Z","updated_at":"2025-04-15T14:59:31.757Z","avatar_url":"https://github.com/salesforce.png","language":"Go","readme":"# Custom Resource Abstraction Fabrication Tool\n\nCRAFT removes the language barrier to create Kubernetes Operators. CRAFT declares Kubernetes Operators in a robust and generic way for any resource, letting developers focus on CRUD (create, read, update and delete) operations of resource management in a Dockerfile. With CRAFT you can create operators without a dependent layer and in the language of your choice!\n\n## Features:\n\n1. Automated reconciliation using Docker entrypoint exit codes.\n2. Kubernetes structural schema validation for a custom resource (CRD) happens within CRAFT while creating an operator.\n3. Craft can be installed as a binary tool. \n\nThese features allow CRAFT to achieve the objectives listed in this [Kubernetes Architecture Design Proposal.](https://github.com/kubernetes/community/blob/master/contributors/design-proposals/architecture/declarative-application-management.md#bespoke-application-deployment)\n\n## Demo:\nAs an example, we have created [wordpress operator](https://opensource.salesforce.com/craft/tutorial/index.html) that is comparable to one provided by [Presslabs](https://github.com/presslabs/wordpress-operator)\n\n## Advantages\n1. **Easy onboarding** : Create an operator in your language of choice.\n2. **Segregation of duties** : Developers can work in the docker file while the Site Reliability or DevOps engineer can declaratively configure the operator.\n3. **Versioning** : Work on a different version of the operator or resource than your users.\n4. **Validations** : Get schema and input validation feedback before runtime.\n5. **Controlled reconciliation** : Define resource reconciliation frequency to lower your maintenance workload.\n\n## Built with\nCRAFT is built with open source projects Operatify and Kubebuilder:\n\n1. [Operatify](https://github.com/operatify/operatify) : CRAFT leverages Operatify’s automated reconciliation capabilities. Our inspiration is this [blog post](https://www.stephenzoio.com/kubernetes-operators-for-resource-management/), where we have realized that we can overcome the last barrier to declaratively create operators.\n2. [Kubebuilder](https://github.com/kubernetes-sigs/kubebuilder) : CRAFT augments the operator skeleton generated by Kubebuilder with custom resource definitions and controller capabilities.\n\n## Documentation\nCheck out [documentaion here](https://opensource.salesforce.com/craft/) \n\n## Resources\nGitHub Repo: [salesforce/craft](https://github.com/salesforce/craft).  \nSlack channel: [Kubernetes/craft](https://kubernetes.slack.com/archives/C01AD4W4NEP)\n\n## Contribution\nPlease refer [Contribution.md](Contribution.md) before pushing the code. If you wish to make a contribution, create a branch, push your code into the branch and create a PR. For more details, check [this article](https://opensource.com/article/19/7/create-pull-request-github). \n\n## Acknowledgements\nCRAFT was started by a small team of developers, namely [Harsh Jain](https://github.com/harsh-98), [Anji Devarasetty](https://github.com/anjidevarasetty), [Maheswara Sunil Varma](https://github.com/maheswarasunil) and [Avvari Sai Bharadwaj](https://github.com/AvvariSaiBharadwaj). \n\nThanks to all of the amazing contributors, the full list can be found [here](https://github.com/salesforce/craft/graphs/contributors).\n","funding_links":[],"categories":["Go","Framework"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsalesforce%2Fcraft","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsalesforce%2Fcraft","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsalesforce%2Fcraft/lists"}