Skip to content

You are viewing documentation for Instruqt 2.0 Labs which is in Beta currently. Official release date - 29 September, 2026. For Tracks documentation, please visit docs.instruqt.com.

Publish and manage versions


Branch commits are for authoring. Versions are what labs consume: an immutable, semver-numbered snapshot of a module’s committed content, recorded in the registry.

A module can only be added to a lab once it has at least one published version, so publishing a version is the step that makes a module usable.

  1. Open the module and make sure the branch you want to release from is selected, and that everything you want in the release is committed to it.
  2. Outside edit mode, click Publish version in the editor header.
  3. In Version, enter the version number. The field is prefilled with the next patch of the highest version already published, or 1.0.0 if this is the first. The dialog checks the number as you type and keeps Publish disabled until it is valid.
  4. Click Publish.
RuleDetail
Strict semverExactly MAJOR.MINOR.PATCH, all three parts, all numeric – 1.4.0, not 1.4.
No leading v1.4.0, not v1.4.0.
No prerelease or build suffix1.4.0-rc.1 and 1.4.0+build.7 are refused.
Size limitsAt most 20 characters in total, and each part at most 2147483647.
Must be newA number is spent once at an address, permanently. See Numbers are never reissued.

A version is not a Git tag. Instruqt does not read versions from repository tags and does not create tags when you publish, so however the repository is tagged is entirely independent of this. That is deliberate: a force-pushed tag would otherwise arrive as new content under a number that had already been published, and a pin resolving to the same content forever is what everything else here rests on.

A version is immutable. To change what a version’s content is, publish a new number – there is no way to amend one.

Consuming labs write constraints like ~> 1.4, and a constraint only works if authors number releases honestly. The usual semver rules apply, read from the point of view of a lab that depends on you:

  • Patch (1.4.0 → 1.4.1) – a fix that changes nothing about the module’s interface. No new variables, no removed outputs, no behaviour a lab was relying on.
  • Minor (1.4.1 → 1.5.0) – something added. A new variable with a default, a new output, a new sandbox resource. A lab on ~> 1.4 will pick this up without being touched, so it has to be safe.
  • Major (1.5.0 → 2.0.0) – anything a consumer has to react to. A removed or renamed variable or output, a variable that loses its default, or a change in what a resource does.

Click the tag icon in the module editor header, or View in the Versions section of the module’s Overview.

Every version ever published from the module is listed here, newest first, including revoked and deleted ones. Each row shows:

  • The version number.
  • When it was published.
  • The commit it was cut from, linking into Change history.
  • A Revoked or Deleted badge where one applies. Hover the badge for the date.

The ••• menu on each row offers Revoke, Restore, and Delete.

Revoking withdraws a version from being offered. It stops appearing in listings, and no version constraint will select it. A lab that pins it exactly still resolves it, so nothing that already depends on it stops working.

  1. On the Versions page, click ••• on the version and select Revoke.
  2. Click Revoke version.

This is the ordinary way to stop people picking up a release – a version you would rather nobody new adopted, but that you have no reason to break. It is reversible.

Restoring undoes a revoke. The version reappears in listings and constraints can select it again. Labs pinning it exactly are unaffected, because they never stopped resolving it.

  1. On the Versions page, click ••• on the version and select Restore.
  2. Click Restore version.

Restore undoes revoking and nothing else. A deleted version cannot be restored.

Deleting is permanent, and it breaks labs on purpose. Any lab pinning the version fails to resolve rather than runs – at its next session, in any team, including teams whose usage you cannot see.

  1. On the Versions page, click ••• on the version and select Delete.
  2. Optionally, fill in Reason. It is shown to whoever hits the failed resolution, so they learn why rather than seeing a missing module. Maximum 256 characters.
  3. Type the version number to confirm.
  4. Click Delete version.

Deleting a version is refused while the module is Protected. Clear Protected in Project settings → General first.

StateListedSelectable by a constraintResolves an exact pinReversible
PublishedYesYesYes–
RevokedNoNoYesYes, with Restore
DeletedNoNoNo – resolution failsNo
RestoredYesYesYes–

Revoked and deleted versions stay on the Versions page in both cases. They leave the listings a consumer sees, not your own record of them.

A version number is recorded against the module’s team-slug/module-slug address, not against the module row. Once 1.4.0 has been published at an address it is spent there permanently – including after the module is deleted and a new module is created at the same freed address.

This is what makes a pin trustworthy. acme/postgres at 1.4.0 names one archive forever, so a lab that resolved it once will never silently resolve to different content.