{"id":38094462,"url":"https://github.com/google/kasane","last_synced_at":"2026-01-24T10:00:51.047Z","repository":{"id":62573813,"uuid":"134437666","full_name":"google/kasane","owner":"google","description":"A simple kubernetes deployment manager","archived":true,"fork":false,"pushed_at":"2021-08-31T10:14:24.000Z","size":197,"stargazers_count":173,"open_issues_count":12,"forks_count":15,"subscribers_count":5,"default_branch":"master","last_synced_at":"2026-01-18T06:04:41.424Z","etag":null,"topics":["docker","helm","ksonnet","kubernetes","kubernetes-deployment","package-manager"],"latest_commit_sha":null,"homepage":"","language":"Python","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/google.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-05-22T15:41:37.000Z","updated_at":"2025-12-15T21:20:54.000Z","dependencies_parsed_at":"2022-11-03T17:30:32.278Z","dependency_job_id":null,"html_url":"https://github.com/google/kasane","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/google/kasane","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/google%2Fkasane","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/google%2Fkasane/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/google%2Fkasane/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/google%2Fkasane/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/google","download_url":"https://codeload.github.com/google/kasane/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/google%2Fkasane/sbom","scorecard":{"id":437313,"data":{"date":"2025-08-11","repo":{"name":"github.com/google/kasane","commit":"bc81e9cfff3ffee6cb4ba55660f43e4fd7683fb4"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.7,"checks":[{"name":"Code-Review","score":1,"reason":"Found 3/22 approved changesets -- score normalized to 1","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Maintained","score":0,"reason":"project is archived","details":["Warn: Repository is archived."],"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: containerImage not pinned by hash: Dockerfile:1: pin your Docker image by updating alpine:latest to alpine:latest@sha256:4bcff63911fcb4448bd4fdacec207030997caf25e9bea4045fa6c8c44de311d1","Warn: pipCommand not pinned by hash: Dockerfile:5-11","Info:   0 out of   1 containerImage dependencies pinned","Info:   0 out of   1 pipCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: Apache License 2.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Security-Policy","score":10,"reason":"security policy file detected","details":["Info: security policy file detected: github.com/google/.github/SECURITY.md:1","Info: Found linked content: github.com/google/.github/SECURITY.md:1","Info: Found disclosure, vulnerability, and/or timelines in security policy: github.com/google/.github/SECURITY.md:1","Info: Found text in security policy: github.com/google/.github/SECURITY.md:1"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 12 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-19T04:58:54.563Z","repository_id":62573813,"created_at":"2025-08-19T04:58:54.563Z","updated_at":"2025-08-19T04:58:54.563Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28724374,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-24T08:27:05.734Z","status":"ssl_error","status_checked_at":"2026-01-24T08:27:01.197Z","response_time":89,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["docker","helm","ksonnet","kubernetes","kubernetes-deployment","package-manager"],"created_at":"2026-01-16T21:00:23.269Z","updated_at":"2026-01-24T10:00:51.028Z","avatar_url":"https://github.com/google.png","language":"Python","funding_links":[],"categories":["Configuration Management"],"sub_categories":[],"readme":"# Kasane\n\n![](https://raw.githubusercontent.com/google/kasane/master/logo.png)\n\nkasane [ 重ね ] (n.) pile; heap; layers\n\n**This is not an official Google product**\n\nKasane is a layering tool for kubernetes. It allows you to use the officially published YAML documents and extend them further with your local configuration.\n\nKasane can utilise Jsonnet for deep object modification and patching.\n\n## Archival notice\n\nAs time goes the k8s infrastructure takes shape. Kasane was an interesting experiment, but practice demonstrated that k8s deployments often need to interact with various third-party services, be those clouds, credential storages, or databases.\n\nKasane can be somewhat easily replicated with pulumi. Go try that.\n\n## Installation\n\nKasane requires Python 3+. Install via pip:\n\n```shell\npip install kasane\n```\n\nInstallation via Homebrew:\n\n```shell\nbrew tap google/kasane https://github.com/google/kasane.git\nbrew install google/kasane/kasane\n```\n\n## Running from a Docker container\n\nYou can run kasane from a docker container, the official image is `gcr.io/kasaneapp/kasane`. The image is based on alpine and comes pre-packaged with bash, curl, git and kubectl in addition to kasane itself. The workdir is set to `/app` and the default command is `kasane show` so you can quickly examine your local Kasanefiles like this:\n\n```bash\n$ docker run --rm -ti -v $PWD/examples/03-environment:/app gcr.io/kasaneapp/kasane\nconfig:\n  defaultFlag: UNRESOLVED_ENV_VAR__DEFAULT_VALUE\n  defaultFromKasanefile: value\n  jsonnetEnv: UNRESOLVED_ENV_VAR__OTHER_VALUE\nkind: VendoredObject\nmetadata:\n  name: PreconfiguredObject\n```\n\nTagged builds for versions starting with 0.1.4 are also available as e.g. `gcr.io/kasaneapp/kasane:0.1.4`.\n\n## Examples\n\n* [Simple Layers](examples/01-simple-layers) is an introduction to kasane features.\n* [Jsonnet Transformations](examples/02-jsonnet-transformations) shows how to use Jsonnet to transform objects.\n* [Environment](examples/03-environment) explains how to use the external environment for customized pipelines.\n* [Complex Service](examples/04-complex-service) shows all the features together by using the upstream configuration for kubernetes dashboard, adding an ingress, and optionally enabling istio sidecar.\n\n## Similar tools\n\n### Helm\n\nHelm is fully-featured package management solution for kubernetes. Compared to it, kasane is a swiss army knife. It's simple, lightweight, doesn't install helper code into your production. Kasane allows you to use original YAML files written by application authors, modifying them to your local needs. If you see a `kubectl apply -f http://` example you can turn it into a Kasane deployment with a single line of code and then extend it to your needs.\n\nKasane doesn't do any templating, relying on Jsonnet for data manipulation. You won't ever need to count number of spaces to make sure your yaml go template is rendered correctly.\n\n### Ksonnet\n\nKasane is similar to Ksonnet but is much simpler to use. Kasane allows to re-use original YAML files and minimizes amount of custom Jsonnet code you need to write. Most of the time your Kasane project would consist of a Kasanefile and single yaml or jsonnet file. Still, Kasane allows runtime flexibility with conditional layers and custom environment.\n\n## License\n\nKasane is distributed under Apache-2 [license](LICENSE). See the [contributing guidelines](CONTRIBUTING.md) on how you can contribute to the project.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgoogle%2Fkasane","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgoogle%2Fkasane","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgoogle%2Fkasane/lists"}