# ChartMuseum — Open-Source Helm Chart Repository Server > ChartMuseum is a self-hosted Helm chart repository server with support for multiple cloud storage backends, chart versioning, and a RESTful API. ## Install Save as a script file and run: # ChartMuseum — Open-Source Helm Chart Repository Server ## Quick Use ```bash # Install brew install chartmuseum # or download from GitHub Releases # Start with local storage chartmuseum --storage local --storage-local-rootdir ./charts --port 8080 # Push a chart helm package my-chart/ curl --data-binary "@my-chart-0.1.0.tgz" http://localhost:8080/api/charts # Add as a Helm repo helm repo add my-repo http://localhost:8080 helm repo update ``` ## Introduction ChartMuseum is a self-hosted HTTP server for Helm charts maintained under the Helm project umbrella. It provides a simple way to host a private Helm chart repository with pluggable storage backends including S3, GCS, Azure Blob, and local filesystem. It implements the Helm chart repository specification and adds a REST API for chart management. ## What ChartMuseum Does - Serves Helm chart packages over HTTP with automatic `index.yaml` generation - Accepts chart uploads via a REST API for CI/CD integration - Supports cloud storage backends: Amazon S3, Google Cloud Storage, Azure Blob, and more - Provides basic authentication and bearer token authorization - Tracks chart versions and allows overwriting or immutable version policies ## Architecture Overview ChartMuseum is a single Go binary that runs an HTTP server. On startup, it scans the configured storage backend for `.tgz` chart packages and builds an in-memory index. The index is served at `/index.yaml` per the Helm spec. Uploads via `/api/charts` are validated, stored in the backend, and reflected in the index. A cache layer reduces storage read latency for frequently accessed index entries. ## Self-Hosting & Configuration - Run as a standalone binary, Docker container, or deploy via the official Helm chart - Configure the storage backend via environment variables or CLI flags - Set `--storage=amazon` with `AWS_ACCESS_KEY_ID` and bucket name for S3 hosting - Enable basic auth with `--basic-auth-user` and `--basic-auth-pass` flags - Use `--allow-overwrite` to permit re-uploading the same chart version ## Key Features - Multiple storage backends: local filesystem, S3, GCS, Azure Blob, Alibaba OSS, OpenStack - Automatic `index.yaml` generation and rebuild on chart upload or deletion - REST API for uploading, listing, and deleting charts from CI/CD pipelines - Configurable chart immutability to prevent overwriting published versions - Lightweight single binary that runs anywhere without external dependencies ## Comparison with Similar Tools - **Harbor** — Full container and chart registry with RBAC, scanning, and replication - **Nexus Repository** — Universal artifact manager, heavier but supports more formats - **OCI registries** — Helm 3+ supports OCI-based chart storage, no separate server needed - **GitHub Pages** — Free static hosting for public chart repos, no upload API - **JFrog Artifactory** — Enterprise artifact management with Helm support, commercial ## FAQ **Q: Does ChartMuseum support OCI-based Helm charts?** A: No. ChartMuseum implements the classic Helm chart repository protocol. For OCI distribution, use an OCI registry like Harbor or GHCR. **Q: Can I use ChartMuseum with Helm 3?** A: Yes. ChartMuseum works with both Helm 2 and Helm 3. Add it as a repo with `helm repo add`. **Q: How do I integrate ChartMuseum into CI/CD?** A: Use `curl` or the `helm-push` plugin to upload packaged charts to the `/api/charts` endpoint after a successful build. **Q: Is there a web UI for browsing charts?** A: ChartMuseum itself is API-only. Community tools like Kubeapps or Monocular provide a web UI on top. ## Sources - https://github.com/helm/chartmuseum - https://chartmuseum.com/ --- Source: https://tokrepo.com/en/workflows/asset-e42c5b7e Author: Script Depot