ObjectStackObjectStack

Package Version — Marketplace Protocol

Package Version Protocol — A package version is an immutable release snapshot of a package.

Package Version Protocol

A package version is an immutable release snapshot of a package. Once published (status = 'published'), its manifestJson and checksum fields are frozen — publishing is the act of sealing the snapshot.

Lifecycle: draft → published → deprecated

Installing a package means pointing a sys_package_installation row at a specific sys_package_version UUID. Upgrading swaps that pointer atomically.

See docs/adr/0003-package-as-first-class-citizen.md for the full rationale.

Source: packages/spec/src/marketplace/package-version.zod.ts

TypeScript Usage

import { CreatePackageVersionRequestSchema, PackageDependencySchema, PackageManifestSchema, PackageVersionSchema, PackageVersionStatusSchema, PublishPackageVersionRequestSchema, UpdatePackageVersionRequestSchema } from '@objectstack/spec/marketplace';
import type { CreatePackageVersionRequest, PackageDependency, PackageManifest, PackageVersion, PackageVersionStatus, PublishPackageVersionRequest, UpdatePackageVersionRequest } from '@objectstack/spec/marketplace';

// Validate data
const result = CreatePackageVersionRequestSchema.parse(data);

CreatePackageVersionRequest

Create a new draft package version

Properties

PropertyTypeRequiredDescription
packageIdstring✅Parent package UUID
versionstring✅Semantic version string (SemVer 2.0.0 — e.g. 1.2.3, 2.0.0-beta.1)
manifestJsonstring✅Initial manifest JSON (can be updated while draft)
releaseNotesstringoptional
isPreReleasebooleanoptional
createdBystring✅User ID creating this version

PackageDependency

Package dependency declaration

Properties

PropertyTypeRequiredDescription
packageIdstring✅Manifest ID of the dependency
versionRangestring✅Semver version range (e.g. ^1.0.0)
optionalbooleanoptional (default: false)Whether this dependency is optional

PackageManifest

Package manifest snapshot embedded in a package version

Properties

PropertyTypeRequiredDescription
idstring✅Package manifest ID (reverse-domain)
versionstring✅Version of this release (SemVer 2.0.0 — e.g. 1.2.3, 2.0.0-beta.1)
namestring✅Display name
descriptionstringoptionalShort description
scopeEnum<'platform' | 'environment'>optional (default: "environment")Package scope
minPlatformVersionstringoptionalMinimum required platform version (semver)
dependencies{ packageId: string; versionRange: string; optional?: boolean }[]optional (default: [])Package dependencies
metadataTypesstring[]optional (default: [])Metadata types provided by this package
migrationsstring[]optional (default: [])Migration script identifiers (ordered)
configurationSchemaRecord<string, any>optionalJSON Schema for per-installation configuration properties
metadataRecord<string, any>optionalExtension metadata

Nested Shape: PackageManifest.dependencies[number]

Package dependency declaration

PropertyTypeRequiredDescription
packageIdstring✅Manifest ID of the dependency
versionRangestring✅Semver version range (e.g. ^1.0.0)
optionalbooleanoptional (default: false)Whether this dependency is optional

PackageVersion

Properties

PropertyTypeRequiredDescription
idstring✅UUID of the package version (stable, never reused)
packageIdstring✅UUID of the parent sys_package row
versionstring✅Semantic version string (SemVer 2.0.0 — e.g. 1.2.3, 2.0.0-beta.1)
statusEnum<'draft' | 'published' | 'deprecated'>optional (default: "draft")Package version lifecycle status
manifestJsonstring✅JSON-serialized package manifest (frozen on publish)
checksumstringoptionalSHA-256 hex digest of manifestJson
releaseNotesstringoptionalRelease notes for this version (markdown)
minPlatformVersionstringoptionalMinimum required platform version (denormalized from manifest)
isPreReleasebooleanoptional (default: false)Whether this is a pre-release version
publishedAtstringoptionalPublish timestamp (ISO-8601)
publishedBystringoptionalUser ID who published this version
createdAtstring✅Creation timestamp (ISO-8601)
updatedAtstring✅Last update timestamp (ISO-8601)
createdBystring✅User ID that created this version

PackageVersionStatus

Package version lifecycle status

Allowed Values

  • draft
  • published
  • deprecated

PublishPackageVersionRequest

Publish a draft version — seals manifestJson and checksum

Properties

PropertyTypeRequiredDescription
publishedBystring✅User ID publishing this version

UpdatePackageVersionRequest

Update a draft package version (only while status is draft)

Properties

PropertyTypeRequiredDescription
manifestJsonstringoptionalUpdated manifest JSON
releaseNotesstringoptional
isPreReleasebooleanoptional

On this page