How to delete/remove/unlink/unversion a package from the Github Package Registry

Removing a package from a public registry is not allowed, however you can remove a version of a package from a private registry as mentioned in GitHub docs:

Now it is available to delete on GitHub directly:

  1. On GitHub, navigate to the main page of the repository.
  2. To the right of the list of files, click Packages.
  3. Click the name of the package that you want to delete.
  4. On the right, use the Edit package drop-down and select "Manage versions".
  5. To the right of the version you want to delete, click Delete.
  6. To confirm deletion, type the package name and click I understand the consequences, delete this version.

GraphQL was the only method for this purpose in the past:

$ curl -X POST https://api.github.com/graphql \
-H "Accept: application/vnd.github.package-deletes-preview+json" \
-H "Authorization: bearer <github_token>" \
-d '{"query":"mutation { deletePackageVersion(input:{packageVersionId:\"MDE0OlBhY2thZ2VWZXJzaW9uMzc5MTE0kFcA\"}) { success }}"}'

Version id of GitHub packages can be listed as follows:

$ curl -sL -X POST https://api.github.com/graphql \
-H "Authorization: bearer <github_token>" \
-d '{"query":"query{repository(owner:\"<repo_owner>\",name:\"<repo_name>\"){packages(first:10){nodes{packageType,name,id,versions(first:10){nodes{id,version,readme}}}}}}"}' | jq .

Update the parameters below with yours:

  • <github_token>
  • <repo_owner>
  • <repo_name>

It returns as follows:

{
  "data": {
    "repository": {
      "registryPackages": {
        "nodes": [
          {
            "packageType": "DOCKER",
            "registryPackageType": "docker",
            "name": "demo_image_1",
            "nameWithOwner": "aki***/demo_image_1",
            "id": "MDc6UGFja2FnZTYzNjg3AkFc",
            "versions": {
              "nodes": [
                {
                  "id": "MDE0OlBhY2thZ2VWZXJzaW9uMzc5MTE0kFcA",
                  "version": "0.1a",
                  "readme": null
                },
                {
                  "id": "MDE0OlBhY2thZ2VWZXJzaW9uMzYzNTY2FcAk",
                  "version": "0.1",
                  "readme": null
                },
                {
                  "id": "MDE0OlBhY2thZ2VWZXJzaW9uMzYzNTY0cAkF",
                  "version": "docker-base-layer",
                  "readme": null
                }
              ]
            }
          },
        ]
      }
    }
  }

Package versions of a private can be delete by the maintainer:

  • Via the Github API, see the answer of @Akif
  • Via the Github Support
  • Via the Web App Github.com
    • Go to your repositories' packages https://github.com/orgs/YOUR_ACCOUNT/packages?repo_name=YOUR_REPO

    • Select one package https://github.com/YOUR_ACCOUNT/YOUR_REPO/packages/PACKAGE_ID

    • Show all versions of that package https://github.com/cyface-de/backend/packages/81398/versions

    • Use the DELETE button to delete this private package

      enter image description here

Package versions of a public repository cannot be deleted by the maintainer, i.e.:

  • The Github support needs to be contacted to have a package or version removed.

  • Workaround: make your repository temporarily private for the deletion:

    • Attention: This results into loss of stars, etc., see Github Warning!
    • Repository Settings > Danger Zone > Make private
    • To delete the package versions:
      • via API: Follow instructions by @Akif's answer
      • via the Web-App: see above
    • Repository Settings > Danger Zone > Make public