{"id":13509070,"url":"https://github.com/stakpak/devx","last_synced_at":"2025-03-30T13:31:25.893Z","repository":{"id":63766980,"uuid":"563230814","full_name":"stakpak/devx","owner":"stakpak","description":"A tool for generating, validating \u0026 sharing all your configurations, powered by CUE. Works with Kubernetes, Terraform, Compose, GitHub actions and much more...","archived":false,"fork":false,"pushed_at":"2024-09-05T05:32:34.000Z","size":780,"stargazers_count":182,"open_issues_count":12,"forks_count":5,"subscribers_count":5,"default_branch":"main","last_synced_at":"2025-03-27T06:29:04.938Z","etag":null,"topics":["cloud-native","config-as-data","configuration-management","devops","devx","gitops","infrastructure-as-code","platform-engineering","policy-as-code","schema","shift-left","validation"],"latest_commit_sha":null,"homepage":"https://devx.stakpak.dev","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/stakpak.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":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-11-08T07:15:59.000Z","updated_at":"2025-03-10T22:59:51.000Z","dependencies_parsed_at":"2023-09-05T02:40:40.201Z","dependency_job_id":"351915b1-fae8-4933-b42b-0c7f6b0130be","html_url":"https://github.com/stakpak/devx","commit_stats":{"total_commits":292,"total_committers":6,"mean_commits":"48.666666666666664","dds":0.113013698630137,"last_synced_commit":"aecb2846601906100e35e833e74464089612b9c2"},"previous_names":["devopzilla/guku-devx","stakpak/devx","devopzilla/devx"],"tags_count":135,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stakpak%2Fdevx","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stakpak%2Fdevx/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stakpak%2Fdevx/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stakpak%2Fdevx/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/stakpak","download_url":"https://codeload.github.com/stakpak/devx/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246323881,"owners_count":20759044,"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":["cloud-native","config-as-data","configuration-management","devops","devx","gitops","infrastructure-as-code","platform-engineering","policy-as-code","schema","shift-left","validation"],"created_at":"2024-08-01T02:01:02.582Z","updated_at":"2025-03-30T13:31:25.604Z","avatar_url":"https://github.com/stakpak.png","language":"Go","readme":"## [Documentation](https://devx.stakpak.dev/docs/intro)\n\n## Introduction\n\nDevX is a tool for building lightweight Internal Developer Platforms. Use DevX to build internal standards, prevent misconfigurations early, and enable infrastructure self-service.\n\n## Installation\n\n### Homebrew\n```bash\nbrew tap stakpak/stakpak\nbrew install devx       \n```\n\n### Download the binary\n\n[Releases page](https://github.com/stakpak/devx/releases)\n\n### Docker image\n```bash\ndocker run --rm -v \"$(pwd):/app\" ghcr.io/stakpak/devx:latest -h\n```\n\n## Quick start\n```bash\n➜ devx project init\n➜ devx project update\n➜ devx project gen\n➜ devx build dev\n🏭 Transforming stack for the \"dev\" environment...\n[compose] applied resources to \"build/dev/compose/docker-compose.yml\"\n[terraform] applied resources to \"build/dev/terraform/generated.tf.json\"\n```\n\n![demo](assets/demo.gif)\n\n\n## Usage\n\n### Configuration language\nWe use [CUE](https://cuelang.org/) to write strongly typed configurations. You can now shift YAML typos left, instead of detecting errors when applying configurations. You can easily transform CUE configuration files to and from YAML (CUE is a superset of YAML \u0026 JSON).\n\n[CUE](https://cuelang.org/) is the result of years of experience writing configuration languages at Google, and seeks to improve the developer experience while avoiding some nasty pitfalls. CUE looks like JSON, while making declarative data definition, generation, and validation a breeze. You can find a primer on CUE [here](https://docs.dagger.io/1215/what-is-cue/#understanding-cue).\n\n\n### Create a stack (by Developers)\nYou create a stack to define the workload and its dependencies.\n```cue\npackage main\n\nimport (\n    \"stakpak.dev/devx/v1\"\n    \"stakpak.dev/devx/v1/traits\"\n)\n\nstack: v1.#Stack \u0026 {\n    components: {\n        cowsay: {\n            traits.#Workload\n            containers: default: {\n                image: \"docker/whalesay\"\n                command: [\"cowsay\"]\n                args: [\"Hello DevX!\"]\n            }\n        }\n    }\n}\n```\n\n### Create your own stack builders or use community packages (by Platform Engineers)\nYou can customize how the stack is processed by writing declarative transformers.\n```cue\npackage main\n\nimport (\n    \"stakpak.dev/devx/v2alpha1\"\n    \"stakpak.dev/devx/v2alpha1/environments\"\n)\n\nbuilders: v2alpha1.#Environments \u0026 {\n    dev: environments.#Compose\n}\n```\n\n### Validation\nValidate configurations while writing\n```bash\n➜ devx project validate\n👌 Looks good\n```\n\n### Platform capability discovery\n```bash\n➜ devx project discover --transformers\n[🏷️  traits] \"stakpak.dev/devx/v1/traits\"\ntraits.#Workload\ta component that runs a container \ntraits.#Replicable\ta component that can be horizontally scaled \ntraits.#Exposable\ta component that has endpoints that can be exposed \ntraits.#Postgres\ta postgres database \ntraits.#Helm\ta helm chart using helm repo \ntraits.#HelmGit\ta helm chart using git \ntraits.#HelmOCI\ta helm chart using oci \n\n[🏭 transformers] \"stakpak.dev/devx/v1/transformers/argocd\"\nargocd.#AddHelmRelease\tadd a helm release  (requires trait:Helm)\n\n[🏭 transformers] \"stakpak.dev/devx/v1/transformers/compose\"\ncompose.#AddComposeService\tadd a compose service  (requires trait:Workload)\ncompose.#ExposeComposeService\texpose a compose service ports  (requires trait:Exposable)\ncompose.#AddComposePostgres\tadd a compose service for a postgres database  (requires trait:Postgres)\n\n[🏭 transformers] \"stakpak.dev/devx/v1/transformers/terraform\"\nterraform.#AddHelmRelease\tadd a helm release  (requires trait:Helm)\n```\n\n## Package management\n\nYou can publish and share CUE packages directly through git repositories.\n\n### Create a new packages\nCreate a new repository to store your packages (you can host multiple packages per repository).\n\n```bash\ncue.mod\n└── module.cue # module: \"domain.com/platform\"\nsubpackage\n└── file.cue\nfile.cue\n```\n\n### Add the package to `module.cue`\n```cue\nmodule: \"\"\n\npackages: [\n  \"github.com/\u003corg name\u003e/\u003crepo name\u003e@\u003cgit revision\u003e:\",\n]       \t\n```\n\n### For private packages (optional)\n```bash\nexport GIT_USERNAME=\"username\"\nexport GIT_PASSWORD=\"password\"\n```\n\n### Update packages (pulling updates will replace existing packages)\n```\n➜ devx project update\n```\n\n## Contributors\n\n\u003ctable\u003e\n\u003ctr\u003e\n    \u003ctd align=\"center\" style=\"word-wrap: break-word; width: 150.0; height: 150.0\"\u003e\n        \u003ca href=https://github.com/kajogo777\u003e\n            \u003cimg src=https://avatars.githubusercontent.com/u/10531031?v=4 width=\"100;\"  style=\"border-radius:50%;align-items:center;justify-content:center;overflow:hidden;padding-top:10px\" alt=George/\u003e\n            \u003cbr /\u003e\n            \u003csub style=\"font-size:14px\"\u003e\u003cb\u003eGeorge\u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\" style=\"word-wrap: break-word; width: 150.0; height: 150.0\"\u003e\n        \u003ca href=https://github.com/thethumbler\u003e\n            \u003cimg src=https://avatars.githubusercontent.com/u/3092919?v=4 width=\"100;\"  style=\"border-radius:50%;align-items:center;justify-content:center;overflow:hidden;padding-top:10px\" alt=Mohamed Hamza/\u003e\n            \u003cbr /\u003e\n            \u003csub style=\"font-size:14px\"\u003e\u003cb\u003eMohamed Hamza\u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\" style=\"word-wrap: break-word; width: 150.0; height: 150.0\"\u003e\n        \u003ca href=https://github.com/tranngoclam\u003e\n            \u003cimg src=https://avatars.githubusercontent.com/u/4991619?v=4 width=\"100;\"  style=\"border-radius:50%;align-items:center;justify-content:center;overflow:hidden;padding-top:10px\" alt=Lam Tran/\u003e\n            \u003cbr /\u003e\n            \u003csub style=\"font-size:14px\"\u003e\u003cb\u003eLam Tran\u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\" style=\"word-wrap: break-word; width: 150.0; height: 150.0\"\u003e\n        \u003ca href=https://github.com/ahmedhesham6\u003e\n            \u003cimg src=https://avatars.githubusercontent.com/u/23265119?v=4 width=\"100;\"  style=\"border-radius:50%;align-items:center;justify-content:center;overflow:hidden;padding-top:10px\" alt=Ahmed Hesham/\u003e\n            \u003cbr /\u003e\n            \u003csub style=\"font-size:14px\"\u003e\u003cb\u003eAhmed Hesham\u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd align=\"center\" style=\"word-wrap: break-word; width: 150.0; height: 150.0\"\u003e\n        \u003ca href=https://github.com/qjcg\u003e\n            \u003cimg src=https://avatars.githubusercontent.com/u/1133291?v=4 width=\"100;\"  style=\"border-radius:50%;align-items:center;justify-content:center;overflow:hidden;padding-top:10px\" alt=John Gosset/\u003e\n            \u003cbr /\u003e\n            \u003csub style=\"font-size:14px\"\u003e\u003cb\u003eJohn Gosset\u003c/b\u003e\u003c/sub\u003e\n        \u003c/a\u003e\n    \u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n","funding_links":[],"categories":["Go","infrastructure-as-code"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstakpak%2Fdevx","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fstakpak%2Fdevx","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstakpak%2Fdevx/lists"}