pulumi/pulumi · error

package name is empty

Error message

package name is empty

What it means

The resource monitor's `RegisterPackage` gRPC handler requires a non-empty package name to construct a `ProviderRequest` for a (possibly parameterized) package. If `req.Name` is empty, it returns `errors.New("package name is empty")`. This indicates a malformed RegisterPackage call from the language host/SDK.

Source

Thrown at pkg/resource/deploy/source_eval.go:783

	parsedVersion, err := semver.Parse(version)
	if err != nil {
		logging.V(5).Infof("parseProviderRequest(%s, %s): semver version string is invalid: %v", pkg, version, err)
		return providers.ProviderRequest{}, err
	}

	url := strings.TrimSuffix(pluginDownloadURL, "/")

	return providers.NewProviderRequest(pkg, &parsedVersion, url, pluginChecksums, parameterization), nil
}

func (rm *resmon) RegisterPackage(ctx context.Context,
	req *pulumirpc.RegisterPackageRequest,
) (*pulumirpc.RegisterPackageResponse, error) {
	logging.V(5).Infof("ResourceMonitor.RegisterPackage(%v)", req)

	name := tokens.Package(req.Name)
	if name == "" {
		return nil, errors.New("package name is empty")
	}

	// First parse the request into a ProviderRequest
	var version *semver.Version
	if req.Version != "" {
		v, err := semver.Parse(req.Version)
		if err != nil {
			return nil, fmt.Errorf("parse package version %s: %w", req.Version, err)
		}
		version = &v
	}
	// Parse the parameterization
	var parameterization *workspace.Parameterization
	if req.Parameterization != nil {
		parameterizationVersion, err := semver.Parse(req.Parameterization.Version)
		if err != nil {
			return nil, fmt.Errorf("parse parameter version %s: %w", req.Parameterization.Version, err)
		}

View on GitHub (pinned to 793f7b2e16)

Solutions

  1. Check that provider/package constructor arguments in program code supply a non-empty package name
  2. Upgrade the language SDK and CLI to matching versions (`pulumi about` to compare)
  3. Re-run with `--logtostderr -v=9` to capture the offending RegisterPackage call and file a bug if the SDK sent an empty name
  4. Simplify/review any dynamic provider or parameterization code in the program

Example fix

// before (TS)
const p = new Provider("", {});
// after
const p = new Provider("myprovider", {});
Defensive patterns

Strategy: validation

Validate before calling

// TS: guard package names passed to provider constructors
function assertNonEmpty(name: string, what: string) {
  if (!name) throw new Error(`${what} name must be non-empty`);
}
assertNonEmpty(pkgName, 'package');

Type guard

function isNonEmptyString(v: unknown): v is string {
  return typeof v === 'string' && v.trim().length > 0;
}

Try / catch

// TS automation API
try {
  await stack.up();
} catch (err) {
  if (String(err).includes("package name is empty")) {
    console.error("A RegisterPackage call carried an empty name; check SDK version and provider construction code");
  }
  throw err;
}

Prevention

When it happens

Trigger: A language SDK sends RegisterPackage with an empty `Name` field — usually an SDK bug or a program constructing a provider/package registration with a blank package (e.g. empty string in provider construction or malformed parameterization).

Common situations: Language SDK/engine version mismatch after upgrade; program code passing an empty package name to a provider constructor helper; SDK serialization bug for parameterized packages.

Related errors


AI-assisted analysis of pulumi/pulumi@793f7b2e16 (2026-08-31). Data as JSON: /api/errors/6f83d5125118a9dc. Report an issue: GitHub.