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(""), true

View on GitHub (pinned to 793f7b2e16)

Solutions

  1. Upgrade the Pulumi CLI to the latest version so it recognizes signatures emitted by current plugins.
  2. Downgrade or upgrade the specific provider plugin (pulumi plugin rm; pulumi plugin install <name> <version>) to one compatible with your CLI.
  3. If you authored the plugin, use only signature constants defined in the pulumi/sdk resource package.
  4. 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

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


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