vix unpublish
vix unpublish removes a package from the Vix Registry.
Use it when a package should no longer be available from the registry index.
vix unpublish namespace/nameOverview
vix unpublish removes the package registry entry from the local Vix Registry clone, then creates a registry branch and pushes it for review.
It does not remove a single version.
It removes the package entry file.
For package:
gaspardkirira/stringsVix deletes:
index/gaspardkirira.strings.jsonThe model is:
registry entry file
-> delete package entry
-> create unpublish branch
-> commit deletion
-> push branch
-> create GitHub PR when gh is availableUsage
vix unpublish <namespace/name> [-y|--yes]Basic examples
# Unpublish a package
vix unpublish gaspardkirira/strings
# Skip confirmation
vix unpublish gaspardkirira/strings --yes
# Same as --yes
vix unpublish gaspardkirira/strings -yWhat it does
When you run:
vix unpublish gaspardkirira/stringsVix does this:
- Parses the package id.
- Validates the format
namespace/name. - Locates the local registry clone.
- Checks that the registry entry exists.
- Asks for confirmation unless
-yor--yesis used. - Pulls the local registry clone with
git pull --ff-only. - Creates a new unpublish branch.
- Deletes the package registry entry file.
- Stages the deletion with
git add -A. - Commits the registry update.
- Pushes the branch to origin.
- Tries to create a GitHub PR with
gh.
Package format
The package id must use this format:
namespace/nameValid:
vix unpublish gaspardkirira/strings
vix unpublish gk/json
vix unpublish softadastra/httpInvalid:
vix unpublish strings
vix unpublish gaspardkirira
vix unpublish gaspardkirira/
vix unpublish /strings
vix unpublish gk/json@1.0.0Current vix unpublish expects a package id, not a versioned package spec.
Important behavior
vix unpublish removes the full package entry from the registry.
It does not remove only one version.
This means if the package entry contains:
{
"versions": {
"0.1.0": {
"tag": "v0.1.0"
},
"0.2.0": {
"tag": "v0.2.0"
}
}
}running:
vix unpublish gaspardkirira/stringsremoves the whole registry entry file.
What it does not do
vix unpublish does not remove:
the package GitHub repository
Git tags in the package repository
already installed packages
users' vix.lock files
local project .vix/deps folders
global package cachesIt only removes the package entry from the Vix Registry index through a registry branch and PR.
Registry location
vix unpublish expects the local registry clone at:
~/.vix/registry/indexRegistry entries live under:
~/.vix/registry/index/indexFor package:
gaspardkirira/stringsthe registry entry file is:
~/.vix/registry/index/index/gaspardkirira.strings.jsonThe filename format is:
<namespace>.<name>.jsonRegistry sync requirement
Before unpublishing, the local registry must exist.
Create or refresh it with:
vix registry syncThen run:
vix unpublish gaspardkirira/stringsIf the registry is missing, Vix reports:
registry is not available locally
Run: vix registry syncConfirmation
By default, vix unpublish asks for confirmation.
It prints:
This will remove the package from the Vix registry.
Changes are auto-merged after validation.
Package: gaspardkirira/strings
Type DELETE to confirm:You must type:
DELETEIf you type anything else, Vix cancels:
cancelledSkip confirmation
Use -y or --yes to skip the confirmation prompt.
vix unpublish gaspardkirira/strings --yesor:
vix unpublish gaspardkirira/strings -yUse this only when you are sure the package entry should be removed.
Branch name
vix unpublish creates a branch with this shape:
unpublish-<namespace>-<name>-<timestamp>Example:
unpublish-gaspardkirira-strings-20260528T104512ZThe timestamp is in compact UTC format:
YYYYMMDDTHHMMSSZGit workflow
After confirmation, Vix runs Git commands in the local registry clone.
It first updates the registry clone:
git -C ~/.vix/registry/index pull -q --ff-onlyThen creates the branch:
git -C ~/.vix/registry/index checkout -B <branch> -qThen stages the deletion:
git -C ~/.vix/registry/index add -AThen commits:
git -C ~/.vix/registry/index commit -q -m "registry: unpublish namespace/name"Then pushes:
git -C ~/.vix/registry/index push -u origin <branch>Commit message
The commit message uses this shape:
registry: unpublish namespace/nameExample:
registry: unpublish gaspardkirira/stringsGitHub PR creation
After pushing the branch, Vix tries to create a PR with GitHub CLI.
It checks:
gh --version
gh auth status -h github.comIf gh is installed and authenticated, Vix creates a PR against:
vixcpp/registrywith:
base: main
head: <unpublish branch>
title: registry: unpublish namespace/nameExample title:
registry: unpublish gaspardkirira/stringsPR body
The generated PR body has this shape:
Removes gaspardkirira/strings from the Vix registry.
Deleted file:
- index/gaspardkirira.strings.jsonIf gh is missing
If GitHub CLI is not installed, Vix still pushes the branch.
Then it prints:
gh not found, skipping PR creation
Create PR manually: vixcpp/registry <- <branch>Create the PR manually from the printed branch.
If gh is not authenticated
If GitHub CLI is installed but not authenticated, Vix prints:
gh is installed but not authenticated
Run: gh auth login
Then create PR: vixcpp/registry <- <branch>Authenticate with:
gh auth loginThen create the PR manually if needed.
If PR creation fails
If gh pr create fails, Vix does not undo the pushed branch.
It prints:
gh pr create failed, continuing
Create PR manually: vixcpp/registry <- <branch>The registry branch is still available.
After the PR merges
After the registry PR is merged, users must refresh the local registry index:
vix registry syncThen the unpublished package should no longer be found in the local registry index.
Example:
vix search stringsor:
vix add gaspardkirira/stringsshould no longer find or resolve the package if the registry entry was removed.
Full workflow
# Refresh registry clone
vix registry sync
# Unpublish package
vix unpublish gaspardkirira/strings
# Type DELETE when prompted
# After PR merge
vix registry sync
vix search stringsNon-interactive workflow
vix registry sync
vix unpublish gaspardkirira/strings --yesUse this only when the package removal is intentional.
Safer release workflow
If only one release is broken, publishing a fixed version is usually safer than unpublishing the entire package.
Recommended:
git tag -a v0.2.1 -m "Release v0.2.1"
git push origin v0.2.1
vix publish 0.2.1Use vix unpublish when the whole package entry should be removed from the registry.
Options
| Option | Description |
|---|---|
-y | Skip confirmation prompt. |
--yes | Same as -y. |
-h, --help | Show command help. |
Commands reference
| Command | Description |
|---|---|
vix unpublish namespace/name | Remove a package entry from the registry. |
vix unpublish namespace/name --yes | Remove without confirmation prompt. |
vix unpublish namespace/name -y | Same as --yes. |
vix unpublish --help | Show help. |
Common workflows
Unpublish a package
vix registry sync
vix unpublish gaspardkirira/stringsSkip confirmation
vix registry sync
vix unpublish gaspardkirira/strings --yesCreate PR manually when gh is missing
vix unpublish gaspardkirira/stringsThen use the printed branch:
vixcpp/registry <- unpublish-gaspardkirira-strings-20260528T104512ZVerify after merge
vix registry sync
vix search stringsCommon mistakes
Passing a version
Wrong:
vix unpublish gk/json@0.2.0Correct:
vix unpublish gk/jsonThe current command removes the package entry, not a single version.
Using an invalid package id
Wrong:
vix unpublish jsonCorrect:
vix unpublish gk/jsonForgetting registry sync
Wrong:
vix unpublish gk/jsonwhen the registry clone does not exist locally.
Correct:
vix registry sync
vix unpublish gk/jsonTyping the wrong confirmation text
The confirmation must be exactly:
DELETEAnything else cancels the command.
Expecting unpublish to delete GitHub tags
vix unpublish does not delete package repository tags.
If you need to delete a tag, do it explicitly in the package repository.
Expecting unpublish to remove installed copies
Users who already installed a package may still have it in local caches, project lockfiles, or project dependency folders.
Unpublish only removes the package from the registry index going forward.
Expecting immediate registry removal
The removal becomes visible after:
registry branch pushed
PR created or opened manually
PR merged
users run vix registry syncTroubleshooting
Missing package id
If you run:
vix unpublishVix reports:
unpublish failed: missing package id. Try: vix unpublish namespace/nameUse:
vix unpublish namespace/nameInvalid id format
If Vix reports:
invalid id format, expected namespace/nameuse a valid package id:
vix unpublish gk/jsonRegistry is not available locally
Run:
vix registry syncThen retry:
vix unpublish gk/jsonRegistry entry not found locally
If Vix reports:
registry entry not found locally
Run: vix registry syncrefresh the registry:
vix registry syncIf the error remains, the package is probably not present in the local registry index.
Cancelled
If you did not type DELETE, Vix cancels.
Run again and type:
DELETEor use:
vix unpublish gk/json --yesFailed to update local registry repo
Vix runs:
git pull --ff-onlyinside the registry clone.
If it fails, refresh the registry clone:
vix registry syncThen retry.
Failed to create branch
Check the local registry clone state:
cd ~/.vix/registry/index
git statusThen run:
vix registry syncFailed to delete entry file
Check file permissions in:
~/.vix/registry/index/indexThen retry after syncing the registry.
Failed to commit
Check registry clone state:
cd ~/.vix/registry/index
git statusIf there are no changes, the entry may already be removed.
Failed to push branch
Check Git authentication and repository permissions.
You need permission to push a branch to the registry remote.
gh not found
Install GitHub CLI or create the PR manually.
The branch has already been pushed.
gh is not authenticated
Run:
gh auth loginThen create the PR manually if the command already pushed the branch.
Best practices
Run vix registry sync before unpublishing.
Use vix search <name> before unpublishing to confirm the package exists.
Understand that current vix unpublish removes the package entry, not a single version.
Prefer publishing a fixed version when only one release is broken.
Use --yes only in trusted automation.
Keep the registry PR small and clear.
After merge, run vix registry sync and verify the package is gone.
Do not expect unpublish to remove user caches, tags, or old lockfiles.
Related commands
| Command | Purpose |
|---|---|
vix publish | Publish a tagged package version to the registry. |
vix registry sync | Clone or refresh the local registry index. |
vix search | Search packages in the local registry index. |
vix add | Add a registry package to a project. |
vix install | Install locked project dependencies. |
vix remove | Remove a project dependency from the lockfile. |
vix list | List project dependencies. |
Next step
Manage the local registry index.