Skip to content

Release channels

Status: present state, partial. "Release channels" today is a combination of npm dist-tags, separate registry scopes (hivecast-admin/ versus open-matrix/), and version-specifier conventions. A first-class channel surface in the Matrix CLI is target state.

Present state — three mechanisms in use today

npm dist-tags

The npm protocol supports named pointers (latest, beta, canary) on top of versioned releases. mx publish does not have a --tag flag of its own, but mx publish shells out to npm publish, and you can pre-set the tag on package.json or through env vars before invoking. Tags resolve at install time:

bash
mx install @open-matrix/chat@beta      # resolve through dist-tag
mx install @open-matrix/chat@0.3.0-rc.1  # resolve through explicit version

The local registry surface (packages/mx-cli/src/utils/registry-store.ts) does not track dist-tags; it only stores versions and resolves "latest" as the maximum semver. Dist-tags only work with HTTP npm-compatible registries.

Separate registry scopes

HiveCast splits its public registry into two scopes hosted on the same Gitea instance (registry.hivecast.ai):

Scope URLAudience
https://registry.hivecast.ai/api/packages/open-matrix/npm/Public packages, anyone can install
https://registry.hivecast.ai/api/packages/hivecast-admin/npm/HiveCast platform packages, restricted

The split is a permission boundary, not a release-channel boundary, but in practice the admin scope acts as a "stable platform" channel with stricter publish rules.

Version-specifier conventions

Pre-release versions (0.3.0-rc.1, 1.0.0-beta.4) are an opt-in preview channel. Authors who want a "preview" channel today publish pre-release versions and document them in their package README. The CLI's compareSemver comparator (packages/mx-cli/src/utils/versioning.ts) treats them as approximations; users must pin explicitly to install them.

HiveCast release packaging

hivecast operator publish-hivecast-release (packages/hivecast/scripts/publish-hivecast-release.js, registered at packages/hivecast/bin/hivecast.mjs:53-56) packs and publishes the entire HiveCast distribution under one version. This is a Matrix-specific release process for the hivecast bundle, not a per-package channel.

GoalRecipe
Stable channelPublish semver releases (0.2.9, 0.3.0) without pre-release tags
Beta channelPublish pre-release versions (0.3.0-beta.1) and document in your README
Internal-only channelPublish to a separate registry scope (hivecast-admin/ or your own org scope)
Pin a version per envUse mx install <pkg>@<version> in the install commands per Host

Target state — first-class channels

A future revision could add:

  1. mx publish --channel <name> that maps to a dist-tag on the underlying npm registry and to a separate index in the local registry surface.
  2. mx install <pkg>@channel:<name> as a dist-tag-aware specifier.
  3. Host channel pinning declared in host.json: a Host opts into a channel and hivecast install resolves through that channel for every default runtime.
  4. Channel-aware mx outdated that checks newer versions in the same channel rather than across all versions.

None of this is in code today. Use the dist-tag + scope conventions above.

See also

Source: npm dist-tag handling is delegated to the underlying npm binary in packages/mx-cli/src/utils/npm-registry-client.ts; registry-scope splits are documented in packages/mx-cli/src/utils/config-store.ts:DEFAULT_PACKAGE_REGISTRY.