pulumi/pulumi · error
unrecognized signature '%v' in property map for %q
Error message
unrecognized signature '%v' in property map for %q
What it means
A structpb struct value in an RPC property map carried a 4-char special signature field that the engine does not recognize (not asset, archive, secret, byte string, resource reference, or output value signatures). The engine therefore cannot interpret the value and rejects the property map. This typically indicates protocol/version mismatch or data corruption between plugin and engine.
Source
Thrown at pkg/resource/plugin/rpc.go:635
dependencies = make([]resource.URN, len(dependenciesProp.ArrayValue()))
for i, dep := range dependenciesProp.ArrayValue() {
if !dep.IsString() {
return nil, fmt.Errorf(
"malformed output value for %q: element in dependencies not a string", key)
}
dependencies[i] = resource.URN(dep.StringValue())
}
}
output := resource.NewProperty(resource.Output{
Element: value,
Known: known,
Secret: secret,
Dependencies: dependencies,
})
return &output, nil
default:
return nil, fmt.Errorf("unrecognized signature '%v' in property map for %q", sig, key)
}
default:
contract.Failf("Unrecognized structpb value kind in RPC[%s] for %q: %v", opts.Label, key, reflect.TypeOf(v.Kind))
return nil, nil
}
}
func unmarshalUnknownPropertyValue(s string, opts MarshalOptions) (resource.PropertyValue, bool) {
var elem resource.PropertyValue
var unknown bool
switch s {
case UnknownBoolValue:
elem, unknown = resource.NewProperty(false), true
case UnknownNumberValue:
elem, unknown = resource.NewProperty(0.0), true
case UnknownStringValue:
elem, unknown = resource.NewProperty(""), trueView on GitHub (pinned to 793f7b2e16)
Solutions
- Upgrade the Pulumi CLI to the latest version so it recognizes signatures emitted by current plugins.
- Downgrade or upgrade the specific provider plugin (pulumi plugin rm; pulumi plugin install <name> <version>) to one compatible with your CLI.
- If you authored the plugin, use only signature constants defined in the pulumi/sdk resource package.
- Reproduce with PULUMI_DEBUG_GRPC and log opts.Label plus the sig value to identify the sender.
Example fix
// before (custom plugin) sig := "my01" // after sig := resource.AssetSig // use a signature defined in pulumi/sdk
Defensive patterns
Strategy: try-catch
Validate before calling
// Go, plugin-side: assert only known signature constants are used
known := map[string]bool{
asset.Sig: true, archive.Sig: true, resource.SecretSig: true,
resource.ResourceReferenceSig: true, resource.OutputValueSig: true,
}
if sig, ok := obj["sig"].(string); ok && !known[sig] {
return fmt.Errorf("unsupported signature %q; upgrade the pulumi CLI", sig)
} Type guard
func hasKnownSig(obj map[string]*structpb.Value) bool {
v, ok := obj["4d798a86"]
if !ok {
return true
}
s := v.GetStringValue()
switch s {
case asset.Sig, archive.Sig, resource.SecretSig,
resource.ByteStringSig, resource.ResourceReferenceSig, resource.OutputValueSig:
return true
}
return false
} Try / catch
// Node: surface actionable guidance when the engine rejects a signature
try {
await deploymentResult;
} catch (err) {
if (/unrecognized signature/.test(String(err))) {
console.error("CLI/plugin protocol mismatch: run `pulumi plugin rm --all` then reinstall, and upgrade the pulumi CLI.");
}
throw err;
} Prevention
- Upgrade the pulumi CLI whenever plugins report unrecognized signatures.
- Only use signature constants exported from pulumi/sdk; never invent new ones.
- Pin plugin versions per stack and reinstall after CLI upgrades.
- Enable PULUMI_DEBUG_GRPC when debugging protocol mismatches.
When it happens
Trigger: A plugin sends a value with a signature constant from a newer/older protocol revision than the CLI supports, or a garbled/corrupted sig field, hitting the default case of the signature switch in UnmarshalPropertyValue.
Common situations: Newer provider plugin with an older Pulumi CLI (or vice versa); custom plugins inventing their own signature constants; corrupted checkpoint state files.
Related errors
- malformed resource reference for %q: urn not a string
- malformed resource reference for %q: name not a string
- malformed resource reference for %q: type not a string
- malformed resource reference for %q: id not a string
- malformed resource reference for %q: packageVersion not a st
AI-assisted analysis of pulumi/pulumi@793f7b2e16 (2026-08-31).
Data as JSON: /api/errors/e4cc976224bd23c4.
Report an issue: GitHub.