ObjectStackObjectStack

Package Registry

Package Registry protocol schemas

Package Registry Protocol

Defines the runtime state and lifecycle operations for installed packages.

Key Distinction: App vs Package (ADR-0019)

  • App (AppSchema): the one consumer-facing unit — what a tenant downloads,

opens, and uninstalls. Only type: app packages are consumer-installable

(see isConsumerInstallable), and a consumer package defines **at most one

app** — there is no "suite contains apps" aggregator.

  • Package (Manifest): the internal / control-plane artifact term (the

"row" in the installed-packages table). Never surfaced to consumers as a

separate noun.

  • Internal contributions (plugin/driver/server/…): the "frameworks inside

the .app bundle" — bundled within an App or operator-provisioned; a consumer

never installs them directly.

Architecture Alignment

  • Salesforce: Managed Packages with install/uninstall lifecycle

  • VS Code: Extension marketplace with enable/disable per-workspace

  • Kubernetes: Helm charts with release state tracking

  • npm: Package registry with install/uninstall/version management

Source: packages/spec/src/kernel/package-registry.zod.ts

TypeScript Usage

import { DisablePackageRequest, EnablePackageRequest, GetPackageRequest, ListPackagesRequest, NamespaceConflictError, NamespaceRegistryEntry, PackageStatusEnum, UninstallPackageRequest, UninstallPackageResponse } from '@objectstack/spec/kernel';
import type { DisablePackageRequest, EnablePackageRequest, GetPackageRequest, ListPackagesRequest, NamespaceConflictError, NamespaceRegistryEntry, PackageStatusEnum, UninstallPackageRequest, UninstallPackageResponse } from '@objectstack/spec/kernel';

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

DisablePackageRequest

Disable package request

Properties

PropertyTypeRequiredDescription
idstringPackage ID to disable

EnablePackageRequest

Enable package request

Properties

PropertyTypeRequiredDescription
idstringPackage ID to enable

GetPackageRequest

Get package request

Properties

PropertyTypeRequiredDescription
idstringPackage identifier

ListPackagesRequest

List packages request

Properties

PropertyTypeRequiredDescription
statusEnum<'installed' | 'disabled' | 'installing' | 'upgrading' | 'uninstalling' | 'error'>optionalFilter by package status
typeEnum<'plugin' | 'ui' | 'driver' | 'server' | 'app' | 'theme' | 'agent' | 'objectql' | 'module' | 'gateway' | 'adapter'>optionalFilter by package type
enabledbooleanoptionalFilter by enabled state

NamespaceConflictError

Namespace collision error during installation

Properties

PropertyTypeRequiredDescription
typestringError type
requestedNamespacestringRequested namespace
conflictingPackageIdstringConflicting package ID
conflictingPackageNamestringConflicting package display name
suggestionstringoptionalSuggested alternative namespace

NamespaceRegistryEntry

Namespace ownership entry in the registry

Properties

PropertyTypeRequiredDescription
namespacestringNamespace prefix
packageIdstringOwning package ID
registeredAtstringRegistration timestamp
statusEnum<'active' | 'disabled' | 'reserved'>Namespace status

PackageStatusEnum

Package installation status

Allowed Values

  • installed
  • disabled
  • installing
  • upgrading
  • uninstalling
  • error

UninstallPackageRequest

Uninstall package request

Properties

PropertyTypeRequiredDescription
idstringPackage ID to uninstall

UninstallPackageResponse

Uninstall package response

Properties

PropertyTypeRequiredDescription
idstringUninstalled package ID
successbooleanWhether uninstall succeeded
messagestringoptionalUninstall status message

On this page