Developer platform · 9 / 9

How upgrade, hide, disable and uninstall fit together

Developers can only upload new versions and hide versions; upgrading, disabling and uninstalling are done by the customer’s installation manager. Clear migration notes on every version are what make upgrades safe.

← All tutorials

Who does what, when

ActionByWhenVerify afterwards
Upload a new versionDeveloperCode, content, schema or permissions changeNew version number, new signature, review
Hide a versionDeveloper ownerStop offering that versionExisting installations and support
Upgrade an installationCustomer’s installation managerApply an authorised, compatible versionConfirm new permissions, check configuration and real calls
DisableCustomer’s installation manager (with a reason)Pause what the installation providesPages gone, calls refused, no new events
UninstallCustomer’s installation manager (with a reason)Revoke the installationAuthorisation revoked; callbacks and data handled as agreed

Shipping an upgrade

  1. Bump metadata.version above every reviewed version.
  2. Make sure spec.compatibility.control_api covers the target control planes; ones that do not match cannot install or upgrade to it and keep their last compatible version.
  3. Any permission change sends the version to human review, and customers confirm new permissions when upgrading.
  4. Release notes say what changed, the minimum control plane version, whether permissions were added, how configuration migrates and how to recover from a failure.

A failed upgrade leaves the installation in upgrade_failed_lkg_preserved with the last good version kept. That does not replace your own data migration and rollback; how to roll back depends on the kind and supported versions, so document recovery steps and never ask customers to edit a database.

After disable and uninstall

After disabling or revoking permissions, new events and replays are authorisation-checked too. Your service must recognise the revocation, stop using revoked API keys and installation identities, not retry refused requests forever, and handle data you hold as agreed with the customer.

A complete delivery verifies at least: a first install, an upgrade, use by an ordinary user and by an administrator, a dependency outage, revoked permissions, repeated requests, the last good version after a failed upgrade, and pages, calls and events all stopping after uninstall.

Troubleshooting

SymptomCheck firstNext step
Cannot open “My plugins”Onboarding status, current entity, team roleThe owner checks the application and member roles
Key verification failsExpired challenge, partial copy, wrong keyGet a new challenge and sign again
Namespace conflictClaimed by another publisher, reserved prefixUse your own namespace
Signature or digest mismatchSame pack run? Edited after signing?Pack and sign again from the sources
Tool exits 0 without outputDid it print the check and output lines?Run again from the real path given by pwd -P and check the files
Version already existsVersion list and detailContinue with it if created; bump the version to change files
Approved but customers cannot see itPublished? Channel, compatibility, price planCheck each one; do not keep changing files
Fetched but nothing worksConfirmed, enabled, configured? Current roleVerify with the target role where it mounts
Free plugin cannot be fetchedAn active zero-price plan?The owner adds one under “Pricing”
Calls refusedInstallation state, approved permissions, credential type and scopeFollow the operation’s auth; never switch to a more privileged account

When contacting support give the plugin ID, version, time, request_id, error code and redacted screenshots. Never send passwords, private keys, API or webhook secrets, or raw customer data.