fatedier/frp · error
unknown multiplexer [%s]
Error message
unknown multiplexer [%s]
What it means
TCPMuxProxy.Run dispatches on cfg.Multiplexer and currently only implements the httpconnect multiplexer; any other value falls through to "unknown multiplexer [%s]". The proxy is then closed, so the tcpmux proxy never becomes reachable.
Source
Thrown at server/proxy/tcpmux.go:95
addrs := make([]string, 0)
for _, domain := range domains {
addrs, err = pxy.httpConnectListen(domain, pxy.cfg.RouteByHTTPUser, pxy.cfg.HTTPUser, pxy.cfg.HTTPPassword, addrs)
if err != nil {
return "", err
}
}
pxy.startCommonTCPListenersHandler()
remoteAddr = strings.Join(addrs, ",")
return remoteAddr, err
}
func (pxy *TCPMuxProxy) Run() (remoteAddr string, err error) {
switch v1.TCPMultiplexerType(pxy.cfg.Multiplexer) {
case v1.TCPMultiplexerHTTPConnect:
remoteAddr, err = pxy.httpConnectRun()
default:
err = fmt.Errorf("unknown multiplexer [%s]", pxy.cfg.Multiplexer)
}
if err != nil {
pxy.Close()
}
return remoteAddr, err
}
func (pxy *TCPMuxProxy) Close() {
pxy.BaseProxy.Close()
}
View on GitHub (pinned to 6c8a8d0a97)
Solutions
- Set multiplexer = "httpconnect" on the tcpmux proxy
- Check for stray whitespace or wrong case in the value
- Remove the field if your frp version defaults it correctly, but the literal "httpconnect" is the safe form
Example fix
# before [[proxies]] type = "tcpmux" multiplexer = "httpsconnect" # after [[proxies]] type = "tcpmux" multiplexer = "httpconnect"
Defensive patterns
Strategy: validation
Validate before calling
// Validate tcpmux config before submitting it.
if p.Type == "tcpmux" && p.Multiplexer != "httpconnect" {
return fmt.Errorf("tcpmux multiplexer must be 'httpconnect', got %q", p.Multiplexer)
} Prevention
- Schema-validate generated frpc config against the documented enum for multiplexer
- Copy working tcpmux examples verbatim instead of hand-typing the value
When it happens
Trigger: Declaring a tcpmux proxy with multiplexer set to something other than "httpconnect" (typos like "http-connect", "HTTPSConnect", or empty/other values that escaped earlier validation).
Common situations: Hand-written ini/toml with a case or spelling mistake; configs ported from other tools expecting "httpsconnect"; omitting the multiplexer field where it is required.
Related errors
- subdomain is not supported because this feature is not enabl
- '.' and '*' are not supported in subdomain
- connections to tcp vhost must be of method CONNECT
- create vhost tcpMuxer error, %v
- HTTP ${response.status}
AI-assisted analysis of fatedier/frp@6c8a8d0a97 (2026-08-15).
Data as JSON: /api/errors/07d94e96c4558419.
Report an issue: GitHub.