{"id":28924095,"url":"https://github.com/totegamma/yisp","last_synced_at":"2026-01-26T15:02:00.515Z","repository":{"id":291792278,"uuid":"977705592","full_name":"totegamma/yisp","owner":"totegamma","description":"YISP is a Lisp-inspired evaluation engine for YAML – useful for generating Kubernetes manifests, configuration files, and more.","archived":false,"fork":false,"pushed_at":"2025-12-26T09:38:51.000Z","size":4835,"stargazers_count":10,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-12-27T21:40:13.883Z","etag":null,"topics":["configuration","infrastructure-as-code","kubernetes","lisp","yaml"],"latest_commit_sha":null,"homepage":"","language":"Go","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/totegamma.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":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-05-04T19:45:41.000Z","updated_at":"2025-12-26T09:38:54.000Z","dependencies_parsed_at":"2025-05-31T06:59:42.431Z","dependency_job_id":"93bf5862-34ce-4b27-8dd6-c7d1ef94d792","html_url":"https://github.com/totegamma/yisp","commit_stats":null,"previous_names":["totegamma/yisp"],"tags_count":24,"template":false,"template_full_name":null,"purl":"pkg:github/totegamma/yisp","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/totegamma%2Fyisp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/totegamma%2Fyisp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/totegamma%2Fyisp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/totegamma%2Fyisp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/totegamma","download_url":"https://codeload.github.com/totegamma/yisp/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/totegamma%2Fyisp/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28781308,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-26T13:55:28.044Z","status":"ssl_error","status_checked_at":"2026-01-26T13:55:26.068Z","response_time":59,"last_error":"SSL_read: 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":["configuration","infrastructure-as-code","kubernetes","lisp","yaml"],"created_at":"2025-06-22T10:04:04.896Z","updated_at":"2026-01-26T15:02:00.504Z","avatar_url":"https://github.com/totegamma.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"./docs/assets/yisp-logo.png\" alt=\"yisp logo\" width=\"280px\"/\u003e\n  \n  # YISP - A Lisp-inspired Functional Engine for YAML\n  [![Test](https://github.com/totegamma/yisp/actions/workflows/test.yaml/badge.svg)](https://github.com/totegamma/yisp/actions/workflows/test.yaml)\n  \n  [[getting-started]](https://github.com/totegamma/yisp/blob/main/docs/getting-started.md) | [[examples]](https://github.com/totegamma/yisp/blob/main/docs/examples.md) | [[other docs]](https://github.com/totegamma/yisp/tree/main/docs)\n\u003c/div\u003e\n\n**YISP** (suggested pronunciation: `/ˈjɪsp/`) is a lightweight evaluation engine for YAML, inspired by Lisp.  \nIt allows you to embed logic, expressions, and includes within YAML files.  \nThis is useful for generating structured configuration such as Kubernetes manifests, Ansible playbooks, and more.\n\n## Installation\nDownload latest version from [release page](https://github.com/totegamma/yisp/releases).\n\nor use go install:\n```sh\ngo install github.com/totegamma/yisp@latest\n```\n\n### Create cache for k8s definitions\n\nIf you use kubernetes manifests, you have to create a cache for kubernetes definitions.\nRun the following command to download the latest Kubernetes API definitions:\n\n```sh\nyisp cache-kube-schemas\n```\n\nThis command will run `kubectl get --raw /openapi/v2` to fetch the OpenAPI schema and store it in the cache directory.\nYou have to set up kubectl before running this command, so that it can access your Kubernetes cluster.\n\n## Syntax\nIn yisp, YAML documents are treated as plain data by default.  \nTo enable evaluation, you explicitly mark expressions using the `!yisp` tag.\n\nWhen a list or object is tagged with `!yisp`, its contents are recursively evaluated as yisp expressions.  \nTo embed unevaluated YAML structures inside expressions, you can use the `!quote` tag to suppress evaluation.\n\n### simple example:\n\nhello_world.yaml\n```yaml\nmystring: !yisp\n  - strings.concat\n  - hello\n  - ' '\n  - world\n```\n\nbuild:\n```sh\nyisp build hello_world.yaml\n```\n\nresult:\n```yaml\nmystring: hello world\n```\n\n### Define functions and call it from another file:\n\ntemplate.yaml:\n```yaml\n!yisp \u0026mkpod\n- lambda\n- [!string name, !string image]\n- !quote\n  apiVersion: v1\n  kind: Pod\n  metadata:\n    name: *name\n  spec:\n    containers:\n      - name: *name\n        image: *image\n```\n\nmain.yaml\n```yaml\n!yisp\n- import\n- [\"template\", \"./template.yaml\"]\n---\n!yisp\n- *template.mkpod\n- mypod1\n- myimage1\n```\n\nresult:\n```yaml\napiVersion: v1\nkind: Pod\nmetadata:\n  name: mypod1\nspec:\n  containers:\n    - name: mypod1\n      image: myimage1\n```\n\nMore examples are available in `/testfiles`.\n\n## Use yisp from Go code\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\t\"github.com/totegamma/yisp/engine\"\n)\n\nfunc main() {\n\n\te := engine.NewEngine(engine.Options{})\n\n\tevaluated, err := e.EvaluateFileToYaml(\"test.yaml\")\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\tfmt.Println(\"Evaluated YAML:\")\n\tfmt.Println(evaluated)\n\n}\n```\n\nalso you can use `engine.EvaluateFileToAny` to get the result as go `any` type.\n\n## Use yisp from Kustomize\n\nYou can call yisp via KRM function callings.\n\n```yaml\napiVersion: krm.yisp.gammalab.net/v1\nkind: Yisp\nmetadata:\n  name: add-labels-transformer\n  annotations:\n    config.kubernetes.io/function: |\n      container:\n        image: ghcr.io/totegamma/yisp\nspec:\n  allowUntypedManifest: true\n  yisp: |\n    !yisp\n    - lists.map\n    - *items\n    - - lambda\n      - [item]\n      - - maps.merge\n        - *item\n        - !quote\n          metadata:\n            labels:\n              added-by: yisp-transformer\n```\n\n[full example is here](https://github.com/totegamma/yisp/tree/main/docs/examples/krm)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftotegamma%2Fyisp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftotegamma%2Fyisp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftotegamma%2Fyisp/lists"}