A Packager.io repository belongs to one organization and contains packages grouped by channel and target. The usual name matches the GitHub repository that builds the package.
Create a repository
Create a private repository:
packagehall-ctl repo create widget \ --org=acme \ --description="Acme Widget packages"Add --public when package metadata and downloads should work without credentials:
packagehall-ctl repo create widget --org=acme --publicPrivate is the default. The choice does not affect publishing: uploads always require a token with push permission.
List repositories
packagehall-ctl repo list --org=acmeThe table includes visibility, package statistics, and push/pull token counts. For scripts, request JSON:
packagehall-ctl --format=json repo list --org=acmeEdit a repository
Change the description or visibility:
packagehall-ctl repo edit widget \ --org=acme \ --description="Signed release packages" \ --public=trueUse --public=false to make an existing repository private. Existing installer configurations without credentials will stop working after that change.
Create repository tokens
Use separate credentials for each job:
# Publish from GitHub Actionspackagehall-ctl token create github-actions \ --org=acme --repo=widget --permissions=push
# Install from a private repositorypackagehall-ctl token create production-install \ --org=acme --repo=widget --permissions=pullThe full token is returned only when it is created. Store it immediately, and rotate it by creating a replacement before deleting the old token.
Delete a repository
packagehall-ctl repo delete widget --org=acmeThe CLI displays the affected token, package, and channel counts before asking for confirmation. Deletion removes the repository and its associated metadata; use --force only in automation where that scope has already been verified.