{"id":19566449,"url":"https://github.com/verdaccio/charts","last_synced_at":"2026-03-15T17:21:24.045Z","repository":{"id":38314381,"uuid":"253181749","full_name":"verdaccio/charts","owner":"verdaccio","description":"☸️🐳 Verdaccio Helm chart repository","archived":false,"fork":false,"pushed_at":"2024-10-05T05:44:16.000Z","size":184,"stargazers_count":60,"open_issues_count":13,"forks_count":58,"subscribers_count":14,"default_branch":"master","last_synced_at":"2024-10-30T00:54:48.349Z","etag":null,"topics":["devops","docker","hacktoberfest","helm-charts","kubernetes","nodejs","verdaccio"],"latest_commit_sha":null,"homepage":"https://charts.verdaccio.org","language":"Mustache","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/verdaccio.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","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},"funding":{"open_collective":"verdaccio","github":"verdaccio"}},"created_at":"2020-04-05T07:45:56.000Z","updated_at":"2024-10-05T05:44:07.000Z","dependencies_parsed_at":"2023-12-15T03:38:52.452Z","dependency_job_id":"14af9495-85d1-4504-9212-0687f29446f8","html_url":"https://github.com/verdaccio/charts","commit_stats":{"total_commits":101,"total_committers":34,"mean_commits":"2.9705882352941178","dds":0.6336633663366337,"last_synced_commit":"4aab0133f86b7f61391a1f997f1201c842f67e21"},"previous_names":[],"tags_count":58,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/verdaccio%2Fcharts","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/verdaccio%2Fcharts/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/verdaccio%2Fcharts/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/verdaccio%2Fcharts/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/verdaccio","download_url":"https://codeload.github.com/verdaccio/charts/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247299832,"owners_count":20916190,"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":["devops","docker","hacktoberfest","helm-charts","kubernetes","nodejs","verdaccio"],"created_at":"2024-11-11T05:31:54.413Z","updated_at":"2026-03-15T17:21:24.036Z","avatar_url":"https://github.com/verdaccio.png","language":"Mustache","funding_links":["https://opencollective.com/verdaccio","https://github.com/sponsors/verdaccio"],"categories":["Mustache"],"sub_categories":[],"readme":"# Verdaccio\n\n[Verdaccio](https://www.verdaccio.org) is a lightweight private\n[Node.js](https://www.npmjs.com) proxy registry.\n\n## TL;DR;\n\n```\n$ helm repo add verdaccio https://charts.verdaccio.org\n$ helm repo update\n$ helm install verdaccio verdaccio/verdaccio\n```\n\n\u003e ⚠️ If you are using **stable/verdaccio** chart, [be aware is deprecated](https://github.com/helm/charts/pull/21929), forward all new PR and or issues to this repository.\n\n\u003e If you need support for Helm v2, please use `\u003c=v0.19.0`, be aware we do not support Helm v2 anymore.\n\n## Introduction\n\nThis chart bootstraps a [Verdaccio](https://github.com/verdaccio/verdaccio)\ndeployment on a [Kubernetes](https://kubernetes.io) cluster using the\n[Helm](https://helm.sh) package manager.\n\n## Prerequisites\n\n- Kubernetes 1.7+ with Beta APIs enabled\n- PV provisioner support in the underlying infrastructure\n\n## Installing the Chart\n\n### Add repository\n\n```\nhelm repo add verdaccio https://charts.verdaccio.org\n```\n\n### Install Verdaccio chart\n\nIn this example we use `npm` as release name:\n\n```bash\n# Helm v3+\nhelm install npm verdaccio/verdaccio\n```\n\n\u003e **Note**: Avoid release name `verdaccio`, otherwise, Kubernetes-generated environment variables may get into conflict with Verdaccio's own environment variables in the Pod itself. In case you insist naming the release `verdaccio`, to mitigate the problem, you can use either `nameOverride` or `fullnameOverride` to have a different name for the service.\n\n### Deploy a specific version\n\n```bash\n# Helm v3+\nhelm install npm --set image.tag=6.0.0 verdaccio/verdaccio\n```\n\n### Upgrading Verdaccio\n\n```bash\nhelm upgrade npm verdaccio/verdaccio\n```\n\nThe command deploys Verdaccio on the Kubernetes cluster in the default\nconfiguration. The [configuration](#configuration) section lists the parameters\nthat can be configured during installation.\n\n\u003e **Tip**: List all releases using `helm list`\n\n## Uninstalling the Chart\n\nTo uninstall/delete the `npm` deployment:\n\n```bash\n# Helm v3+\nhelm uninstall npm\n```\n\nThe command removes all the Kubernetes components associated with the chart and\ndeletes the release.\n\n## Configuration\n\nThe following table lists the configurable parameters of the Verdaccio chart\nand their default values.\n\n| Parameter                          | Description                                                                      | Default                        |\n| ---------------------------------- | -------------------------------------------------------------------------------- | ------------------------------ |\n| `type`                             | The type of resource to create. Either `deployment` or `statefulset`. Note: Statefulset is primarly useful when Verdaccio is being used as an edge cache | `deployment` |\n| `annotations`                      | Annotations to set on the deployment                                             | `{}`                           |\n| `affinity`                         | Affinity for pod assignment                                                      | `{}`                           |\n| `existingConfigMap`                | Name of custom ConfigMap to use                                                  | `false`                        |\n| `image.pullPolicy`                 | Image pull policy                                                                | `IfNotPresent`                 |\n| `image.pullSecrets`                | Image pull secrets                                                               | `[]`                           |\n| `image.repository`                 | Verdaccio container image repository                                             | `verdaccio/verdaccio`          |\n| `image.tag`                        | Verdaccio container image tag                                                    | `5.21.1`                       |\n| `nodeSelector`                     | Node labels for pod assignment                                                   | `{}`                           |\n| `tolerations`                      | List of node taints to tolerate                                                  | `[]`                           |\n| `persistence.accessMode`           | PVC Access Mode for Verdaccio volume                                             | `ReadWriteOnce`                |\n| `persistence.annotations`          | Annotations to add to the PVC                                                    | `{}`                           |\n| `persistence.enabled`              | Enable persistence using PVC                                                     | `true`                         |\n| `persistence.existingClaim`        | Use existing PVC. Ignored when `type` is `statefuleset`                                                                | `nil`                          |\n| `persistence.mounts`               | Additional mounts                                                                | `nil`                          |\n| `persistence.resourcePolicy`       | Set \"keep\" to avoid removing PVC during a helm delete operation                  | `\"\"`                           |\n| `persistence.selector`             | Selector to match an existing Persistent Volume                                  | `{}` (evaluated as a template) |\n| `persistence.size`                 | PVC Storage Request for Verdaccio volume                                         | `8Gi`                          |\n| `persistence.storageClass`         | PVC Storage Class for Verdaccio volume                                           | `nil`                          |\n| `persistence.volumes`              | Additional volumes                                                               | `nil`                          |\n| `topologySpreadConstraints`        | Topology Spread Constraints for pod assignment                                   | `[]`                           |\n| `podLabels`                        | Additional pod labels                                                            | `{}` (evaluated as a template) |\n| `podAnnotations`                   | Annotations to add to each pod                                                   | `{}`                           |\n| `priorityClass.enabled`            | Enable specifying pod priorityClassName                                          | `false`                        |\n| `priorityClass.name`               | PriorityClassName to be specified in pod spec                                    | `\"\"`                           |\n| `replicaCount`                     | Desired number of pods                                                           | `1`                            |\n| `replicaCountEnabled`              | Enable the replicaCount field                                                    | `true`                         |\n| `strategy`                         | The deployment strategy field                                                    | If persistence is enabled, the strategy type is set to `Recreate`, otherwise `RollingUpdate` |\n| `livenessProbe`                    | Configuration of liveness probe                                                  | `{}`                           |\n| `readinessProbe`                   | Configuration of readiness probe                                                 | `{}`                           |\n| `resources`                        | CPU/Memory resource requests/limits                                              | `{}`                           |\n| `service.annotations`              | Annotations to add to service                                                    | none                           |\n| `service.clusterIP`                | IP address to assign to service                                                  | `\"\"`                           |\n| `service.externalIPs`              | Service external IP addresses                                                    | `[]`                           |\n| `service.loadBalancerIP`           | IP address to assign to load balancer (if supported)                             | `\"\"`                           |\n| `service.loadBalancerSourceRanges` | List of IP CIDRs allowed access to load balancer (if supported)                  | `[]`                           |\n| `service.port`                     | Service port to expose                                                           | `4873`                         |\n| `service.nodePort`                 | Service port to expose                                                           | none                           |\n| `service.type`                     | Type of service to create                                                        | `ClusterIP`                    |\n| `serviceAccount.create`            | Create service account                                                           | `false`                        |\n| `serviceAccount.name`              | Service account Name                                                             | none                           |\n| `extraEnvVars`                     | Define environment variables to be passed to the container                       | `[]`                           |\n| `secretEnvVars`                    | Define sensitive environment variables to be passed to the container             | `{}`                           |\n| `existingSecret`                   | Existing secret containing environment variables to be passed to the container   | `\"\"`                           |\n| `extraInitContainers`              | Define additional initContainers to be added to the deployment                   | `[]`                           |\n| `securityContext`                  | Define Container Security Context                                                | `{runAsUser=10001}`            |\n| `podSecurityContext`               | Define Pod Security Context                                                      | `{fsGroup=101}`                |\n| `nameOverride`                     | Set resource name override                                                       | `\"\"`                           |\n| `fullnameOverride`                 | Set resource fullname override                                                   | `\"\"`                           |\n| `useSecretHtpasswd`                | Use htpasswd from `.Values.secrets.htpasswd`. This require helm v3.2.0 or above. | `false`                        |\n| `secrets.htpasswd`                 | user and password list to generate htpasswd.                                     | `[]`                           |\n| `secrets.existingSecretHtpasswd`   | Existing secret containing htpasswd file (alternative to `secrets.htpasswd`)     | `\"\"`                           |\n| `secrets.existingSecretHtpasswdKey` | Key in the existing secret that contains the htpasswd file content              | `\"htpasswd\"`                   |\n| `gatewayApi.enabled`               | Enable/Disable Gateway API HTTPRoute (alternative to Ingress)                    | `false`                        |\n| `gatewayApi.parentRefs`            | List of parent Gateway references                                                | `[]`                           |\n| `gatewayApi.hostnames`             | List of hostnames for the HTTPRoute                                              | `[]`                           |\n| `gatewayApi.annotations`           | HTTPRoute Annotations                                                            | `{}`                           |\n| `gatewayApi.labels`                | HTTPRoute Labels                                                                 | `{}`                           |\n| `gatewayApi.rules`                 | Custom HTTPRoute routing rules. Defaults to PathPrefix `/` if not set            | `nil`                          |\n| `ingress.enabled`                  | Enable/Disable Ingress                                                           | `false`                        |\n| `ingress.className`                | Ingress Class Name (k8s `\u003e=1.18` required)                                       | `\"\"`                           |\n| `ingress.labels`                   | Ingress Labels                                                                   | `{}`                           |\n| `ingress.annotations`              | Ingress Annotations                                                              | `{}`                           |\n| `ingress.hosts`                    | List of Ingress Hosts                                                            | `[]`                           |\n| `ingress.paths`                    | List of Ingress Paths                                                            | `[\"/\"]`                        |\n| `ingress.extraPaths`               | List of extra Ingress Paths                                                      | `[]`                           |\n| `extraPorts`                       | List of extra ports to expose from the pods                                      | `[]`                           |\n| `extraManifests`                   | List of extra manifests to deploy within the chart                               | `[]`                           |\n\nSpecify each parameter using the `--set key=value[,key=value]` argument to `helm install`. For example,\n\n```bash\n# Helm v3+\n$ helm install my-release \\\n  --set service.type=LoadBalancer \\\n    verdaccio/verdaccio\n```\n\nThe above command sets the service type LoadBalancer.\n\nAlternatively, a YAML file that specifies the values for the above parameters\ncan be provided while installing the chart. For example,\n\n```bash\n# Helm v3+\n$ helm install npm -f values.yaml verdaccio/verdaccio\n```\n\n\u003e **Tip**: You can use the default [values.yaml](charts/verdaccio/values.yaml)\n\n### Generate htpasswd using helm\n\nThis requires helm v3.2.0 or above. You can list all username and password in\n`.Values.secrets.htpasswd`. Helm will generate secret with htpaswd format. This\nfile is mounted on pod in this path `/verdaccio/auth/htpasswd`. The Default\nconfig uses this. The conditional statement `{{- if .Values.secrets.htpasswd }}`\nis evaluated as false if the list is an empty collection.\n(Source [helm flow control](https://helm.sh/docs/chart_template_guide/control_structures/#ifelse))\n\n\u003e **Tip**: These values are in plaintext. So don't forget to put additional\n\u003e encryption.\n\n#### Example\n\n```yaml\nsecrets:\n  # list of users and password for htpasswd plugin\n  # This this is mounted as /verdaccio/auth/htpasswd on pods\n  htpasswd:\n    - username: \"verdaccio\"\n      password: \"verdaccio\"\n```\n\nThis config will create a htpasswd file with user \"verdaccio\", If in config\n'htpasswd' auth is used. You can login using this credentials.\n\n### Use existing secret for htpasswd\n\nInstead of providing plain text credentials in `values.yaml`, you can reference an\nexisting Kubernetes secret containing the htpasswd file. This is more secure as it\navoids storing passwords in plain text in your values files.\n\nWhen `secrets.existingSecretHtpasswd` is set, the chart will use the specified\nsecret instead of generating one from `secrets.htpasswd`. The secret must contain\na key with the htpasswd file content (default key: `htpasswd`, configurable via\n`secrets.existingSecretHtpasswdKey`).\n\n#### Example\n\n```yaml\nsecrets:\n  # Reference an existing secret instead of providing plain text credentials\n  existingSecretHtpasswd: \"my-htpasswd-secret\"\n  existingSecretHtpasswdKey: \"htpasswd\"  # Optional, defaults to \"htpasswd\"\n```\n\nThe existing secret should contain the htpasswd file content in the specified key.\nYou can create such a secret using:\n\n```bash\nkubectl create secret generic my-htpasswd-secret \\\n  --from-file=htpasswd=/path/to/htpasswd\n```\n\n\u003e **Note**: If both `secrets.htpasswd` and `secrets.existingSecretHtpasswd` are set,\n\u003e `secrets.existingSecretHtpasswd` takes precedence and no secret will be generated\n\u003e from `secrets.htpasswd`.\n\n\u003e **Important**: When using an existing secret, pods will **not** automatically restart\n\u003e when the secret content is updated. This is a limitation of Kubernetes - it doesn't\n\u003e track changes to external secrets. You need to manually trigger a pod restart after\n\u003e updating the secret:\n\u003e\n\u003e ```bash\n\u003e kubectl rollout restart deployment/\u003crelease-name\u003e-verdaccio\n\u003e ```\n\n### Gateway API (HTTPRoute)\n\nAs an alternative to traditional Ingress, this chart supports creating an [HTTPRoute](https://gateway-api.sigs.k8s.io/) resource for use with the Gateway API. This requires a Gateway API implementation (e.g., Envoy Gateway, Istio, Cilium, nginx-gateway-fabric) and a `Gateway` resource already deployed in your cluster.\n\n#### Example\n\n```yaml\ngatewayApi:\n  enabled: true\n  parentRefs:\n    - name: my-gateway\n      namespace: default\n  hostnames:\n    - npm.example.com\n```\n\n\u003e **Note**: The chart only creates an `HTTPRoute` — the `Gateway` resource itself should be managed separately as cluster infrastructure. Both `ingress` and `gatewayApi` can coexist if needed during migration.\n\n### Custom ConfigMap\n\nWhen creating a new chart with this chart as a dependency, CustomConfigMap can\nbe used to override the default config.yaml provided. It also allows for\nproviding additional configuration files that will be copied into\n`/verdaccio/conf`. In the parent chart's values.yaml, set the value to true and\nprovide the file `templates/config.yaml` for your use case.\n\n### Persistence\n\nThe Verdaccio image stores persistence under `/verdaccio/storage` path of the\ncontainer. A dynamically managed Persistent Volume Claim is used to keep the\ndata across deployments, by default. This is known to work in GCE, AWS, and\nminikube.\nAlternatively, a previously configured Persistent Volume Claim can be used.\n\nIt is possible to mount several volumes using `Persistence.volumes` and\n`Persistence.mounts` parameters.\n\n#### Existing PersistentVolumeClaim\n\n1. Create the PersistentVolume\n1. Create the PersistentVolumeClaim\n1. Install the chart\n\n```bash\n# Helm v3+\n$ helm install npm \\\n    --set persistence.existingClaim=PVC_NAME \\\n    verdaccio/verdaccio\n```\n\n### Migrating chart 2.x -\u003e 3.x\n\nDue to some breaking changes in Selector Labels and Security Contexts in Chart `3.0.0` you will need to migrate when upgrading.\n\nFirst off, the `securityContext.enabled` field has been removed.\nIn addition to this, `fsGroup` is not a valid Container Security Context field and has been migrated to the `podSecurityContext` instead.\n\n```diff\n# values.yaml\npodSecurityContext:\n+  fsGroup: 101\n securityContext:\n-  enabled: true\n-  fsGroup: 101\n   runAsUser: 10001\n```\n\nSecondly, the `apps.v1.Deployment.spec.selector` field is immutable and changes were made to Selector Labels which tries to update this.\nTo get around this, you will need to `kubectl delete deployment $deploymentName` before doing a `helm upgrade`\nSo long as your PVC is not destroyed, the new deployment will be rolled out with the same PVC as before and your data will remain intact.\n\n### Migrating chart 3.x -\u003e 4.x\n\nDue the major release **Verdaccio 5** has some breaking changes to be aware of, please [read the migration guide here](https://verdaccio.org/blog/2021/04/14/verdaccio-5-migration-guide).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fverdaccio%2Fcharts","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fverdaccio%2Fcharts","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fverdaccio%2Fcharts/lists"}