{"record":{"id":"96865b50b68a2f90","repo":"caddyserver/caddy","slug":"config-for-a-listener-wrapper-did-not-provide-a-va","errorCode":null,"errorMessage":"config for a listener wrapper did not provide a value that implements caddy.ListenerWrapper","messagePattern":"config for a listener wrapper did not provide a value that implements caddy\\.ListenerWrapper","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"caddyconfig/httpcaddyfile/httptype.go","lineNumber":893,"sourceCode":"\n\t\t\t\t// we'll need to remember if the address qualifies for auto-HTTPS, so we\n\t\t\t\t// can add a TLS conn policy if necessary\n\t\t\t\tif addr.Scheme == \"https\" ||\n\t\t\t\t\t(addr.Scheme != \"http\" && addr.Port != httpPort && hasTLSEnabled) {\n\t\t\t\t\taddressQualifiesForTLS = true\n\t\t\t\t}\n\n\t\t\t\t// predict whether auto-HTTPS will add the conn policy for us; if so, we\n\t\t\t\t// may not need to add one for this server\n\t\t\t\tautoHTTPSWillAddConnPolicy = autoHTTPSWillAddConnPolicy &&\n\t\t\t\t\t(addr.Port == httpsPort || (addr.Port != httpPort && addr.Host != \"\"))\n\t\t\t}\n\n\t\t\t// Look for any config values that provide listener wrappers on the server block\n\t\t\tfor _, listenerConfig := range sblock.pile[\"listener_wrapper\"] {\n\t\t\t\tlistenerWrapper, ok := listenerConfig.Value.(caddy.ListenerWrapper)\n\t\t\t\tif !ok {\n\t\t\t\t\treturn nil, fmt.Errorf(\"config for a listener wrapper did not provide a value that implements caddy.ListenerWrapper\")\n\t\t\t\t}\n\t\t\t\tjsonListenerWrapper := caddyconfig.JSONModuleObject(\n\t\t\t\t\tlistenerWrapper,\n\t\t\t\t\t\"wrapper\",\n\t\t\t\t\tlistenerWrapper.(caddy.Module).CaddyModule().ID.Name(),\n\t\t\t\t\twarnings,\n\t\t\t\t)\n\t\t\t\tsrv.ListenerWrappersRaw = append(srv.ListenerWrappersRaw, jsonListenerWrapper)\n\t\t\t}\n\n\t\t\t// Look for any config values that provide packet conn wrappers on the server block\n\t\t\tfor _, listenerConfig := range sblock.pile[\"packet_conn_wrapper\"] {\n\t\t\t\tpacketConnWrapper, ok := listenerConfig.Value.(caddy.PacketConnWrapper)\n\t\t\t\tif !ok {\n\t\t\t\t\treturn nil, fmt.Errorf(\"config for a packet conn wrapper did not provide a value that implements caddy.PacketConnWrapper\")\n\t\t\t\t}\n\t\t\t\tjsonPacketConnWrapper := caddyconfig.JSONModuleObject(\n\t\t\t\t\tpacketConnWrapper,","sourceCodeStart":875,"sourceCodeEnd":911,"githubUrl":"https://github.com/caddyserver/caddy/blob/50e54ee279aa1e504fe218ca49ab6ae16c100410/caddyconfig/httpcaddyfile/httptype.go#L875-L911","documentation":"Error \"config for a listener wrapper did not provide a value that implements caddy.ListenerWrapper\" thrown in caddyserver/caddy.","triggerScenarios":"Thrown at caddyconfig/httpcaddyfile/httptype.go:893 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Ensure the listener wrapper module's configuration unmarshals into a value that implements caddy.ListenerWrapper.","Verify the module name is a registered listener wrapper."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"50e54ee279aa1e504fe218ca49ab6ae16c100410","analyzedAt":"2026-08-15T09:20:21.641Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}