Versioning & Updates
How semantic versioning works on Kyper and what happens when you ship updates.
Semantic versioning
Kyper requires all versions to follow semantic versioning: MAJOR.MINOR.PATCH. Each push must be higher than the current published version — Kyper rejects versions equal to or less than what's already live in the marketplace.
You can freely re-push the same version number while it's still pending, building, failed, or in review. Kyper automatically replaces the previous submission with your new build. Once a version is published, the version number is locked — bump to move forward.
Use the kyper tag command to bump versions in your kyper.yml:
kyper tag --bump patch # 1.0.0 → 1.0.1 kyper tag --bump minor # 1.0.0 → 1.1.0 kyper tag --bump major # 1.0.0 → 2.0.0
Update policy
How your version bump affects consumers with active hosted deployments:
Auto-deployed
Patch and minor updates are automatically deployed to all running consumer instances. The new image is pulled, containers are restarted, and the on_update hook runs.
Consumer opt-in
Major updates require consumer opt-in. Consumers see an upgrade banner on their deployment page and must explicitly choose to upgrade. This protects them from breaking changes.
Lifecycle hooks
Hooks run inside your web container after the containers start or restart. Common use: database migrations.
| Hook | Runs when | On failure |
|---|---|---|
| on_deploy | New deployment is first provisioned | Deployment marked as failed, consumer + admin notified |
| on_update | Existing deployment is updated to a new version | Automatic rollback to the previous version |
Rollback behavior: If an on_update hook fails (non-zero exit), Kyper automatically re-deploys the previous version's image, restarts containers, and emails both you and the consumer. The failed version stays in your portal for debugging.
Best practices
-
✓
Bump patch for bug fixes, security patches, and dependency updates
-
✓
Bump minor for new features that are backward-compatible
-
✓
Bump major for breaking changes (new required env vars, schema changes that need manual intervention, removed features)
-
✓
Always set
on_updateif your app has a database — this ensures migrations run on every update -
✓
Test locally before pushing — run
kyper checkand test your Docker build locally before pushing to Kyper