{"id":22820748,"url":"https://github.com/truenas/charts","last_synced_at":"2025-08-10T11:32:16.697Z","repository":{"id":37009295,"uuid":"295212900","full_name":"truenas/charts","owner":"truenas","description":"TrueNAS SCALE Apps Catalogs \u0026 Charts","archived":false,"fork":false,"pushed_at":"2025-03-06T08:28:06.000Z","size":150757,"stargazers_count":331,"open_issues_count":2,"forks_count":305,"subscribers_count":7,"default_branch":"master","last_synced_at":"2025-06-09T18:09:04.883Z","etag":null,"topics":["applications","docker","helm-chart","kubernetes","plugins","truenas-scale-chart"],"latest_commit_sha":null,"homepage":"","language":"Smarty","has_issues":false,"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/truenas.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"contributing.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","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}},"created_at":"2020-09-13T18:31:04.000Z","updated_at":"2025-06-04T22:16:31.000Z","dependencies_parsed_at":"2024-11-05T19:35:22.925Z","dependency_job_id":null,"html_url":"https://github.com/truenas/charts","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/truenas/charts","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/truenas%2Fcharts","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/truenas%2Fcharts/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/truenas%2Fcharts/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/truenas%2Fcharts/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/truenas","download_url":"https://codeload.github.com/truenas/charts/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/truenas%2Fcharts/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":269714927,"owners_count":24463492,"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-08-10T02:00:08.965Z","response_time":71,"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":["applications","docker","helm-chart","kubernetes","plugins","truenas-scale-chart"],"created_at":"2024-12-12T15:27:08.669Z","updated_at":"2025-08-10T11:32:11.689Z","avatar_url":"https://github.com/truenas.png","language":"Smarty","funding_links":[],"categories":["Smarty"],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n \u003ca href=\"https://discord.gg/Q3St5fPETd\"\u003e\u003cimg alt=\"Join Discord\" src=\"https://badgen.net/discord/members/Q3St5fPETd/?icon=discord\u0026label=Join%20the%20TrueNAS%20Community\" /\u003e\u003c/a\u003e\n \u003ca href=\"https://www.truenas.com/community/\"\u003e\u003cimg alt=\"Join Forums\" src=\"https://badgen.net/badge/Forums/Post%20Now//purple\" /\u003e\u003c/a\u003e\n \u003ca href=\"https://jira.ixsystems.com\"\u003e\u003cimg alt=\"File Issue\" src=\"https://badgen.net/badge/Jira/File%20Issue//red?icon=jira\" /\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n# iX Official Catalog\n\nA curated collection of TrueNAS SCALE enhanced Helm charts.\n\n## TrueNAS SCALE Chart Structure\n\nA TrueNAS SCALE chart repository differs slightly in directory structure from upstream repos in that it includes an `app version` directory.\n\nA TrueNAS SCALE chart also has three additional files an `app-readme.md` file that provides a high level overview display in the TrueNAS SCALE UI and a `questions.yaml` file defining questions to prompt the user with and an `item.yaml` file outlining item specific details.\n\nThere are 2 directories `charts` and `test`, each representing a train. Chart releases created from catalog items in a specific train cannot be moved to another train. Currently only the `charts` train can be used inside the UI.\n\n```shell\ncharts/ix-chart/\u003cchart version\u003e/\n  app-readme.md            # TrueNAS SCALE Specific: Readme file for display in TrueNAS SCALE UI\n  charts/                  # Directory containing dependency charts\n  Chart.yaml               # Required Helm chart information file\n  questions.yaml           # TrueNAS SCALE Specific: File containing questions for TrueNAS SCALE UI\n  README.md                # Optional: Helm Readme file (will be rendered in TrueNAS SCALE UI as well)\n  templates/               # A directory of templates that, when combined with values.yml will generate K8s YAML\n  values.yaml              # The default configuration values for this chart\n```\n\n_See the upstream Helm chart [developer reference](https://helm.sh/docs/chart_template_guide/) for a complete walk through of developing charts._\n\nTo convert an upstream chart to take advantage of TrueNAS SCALE enhanced UX, first create an `item.yaml` file.\nThis file among other catalog item information provides a list of categories that this chart fits into. This helps users navigate and filtering when browsing the catalog UI.\n\n```shell\n$ cat charts/ix-chart/item.yaml\ncategories:\n  - generic\nicon_url: \"http://ix_url\"\n```\n\nAfter that create `app-readme.md` file.\n\n```shell\n$ cat charts/ix-chart/\u003cchart version\u003e/app-readme.md\n\n# iX-Chart\n\niX-chart is a chart designed to let user deploy a docker image in a TrueNAS SCALE kubernetes cluster.\nIt provides a mechanism to specify workload type, add external host interfaces in the pods, configure volumes and allocate host resources to the workload.\n```\n\nThen add a `questions.yaml` file to prompt the user for something.\n\n```yaml\ngroups:\n  - name: \"Container Images\"\n    description: \"Image to be used for container\"\nquestions:\n  - variable: image\n    label: \"Docker Image\"\n    description: \"Docker Image Details\"\n    group: \"Container Images\"\n    schema:\n      type: dict\n      required: true\n      attrs:\n        - variable: repository\n          description: \"Docker image repository\"\n          label: \"Image repository\"\n          schema:\n            type: string\n            required: true\n        - variable: tag\n          description: \"Tag to use for specified image\"\n          label: \"Image Tag\"\n          schema:\n            type: string\n            default: \"latest\"\n        - variable: pullPolicy\n          description: \"Docker Image Pull Policy\"\n          label: \"Image Pull Policy\"\n          schema:\n            type: string\n            default: \"IfNotPresent\"\n            enum:\n              - value: \"IfNotPresent\"\n                description: \"Only pull image if not present on host\"\n              - value: \"Always\"\n                description: \"Always pull image even if present on host\"\n              - value: \"Never\"\n                description: \"Never pull image even if it's not present on host\"\n```\n\nThe above will prompt the user with 2 text fields and a dropdown in the UI getting details for image configuration in a helm chart.\n\n### Question Variable Reference\n\n| Variable                    | Type          | Required | Description                                                                                                                                                                                                                                                                             |\n| --------------------------- | ------------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| variable                    | string        | true     | define the variable name specified in the `values.yaml`file.                                                                                                                                                                                                                            |\n| label                       | string        | true     | define the UI label.                                                                                                                                                                                                                                                                    |\n| description                 | string        | false    | specify the description of the variable.                                                                                                                                                                                                                                                |\n| group                       | string        | false    | group questions by input value.                                                                                                                                                                                                                                                         |\n| schema                      | dictionary    | true     | specify schema details for the `variable`                                                                                                                                                                                                                                               |\n| schema.type                 | string        | true     | specify type of value for `variable` (current supported types are string, int, boolean, path, hostpath, list, dict, ipaddr, and cron).                                                                                                                                                  |\n| schema.required             | bool          | false    | define if the variable is required or not (true \\ false), defaults to false                                                                                                                                                                                                             |\n| schema.default              | object        | false    | specify the default value.                                                                                                                                                                                                                                                              |\n| schema.min_length           | int           | false    | min character length for string type variable.                                                                                                                                                                                                                                          |\n| schema.max_length           | int           | false    | max character length for string type variable.                                                                                                                                                                                                                                          |\n| schema.min                  | int           | false    | min integer length.                                                                                                                                                                                                                                                                     |\n| schema.max                  | int           | false    | max integer length.                                                                                                                                                                                                                                                                     |\n| schema.enum                 | []dictionary  | false    | specify the options when the variable type is `string`, for example, \u003cbr\u003e\u003cbr\u003eenum:\u003cbr\u003e - value: \"RollingUpdate\" \u003cbr\u003e\u0026nbsp;\u0026nbsp;description: \"Create new pods and then kill old ones\"\u003cbr\u003e - value: \"Recreate\"\u003cbr\u003e\u0026nbsp;\u0026nbsp;description: \"Kill existing pods before creating new ones\" |\n| schema.valid_chars          | string        | false    | regular expression for input chars validation.                                                                                                                                                                                                                                          |\n| schema.subquestions         | []subquestion | false    | add an array of subquestions.                                                                                                                                                                                                                                                           |\n| schema.show_if              | string        | false    | show current variable if condition specified is true, for example `show_if: [[\"workloadType\", \"=\", \"CronJob\"]]`                                                                                                                                                                         |\n| schema.show_subquestions_if | string        | false    | show subquestions if is true or equal to one of the options. for example `show_subquestion_if: \"static\"`. system will convert this to the filters format specified for `shcema.show_if` automatically.                                                                                  |\n| schema.attrs                | []variables   | false    | specified when `schema.type` is dictionary to declare attributes allowed in the dictionary.                                                                                                                                                                                             |\n| schema.items                | []variables   | false    | specified when `schema.type` is list to declare attributes allowed in the list.                                                                                                                                                                                                         |\n| schema.private              | bool          | false    | specified for declaring information sensitive fields.                                                                                                                                                                                                                                   |\n| schema.null                 | bool          | false    | specifies if the value for the variable can be null. defaults to false.                                                                                                                                                                                                                 |\n\n**subquestions**: `subquestions[]` cannot contain `subquestions` or `show_subquestions_if` keys, but all other keys in the above table are supported. Also variables having `schema.type` list do not support `subquestions`.\n\nThere are some novel cases where we would like to provide ability to configure / manage resources for workloads with getting some data from system dynamically.\nSo a chart can specify certain actions to be performed by the system for a variable by defining a reference. An example better illustrates this concept:\n\n```yaml\n- variable: volume\n  label: \"Volume\"\n  schema:\n    type: dict\n    $ref:\n      - \"normalize/ixVolume\"\n    attrs:\n      - variable: mountPath\n        label: \"Mount Path\"\n        description: \"Path where the volume will be mounted inside the pod\"\n        schema:\n          type: path\n          required: true\n      - variable: datasetName\n        label: \"Dataset Name\"\n        schema:\n          type: string\n          required: true\n```\n\nIn the above variable we define a `$ref` in schema which specifies that the system should take some action for normalizing the value specified for the variable.\nIn this specific case, `ix_volume` is a concept introduced where we recommend using a volume which we are able to rollback automatically on chart release rollback. In essence,\nit is just a `hostPath` volume for which the system automatically creates the dataset specified.\n\nWe have following types of actions supported in `$ref` right now:\n\n1. definitions\n2. normalize\n\nFor (1), system will automatically update schema for a particular definition. For example,\n\n```yaml\n- variable: hostInterface\n  description: \"Please specify host interface\"\n  label: \"Host Interface\"\n  schema:\n    type: string\n    required: true\n    $ref:\n      - \"definitions/interface\"\n```\n\nSystem will automatically populate available interfaces for the user based on what interfaces are available on the system.\n\nFor (2), system will normalize values or perform some actions as discussed above.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftruenas%2Fcharts","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftruenas%2Fcharts","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftruenas%2Fcharts/lists"}