Skip to content

Unlisting a Package

Unlisting hides a package from the club web UI — search results and the browse/listing pages — while leaving every version fully downloadable. It’s the right choice when a package should still resolve for anyone who knows its name (lockfiles, direct dependencies, internal teams) but shouldn’t show up for casual discovery.

When to Unlist

  • Internal-only packages in an otherwise shared registry (e.g. team-specific tooling on a company-wide server).
  • Stale or abandoned packages you want to hide from browse without discontinuing them outright.
  • Forks or experiments that shouldn’t be recommended to new users but still need to resolve for existing consumers.

Unlist is reversible at any time with no side effects — it’s purely a visibility toggle.

How It Differs From Discontinuing and Retracting

OperationScopeDownloadable?Resolvable by version solver?Hidden from browse?Visible banner?
UnlistPackageyesyesyesno
DiscontinuePackageyesyesnoyes
RetractSingle versionyesno (SDK ≥ 2.15)nobadge

The three compose freely — an internal helper package, for instance, is often both unlisted and discontinued.

What Actually Changes

  • The package is excluded from /packages browse listings and search results in the web UI.
  • The search API endpoints skip unlisted packages.
  • The pub API response for /api/packages/<pkg> still returns all versions as normal and sets "isUnlisted": true.
  • dart pub get, dart pub upgrade, and dart pub add <exact_name> all keep working — the version solver treats unlisted packages the same as listed ones.
  • If you access the package page by URL, it still loads. Only discovery is affected.

Who Can Unlist

  • Any named uploader on the package.
  • Any admin of the publisher that owns it.
  • A server admin or owner.

Unlisting a Package

  1. Open the package page.
  2. Switch to the Admin tab.
  3. Toggle Unlisted.
  4. Save.

The package immediately stops appearing in search and browse listings; the direct URL continues to work.

Re-listing

PUT /api/packages/<pkg>/options
{ "isUnlisted": false }

The package becomes discoverable again on the next search / browse refresh.

Audit Log

Unlist and re-list each append an entry to the package activity log:

GET /api/packages/<pkg>/activity-log

Event kind: packageOptionsUpdated (with isUnlisted in the before/after payload).

See Also