ObjectStackObjectStack

Package

Package protocol schemas

Package Identity Protocol

A package (also called a Solution in Power Platform, an Unlocked Package in Salesforce, or an Application in ServiceNow) is the first-class unit of distribution in ObjectStack. It groups related metadata — objects, views, flows, translations, agents — into a named, versioned artifact.

Architecture:

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

Source: packages/spec/src/cloud/package.zod.ts

TypeScript Usage

import { CreatePackageRequestSchema, PackageSchema, PackageCategorySchema, PackageLocaleSchema, PackagePublisherSchema, PackageTranslationSchema, PackageTranslationsSchema, PackageVisibilitySchema, UpdatePackageRequestSchema } from '@objectstack/spec/cloud';
import type { CreatePackageRequest, Package, PackageCategory, PackageLocale, PackagePublisher, PackageTranslation, PackageTranslations, PackageVisibility, UpdatePackageRequest } from '@objectstack/spec/cloud';

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

CreatePackageRequest

Register a new package in the Control Plane

Properties

PropertyTypeRequiredDescription
manifestIdstringGlobally unique reverse-domain package identifier (e.g. com.acme.crm)
namespacestringoptionalMetadata namespace claimed by the package (mirrors manifest.namespace; e.g. "crm" → object names "crm_account")
ownerOrgIdstringOwner organization ID
displayNamestringDisplay name shown in Studio and Marketplace
descriptionstringoptionalShort package description
visibilityEnum<'private' | 'org' | 'marketplace'>optionalPackage visibility: private = owner org only; org = all envs in owner org; marketplace = public registry
categorystringoptionalPackage category for marketplace discovery (e.g. "crm", "hr", "finance", "devtools")
tagsstring[]optional
iconUrlstringoptional
homepageUrlstringoptional
licensestringoptional
publisherEnum<'objectstack' | 'partner' | 'community' | 'private'>optionalPackage publisher provenance tier
isStarterbooleanoptional
translationsRecord<string, { displayName?: string; description?: string; readme?: string; tagline?: string; … }>optionalLocale-keyed overrides; missing keys fall back to base columns
createdBystringUser ID creating the package

Package

Properties

PropertyTypeRequiredDescription
idstringUUID of the package (stable, never reused)
manifestIdstringGlobally unique reverse-domain package identifier (e.g. com.acme.crm)
namespacestringoptionalMetadata namespace claimed by the package (mirrors manifest.namespace; e.g. "crm" → object names "crm_account")
ownerOrgIdstringOrganization ID of the package owner/publisher
displayNamestringDisplay name shown in Studio and Marketplace
descriptionstringoptionalShort package description
readmestringoptionalLong-form package documentation (markdown)
visibilityEnum<'private' | 'org' | 'marketplace'>Package visibility: private = owner org only; org = all envs in owner org; marketplace = public registry
categorystringoptionalPackage category for marketplace discovery (e.g. "crm", "hr", "finance", "devtools")
tagsstring[]optionalSearch and filter tags
iconUrlstringoptionalPackage icon URL
homepageUrlstringoptionalPackage homepage URL
licensestringoptionalSPDX license identifier (e.g. MIT, Apache-2.0)
publisherEnum<'objectstack' | 'partner' | 'community' | 'private'>Package publisher provenance tier
isStarterbooleanIf true, surfaces in the Create Project blueprint picker as a starter template
translationsRecord<string, { displayName?: string; description?: string; readme?: string; tagline?: string; … }>optionalLocale-keyed overrides for display_name / description / readme
createdAtstringCreation timestamp (ISO-8601)
updatedAtstringLast update timestamp (ISO-8601)
createdBystringUser ID that created the package

PackageCategory

Package category for marketplace discovery (e.g. "crm", "hr", "finance", "devtools")

Type: string


PackageLocale

BCP-47 locale tag

Type: string


PackagePublisher

Package publisher provenance tier

Allowed Values

  • objectstack
  • partner
  • community
  • private

PackageTranslation

Per-locale overrides for a package listing

Properties

PropertyTypeRequiredDescription
displayNamestringoptionalLocalized display name
descriptionstringoptionalLocalized short description
readmestringoptionalLocalized long-form readme (markdown)
taglinestringoptionalLocalized short tagline (marketplace listing only)
screenshotCaptionsRecord<string, string>optionalPer-index screenshot caption overrides

PackageTranslations

Locale-keyed overrides; missing keys fall back to base columns

Type: Record<string, { displayName?: string; description?: string; readme?: string; tagline?: string; … }>


PackageVisibility

Package visibility: private = owner org only; org = all envs in owner org; marketplace = public registry

Allowed Values

  • private
  • org
  • marketplace

UpdatePackageRequest

Update mutable package metadata

Properties

PropertyTypeRequiredDescription
displayNamestringoptionalDisplay name shown in Studio and Marketplace
descriptionstringoptionalShort package description
readmestringoptionalLong-form package documentation (markdown)
visibilityEnum<'private' | 'org' | 'marketplace'>optionalPackage visibility: private = owner org only; org = all envs in owner org; marketplace = public registry
categorystringoptionalPackage category for marketplace discovery (e.g. "crm", "hr", "finance", "devtools")
tagsstring[]optional
iconUrlstringoptional
homepageUrlstringoptional
licensestringoptional
publisherEnum<'objectstack' | 'partner' | 'community' | 'private'>optionalPackage publisher provenance tier
isStarterbooleanoptional
translationsRecord<string, { displayName?: string; description?: string; readme?: string; tagline?: string; … }>optionalLocale-keyed overrides; missing keys fall back to base columns

On this page