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
- Check that provider/package constructor arguments in program code supply a non-empty package name
- Upgrade the language SDK and CLI to matching versions (`pulumi about` to compare)
- Re-run with `--logtostderr -v=9` to capture the offending RegisterPackage call and file a bug if the SDK sent an empty name
- 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
- Keep language SDK versions aligned with the CLI (`pulumi about`)
- Never pass empty strings as package names in dynamic provider code
- Report persistent occurrences with verbose logs; usually an SDK/engine bug
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.