Portal Community

Two Types of Dependencies

The manifest contains two distinct dependency concepts:

  1. Artifact dependencies (dependencies[]) — the artifacts included within this bundle, their versions and hashes. These are auto-populated by the exporter from the dependency graph.
  2. Package dependencies (packageDependencies[]) — other InstallHub packages that must already be installed in the target tenant before this package can be installed. These are declared by the package author.

Package Dependencies — When to Use Them

Use packageDependencies when your package builds on top of another package:

Package Dependency Schema

{
  "packageDependencies": [
    {
      "packageName": "BizFirstGO.HRBase",
      "minVersion":  "1.0.0",
      "maxVersion":  "2.0.0"
    },
    {
      "packageName": "BizFirstGO.NotificationTemplates",
      "minVersion":  "3.0.0"
      // maxVersion omitted = no upper bound
    }
  ]
}

Version Range Rules

DeclarationSatisfied ByExample
minVersion: "1.0.0" only1.0.0 or higherHRBase ≥ 1.0.0
minVersion: "1.0.0", maxVersion: "2.0.0"1.0.0 up to but not including 2.0.0HRBase ≥ 1.0.0 < 2.0.0
minVersion: "2.1.0", maxVersion: "2.2.0"Exactly 2.1.xHRBase ≥ 2.1.0 < 2.2.0
minVersion: "3.0.0", maxVersion: "3.0.1"Exactly 3.0.0Pinned to a specific patch version
maxVersion is Exclusive maxVersion: "2.0.0" means "less than 2.0.0" — it does not include 2.0.0 itself. This follows npm/NuGet convention where major bumps break compatibility.

Dependency Validation on Import

When the import engine processes a package, it checks all packageDependencies against the packages currently installed in the target tenant:

// Import blocked — missing dependency:
{
  "error": "MissingPackageDependency",
  "message": "Package 'EmployeeOnboarding-Extension' requires 'BizFirstGO.HRBase' >= 1.0.0, but it is not installed in this tenant.",
  "missingDependencies": [
    {
      "packageName": "BizFirstGO.HRBase",
      "requiredMinVersion": "1.0.0",
      "installedVersion":   null
    }
  ]
}

// Import blocked — version mismatch:
{
  "error": "IncompatiblePackageDependency",
  "message": "Package 'EmployeeOnboarding-Extension' requires 'BizFirstGO.HRBase' >= 1.0.0 < 2.0.0, but the installed version is 2.1.0.",
  "incompatibleDependencies": [
    {
      "packageName":        "BizFirstGO.HRBase",
      "requiredRange":      ">= 1.0.0 < 2.0.0",
      "installedVersion":   "2.1.0"
    }
  ]
}

Artifact Dependencies vs. Package Dependencies

Understanding the difference is important:

TypePurposeAuto or ManualMust Be Pre-installed?
Artifact dependencies (dependencies[]) Lists what is inside this bundle Auto-generated by exporter No — they are installed by this package
Package dependencies (packageDependencies[]) External packages required Manually declared by author Yes — must be installed before this package

Transitive Package Dependencies

Package dependencies are not automatically transitive. If Package A depends on Package B, and Package B depends on Package C, the import engine requires both B and C to be installed before A — but it is the author's responsibility to declare B in Package A's packageDependencies. The engine does not automatically follow the dependency chain.

Platform Version Dependency

In addition to package dependencies, the manifest's platformVersion field acts as an implicit dependency on the BizFirstGO platform version. The import engine warns if the target platform is older than the source platform version.