Implementing Chart Deprecation Strategies

1. Marking Charts as Deprecated

Example: Deprecated chart

# Chart.yaml
apiVersion: v2
name: legacy-api
version: 2.0.1
deprecated: true        # Marks chart as deprecated in repo index
description: "[DEPRECATED] Use 'api' chart instead"
EffectDetail
Repo indexMarked deprecated; hidden from search by default
Artifact HubShows deprecation banner
InstallStill works (with warning)

2. Documenting Deprecation Reasons

Example: Annotations + README

annotations:
  artifacthub.io/changes: |
    - kind: deprecated
      description: "Replaced by 'api' chart; see UPGRADING.md"
  artifacthub.io/license: Apache-2.0

3. Providing Migration Paths

DocContent
UPGRADING.mdStep-by-step values mapping old → new
NOTES.txtRuntime banner pointing to migration guide
Migration scriptTool to translate old values.yaml to new format

4. Setting Deprecation Timeline

PhaseDuration
AnnounceMark deprecated; continue accepting bug fixes
Grace period≥6 months minimum (1 year for enterprise)
FreezeSecurity fixes only
RemoveStop publishing new versions; keep existing tags

5. Communicating to Users

6. Maintaining Deprecated Charts

MaintenanceDuring grace
Security fixesYes
Critical bugsYes
New featuresNo
K8s API updatesYes (when needed for compatibility)

7. Removing Deprecated Charts

StepAction
Stop releasingNo new chart versions
Update indexKeep existing entries (don't break installs)
Archive sourceMove repo to archived/
Redirect docsReplace README with pointer to successor
Warning: Never delete published chart versions from a repo or OCI registry. Users have pinned versions; removal breaks reproducible builds.

8. Archiving Old Chart Versions

AssetArchive strategy
HTTP repoKeep .tgz files; mark entries deprecated in index.yaml
OCI registryTag :archived; keep all version tags
Source repoTag final release; archive on GitHub

9. Redirecting to Replacements

Example: NOTES.txt redirect

┌──────────────────────────────────────────────────────────────┐
│ ⚠  This chart is DEPRECATED and will be removed on 2026-12.  │
│                                                              │
│ Please migrate to: oci://ghcr.io/acme/charts/api             │
│ Migration guide:   https://acme.io/docs/migrate-api          │
└──────────────────────────────────────────────────────────────┘

10. Handling Breaking Changes

StrategyDetail
New chart namePublish replacement under different name; users opt in
MAJOR bumpSame chart, breaking change documented in UPGRADING.md
Deprecation warningsEmit via fail or NOTES.txt when removed values detected
Compatibility shimAccept both old + new values for one MAJOR cycle
Schema validationReject removed values via values.schema.json