{"record":{"id":"9714faffe895be1b","repo":"fatedier/frp","slug":"proxy-type-not-support","errorCode":null,"errorMessage":"proxy type not support","messagePattern":"proxy type not support","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"server/proxy/proxy.go","lineNumber":562,"sourceCode":"\t\trc:             options.ResourceController,\n\t\tlisteners:      make([]net.Listener, 0),\n\t\tpoolCount:      options.PoolCount,\n\t\tgetWorkConnFn:  options.GetWorkConnFn,\n\t\tserverCfg:      options.ServerCfg,\n\t\tencryptionKey:  options.EncryptionKey,\n\t\tlimiter:        limiter,\n\t\txl:             xl,\n\t\tctx:            xlog.NewContext(ctx, xl),\n\t\tuserInfo:       options.UserInfo,\n\t\tloginMsg:       options.LoginMsg,\n\t\tconfigurer:     configurer,\n\t\twireProtocol:   options.WireProtocol,\n\t\tudpPacketCodec: options.UDPPacketCodec,\n\t}\n\n\tfactory := proxyFactoryRegistry[reflect.TypeOf(configurer)]\n\tif factory == nil {\n\t\treturn pxy, fmt.Errorf(\"proxy type not support\")\n\t}\n\tpxy = factory(&basePxy)\n\tif pxy == nil {\n\t\treturn nil, fmt.Errorf(\"proxy not created\")\n\t}\n\treturn pxy, nil\n}\n\ntype Manager struct {\n\t// proxies indexed by proxy name\n\tpxys map[string]Proxy\n\n\tmu sync.RWMutex\n}\n\nfunc NewManager() *Manager {\n\treturn &Manager{\n\t\tpxys: make(map[string]Proxy),","sourceCodeStart":544,"sourceCodeEnd":580,"githubUrl":"https://github.com/fatedier/frp/blob/6c8a8d0a97d03b44e9528d30b30c70cb9d61b405/server/proxy/proxy.go#L544-L580","documentation":"NewProxy looks up a factory by the concrete type of the proxy configurer in proxyFactoryRegistry; when no factory is registered for that reflect.Type it returns \"proxy type not support\". This means the server received a NewProxy request for a proxy kind it cannot instantiate. It usually indicates a client/server capability mismatch rather than a typo in user config (unknown type names are rejected earlier at config validation).","triggerScenarios":"A newer frpc that supports a new proxy type connects to an older frps whose registry lacks that type; a custom fork adds a proxy type on the client but not the server; internal code calls proxy.NewProxy with a configurer whose package type was re-registered or renamed.","commonSituations":"Version skew between frpc and frps after upgrading only one side; custom builds that add proxy types on one component; importing proxy packages in a different order in a fork so init() registration does not happen.","solutions":["Upgrade frps to at least the frpc version so the proxy type registry covers all types the client can send","Downgrade or reconfigure the client to stop using the unsupported proxy type","For custom proxy types, ensure the server-side package is imported so its init() registers the factory"],"exampleFix":"# before (frpc newer than frps)\nfrpc: type = somenewtype   # frps errors: proxy type not support\n\n# after\n# upgrade frps to the same release as frpc, or remove the proxy block","handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"pxy, err := proxy.NewProxy(ctx, options)\nif err != nil {\n    if strings.Contains(err.Error(), \"proxy type not support\") {\n        // capability mismatch: reject config or fall back to a supported type\n        log.Printf(\"proxy type unsupported by this frps; pin client/server versions\")\n    }\n    return err\n}","preventionTips":["Pin frpc and frps to the same release in deployment pipelines","Validate the configured proxy type against a supported list before shipping config","Run a preflight login/proxy handshake in CI against the target frps version"],"tags":["frps","proxy","version-mismatch"],"backgroundTag":null,"analyzedSha":"6c8a8d0a97d03b44e9528d30b30c70cb9d61b405","analyzedAt":"2026-08-15T06:53:27.215Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}