Appearance
Release channels
Status: present state, partial. "Release channels" today is a combination of npm dist-tags, separate registry scopes (
hivecast-admin/versusopen-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 versionThe 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 URL | Audience |
|---|---|
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.
Recommended discipline today
| Goal | Recipe |
|---|---|
| Stable channel | Publish semver releases (0.2.9, 0.3.0) without pre-release tags |
| Beta channel | Publish pre-release versions (0.3.0-beta.1) and document in your README |
| Internal-only channel | Publish to a separate registry scope (hivecast-admin/ or your own org scope) |
| Pin a version per env | Use mx install <pkg>@<version> in the install commands per Host |
Target state — first-class channels
A future revision could add:
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.mx install <pkg>@channel:<name>as a dist-tag-aware specifier.- Host channel pinning declared in
host.json: a Host opts into a channel andhivecast installresolves through that channel for every default runtime. - Channel-aware
mx outdatedthat 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
- Publishing → Versioning
- Publishing → Gitea-backed publication
- Publishing → npm-compatible publication
- Installing → Install from registry
- Running → Update
Source: npm dist-tag handling is delegated to the underlying
npmbinary inpackages/mx-cli/src/utils/npm-registry-client.ts; registry-scope splits are documented inpackages/mx-cli/src/utils/config-store.ts:DEFAULT_PACKAGE_REGISTRY.