Shipping a Release
Ship a new version of a published product: what it carries, how it is reviewed, and how buyers hear about it.
Overview
A listing is reviewed once. A product keeps changing. Every version after the first travels as a release: a number, a changelog and the whole package. Each one is handed to the moderators and approved on its own.
Approval is what publishes. Until a moderator says yes, nothing about the live listing moves and no installation is told anything. After it, the listing states the new version and the catalogue hands out the new package.
Prerequisites
Structure
The release editor has the same shape as the product editor. Sections with a readiness meter, and a submit action that counts them again on the server.
| Section | What completes it |
|---|---|
| Details | The product, the version, and at least one changelog line |
| Package | The full build for that version |
| Licensing | Inherited from the listing, so it is already complete unless you change it. Asked whatever the product costs |
| Review | The confirmations, as on a listing |
Changelog lines carry a kind, and every surface that shows a changelog groups them by it: features, improvements, security, fixes, changed. One free paragraph reads as prose nobody scans; a typed list says at a glance whether a version carries a security fix.
Walkthrough
Prepare the version
- Open Releases in the developer portal and start a new one. Pick the product; the picker offers published listings only.
- Enter the version number. The live one is shown next to the field, so "must be higher" is a fact on the page.
- Write the changelog line by line and give each line its kind.
- Upload the package for that version, and update the compatibility range if this build changed it.
Check the licence declaration
- The version carries the declaration of its listing, free or paid. Leave it alone and the section is already done.
- Change it when the address or the credentials moved, then test it here. Wiring and fields: Licensing a Marketplace Product.
- What you change is parked on this version. It reaches the listing only when a moderator approves, so the key and the build that carries it travel together.
Submit and wait
- Submit the release. It moves to Submitted, the package freezes and the editor becomes read only.
- Withdraw is open while it is only submitted. Once a moderator picks it up the state becomes In review and it closes.
- A refusal carries a reason and reaches your account as a notice. Fix it and submit again.
After approval
- The listing starts stating this version, and hands out the compiled package built from yours.
- Installations that hold the product ask once a day and are offered the update.
- Nothing installs itself. The operator reads the changelog and decides.
Reference
What approval moves from the release onto the listing, at the same instant.
An update is offered only when three things hold at once. Any one failing answers "nothing published" rather than an error, because the buyer did nothing wrong.
| Gate | Why |
|---|---|
| The listing is live | A retired or refused product has nothing to push to anyone. |
| The developer account is active | A studio switched off here does not ship code into customer panels. |
| The customer account behind it is active | You are a customer here too, and a closed account no longer delivers files. |
Example
An installed marketplace product carries a manifest naming the listing it came from. A directory name is your own choice and two studios may pick the same one, so identity travels as the listing id.
{"type": "marketplace", "id": 42, "version": "1.2.0", "last_updated": "2026-08-06"}
The installation asks about that id and reads back what is published for it.
GET /api/v1/marketplace/releases/42?version=1.2.0&lang=en
Pitfalls
The package replaces the product directory. Ship only the changed files and everything you left out disappears from the customer's copy.
The package cannot be replaced while a decision is pending. Withdraw it while it is still only submitted, or wait for the answer.
Nothing in the update path runs a script of yours. Migrations run from a normal code path, safely, on every request.
Related Articles
Thanks for your feedback!
Our support team is here around the clock for anything you can't find above.