{"record":{"id":"8872d8763da5263e","repo":"hyperledger/fabric","slug":"s-capability-s-is-required-but-not-supported","errorCode":null,"errorMessage":"%s capability %s is required but not supported","messagePattern":"(.+?) capability (.+?) is required but not supported","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"critical","filePath":"common/capabilities/capabilities.go","lineNumber":48,"sourceCode":"\tcapabilities map[string]*cb.Capability\n}\n\nfunc newRegistry(p provider, capabilities map[string]*cb.Capability) *registry {\n\treturn &registry{\n\t\tprovider:     p,\n\t\tcapabilities: capabilities,\n\t}\n}\n\n// Supported checks that all of the required capabilities are supported by this binary.\nfunc (r *registry) Supported() error {\n\tfor capabilityName := range r.capabilities {\n\t\tif r.provider.HasCapability(capabilityName) {\n\t\t\tlogger.Debugf(\"%s capability %s is supported and is enabled\", r.provider.Type(), capabilityName)\n\t\t\tcontinue\n\t\t}\n\n\t\treturn errors.Errorf(\"%s capability %s is required but not supported\", r.provider.Type(), capabilityName)\n\t}\n\treturn nil\n}\n","sourceCodeStart":30,"sourceCodeEnd":52,"githubUrl":"https://github.com/hyperledger/fabric/blob/2736b63f8fd5932511d56fe68b7039d15977f7f6/common/capabilities/capabilities.go#L30-L52","documentation":"capabilities.Supported iterates required capabilities in a channel config and returns this error when the runtime's capability provider does not implement any one of them. It blocks channel/chaincode operation because the binary cannot safely process a channel requiring features it doesn't understand.","triggerScenarios":"A channel's config (e.g. Application group) enables capability V2_0+ while the running fabric peer/orderer binary was built for an older release that only supports V1_x.","commonSituations":"Upgraded channel config to V2_0 capabilities but peers still on v1.4; mixed-version network where some orderers lack the capability; orderers joining a channel created by newer configtxgen.","solutions":["Upgrade the fabric peer/orderer binaries to a release supporting the required capability.","Lower the channel capability to a level all binaries support (via a channel config update) if downgrade is intended.","Align all network nodes to the same fabric version.","Verify the channel's capabilities in its config before rolling out."],"exampleFix":"// before\n# channel config requires V2_0 capability, binary is fabric 1.4 -> error\n// after\n# upgrade peers/orderers to fabric 2.x binary, or set Application.Capabilities to V1_4_2","handlingStrategy":"validation","validationCode":"// compare required channel capabilities against binary support before joining/updating\nfor _, cap := range requiredCapabilities {\n    if !provider.HasCapability(cap) {\n        return fmt.Errorf(\"precheck: capability %s unsupported by this binary\", cap)\n    }\n}","typeGuard":null,"tryCatchPattern":"if err := capabilities.Supported(); err != nil {\n    var reqErr *errors.Error\n    if strings.Contains(err.Error(), \"required but not supported\") {\n        log.Fatalf(\"upgrade binaries or lower channel capability: %v\", err)\n    }\n}","preventionTips":["Keep all peers/orderers on the same fabric release.","Review the capability roadmap before enabling V2_x capabilities.","Test capability changes on a staging channel first.","Pin fabric images via versioned tags, not :latest."],"tags":["capabilities","version-compatibility","hyperledger-fabric"],"backgroundTag":"capability-not-supported","analyzedSha":"2736b63f8fd5932511d56fe68b7039d15977f7f6","analyzedAt":"2026-09-04T08:52:36.465Z","contentChangedAt":"2026-09-04T08:52:36.465Z","schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}