{"id":30820045,"url":"https://github.com/ohayocorp/anemos","last_synced_at":"2025-09-06T10:07:18.451Z","repository":{"id":305265669,"uuid":"1021330703","full_name":"ohayocorp/anemos","owner":"ohayocorp","description":"A powerful, open-source, single binary CLI tool that allows managing Kubernetes manifests using JavaScript and TypeScript.","archived":false,"fork":false,"pushed_at":"2025-09-01T18:00:47.000Z","size":2227,"stargazers_count":32,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-09-01T20:20:19.220Z","etag":null,"topics":["javascript","kubernetes","manifest","package-manager","typescript","yaml"],"latest_commit_sha":null,"homepage":"https://anemos.sh","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/ohayocorp.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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":"NOTICE","maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-07-17T08:34:11.000Z","updated_at":"2025-09-01T18:00:51.000Z","dependencies_parsed_at":"2025-09-01T20:13:05.246Z","dependency_job_id":"4a929be0-3366-468e-8798-b310485ccd1d","html_url":"https://github.com/ohayocorp/anemos","commit_stats":null,"previous_names":["ohayocorp/anemos"],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/ohayocorp/anemos","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ohayocorp%2Fanemos","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ohayocorp%2Fanemos/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ohayocorp%2Fanemos/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ohayocorp%2Fanemos/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ohayocorp","download_url":"https://codeload.github.com/ohayocorp/anemos/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ohayocorp%2Fanemos/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273887231,"owners_count":25185649,"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-09-06T02:00:13.247Z","response_time":2576,"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":["javascript","kubernetes","manifest","package-manager","typescript","yaml"],"created_at":"2025-09-06T10:02:07.146Z","updated_at":"2025-09-06T10:07:18.436Z","avatar_url":"https://github.com/ohayocorp.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Anemos\n\nAnemos is a single-binary CLI tool written in Go and designed to simplify the management of Kubernetes manifests. It\nbundles [Goja](https://github.com/dop251/goja) JavaScript runtime and lets you define your\nmanifests using JavaScript and TypeScript, enabling you to leverage the full power of the language to generate\nand manipulate Kubernetes YAML manifests.\n\nAnemos uses JavaScript package management system. You can distribute your libraries as npm packages,\nuse other Anemos packages, or any other JavaScript library, and take advantage of the vast ecosystem of tools\navailable in the JavaScript community.\n\nAnemos provides you an SDK for both template based and programmatic generation of Kubernetes manifests.\nJavaScript's template literals allow you to write clean and readable templates and libraries such as\n[kubernetes-models](https://www.npmjs.com/package/kubernetes-models) provide type safety and better\nIDE experience. You can also mix and match templates and programmatic generation, use the best approach\nfor each part of your manifest.\n\nAnemos also supports node based modification of YAML manifests. This powerful feature enables you\nto modify any YAML manifest without waiting for the package maintainers to add support for your use case\nor fix a bug in the package. It also allows you to modify manifests in bulk, making it easy to\napply changes across multiple manifests.\n\n## Installation\n\nAnemos is a single binary that can be downloaded from the [GitHub releases page](https://github.com/ohayocorp/anemos/releases).\nGet the latest version and place it in your PATH and you are ready to go.\n\n## Docs\n\nYou can visit [documentation](https://anemos.sh/docs) for more information on how to use Anemos,\nincluding examples, tutorials, and API references.\n\n## Quick Start\n\nSimplest way to get started with Anemos is to create an `index.js` file and run it with\n`anemos build index.js`:\n\n```javascript\nconst anemos = require(\"@ohayocorp/anemos\");\nconst helloWorld = require(\"https://anemos.sh/examples/hello-world.js\");\n\nconst builder = new anemos.Builder(\"1.31\", anemos.KubernetesDistribution.Minikube, anemos.EnvironmentType.Development);\n\nhelloWorld.add(builder, {\n    replicaCount: 2,\n});\n\nbuilder.addDocument(\n    `pod.yaml`,\n    `\n    apiVersion: v1\n    kind: Pod\n    metadata:\n      name: nginx\n    spec:\n      containers:\n        - name: nginx\n          image: nginx\n          ports:\n            - containerPort: 80\n    `);\n\nbuilder.build();\n```\n\nThis will generate an `output` directory containing the Kubernetes manifests generated by the\npackage from `https://anemos.sh/examples/hello-world.js` and `pod.yaml` that we defined in the code.\n\n### Using Anemos Packages\n\nFollowing example will use the `@ohayocorp/anemos-hello-world` package to generate a simple deployment:\n\n```javascript\nconst anemos = require(\"@ohayocorp/anemos\");\nconst helloWorld = require(\"@ohayocorp/anemos-hello-world\");\n\nconst builder = new anemos.Builder(\"1.32\", anemos.KubernetesDistribution.Minikube, anemos.EnvironmentType.Development);\n\nhelloWorld.add(builder, {\n    name: \"custom-hello-world\",\n    autoScaling: {\n        minReplicas: 1,\n        maxReplicas: 3,\n    },\n    ingress: {\n        host: \"hello-world.local\",\n    },\n});\n\nbuilder.build();\n```\n\nRun following command to install the package and generate the manifests:\n\n```bash\nanemos package add @ohayocorp/anemos-hello-world\nanemos build index.js\n```\n\nIt is also possible to use local JavaScript files and URLs for easy sharing. See the [documentation](https://anemos.sh/docs) for more details.\n\n### Applying Manifests\n\nAnemos can apply the generated manifests to a Kubernetes cluster. You can use the `anemos apply \u003cpackage\u003e` command\nto apply a package directly. This command will compute the diff between the current state of the cluster and the\nmanifests generated by the package, print the changes, and apply them if you confirm. It can also take a YAML file\nas input to override the default values in the package.\n\n```bash\nanemos apply --yes https://anemos.sh/examples/hello-world.js -f - \u003c\u003cEOF\nreplicaCount: 3\nEOF\n```\n\nExample output:\n\n```\n[09:44:11.880] INFO: Starting to build documents\n[09:44:11.881] INFO: Applying actions for step: '2' - Sanitize\n[09:44:11.881] INFO: Applying actions for step: '5' - Generate resources\n[09:44:11.883] INFO: Applying actions for step: '100' - Apply\n[09:44:11.883] INFO: Summary of changes:\n[09:44:11.883] INFO: OP  NAMESPACE  RESOURCE\n[09:44:11.883] INFO: A   default    deployments/anemos-hello-world\n[09:44:11.883] INFO: A   default    services/anemos-hello-world\n[09:44:11.948] INFO: Successfully applied Kubernetes manifests\n```\n\nOr use the `anemos build --apply \u003cjs-file\u003e` command to build and apply all manifests defined in the JavaScript file:\n\n```bash\nanemos build --apply index.js\n```\n\nThere are also commands to list the apply sets and delete them:\n\n```bash\nanemos apply list\nanemos apply delete \u003capply-set-id\u003e\n```\n\nSee the [documentation](https://anemos.sh/docs/simple-tutorial/applying-manifests/) for more details on how to apply manifests.\n\n## Contributing\n\nWe welcome contributions to Anemos! If you have an idea for a new feature, a bug fix, or an improvement, please\nopen an issue or a pull request on our [GitHub repository](https://github.com/ohayocorp/anemos).\n\nTo build Anemos from source, clone the repository and run the following commands:\n\n```bash\n./download-bun.sh\ngo build ./cmd/anemos\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fohayocorp%2Fanemos","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fohayocorp%2Fanemos","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fohayocorp%2Fanemos/lists"}