{"record":{"id":"99316db8329eed4f","repo":"ipfs/kubo","slug":"running-libp2p-with-swarm-transports-multiplexers","errorCode":null,"errorMessage":"running libp2p with Swarm.Transports.Multiplexers.Yamux disabled is not supported","messagePattern":"running libp2p with Swarm\\.Transports\\.Multiplexers\\.Yamux disabled is not supported","errorType":"error_code","errorClass":null,"httpStatus":null,"severity":"error","filePath":"core/node/libp2p/smux.go","lineNumber":18,"sourceCode":"package libp2p\n\nimport (\n\t\"errors\"\n\t\"os\"\n\n\t\"github.com/ipfs/kubo/config\"\n\n\t\"github.com/libp2p/go-libp2p\"\n\t\"github.com/libp2p/go-libp2p/p2p/muxer/yamux\"\n)\n\nfunc makeSmuxTransportOption(tptConfig config.Transports) (libp2p.Option, error) {\n\tif prefs := os.Getenv(\"LIBP2P_MUX_PREFS\"); prefs != \"\" {\n\t\treturn nil, errors.New(\"configuring muxers with LIBP2P_MUX_PREFS is no longer supported, use Swarm.Transports.Multiplexers\")\n\t}\n\tif tptConfig.Multiplexers.Yamux < 0 {\n\t\treturn nil, errors.New(\"running libp2p with Swarm.Transports.Multiplexers.Yamux disabled is not supported\")\n\t}\n\n\treturn libp2p.Muxer(yamux.ID, yamux.DefaultTransport), nil\n}\n\nfunc SmuxTransport(tptConfig config.Transports) func() (opts Libp2pOpts, err error) {\n\treturn func() (opts Libp2pOpts, err error) {\n\t\tres, err := makeSmuxTransportOption(tptConfig)\n\t\tif err != nil {\n\t\t\treturn opts, err\n\t\t}\n\t\topts.Opts = append(opts.Opts, res)\n\t\treturn opts, nil\n\t}\n}\n","sourceCodeStart":1,"sourceCodeEnd":34,"githubUrl":"https://github.com/ipfs/kubo/blob/329838acdfafae224582930457efe80aa217afc0/core/node/libp2p/smux.go#L1-L34","documentation":"Yamux is the only stream multiplexer kubo still supports, and it must remain enabled so the node can interoperate with the rest of the IPFS network. Setting Swarm.Transports.Multiplexers.Yamux to a negative (disabled) value in the config makes the node unable to speak any multiplexed stream transport, so makeSmuxTransportOption refuses to start.","triggerScenarios":"Daemon startup when `ipfs config --json Swarm.Transports.Multiplexers.Yamux` is set to a negative number (e.g. -1), i.e. explicitly disabling the yamux muxer.","commonSituations":"Copy-pasted config from outdated documentation or issue threads that suggested disabling yamux when mplex/quic muxers were being phased out; scripts that compute muxer flags arithmetically and produce -1 for 'off'.","solutions":["Re-enable yamux: `ipfs config --json Swarm.Transports.Multiplexers.Yamux 1`","Remove the whole override to restore defaults: `ipfs config --json Swarm.Transports.Multiplexers '{}'`","Restart the daemon"],"exampleFix":"// before\nipfs config --json Swarm.Transports.Multiplexers.Yamux -1\n\n// after\nipfs config --json Swarm.Transports.Multiplexers.Yamux 1","handlingStrategy":"validation","validationCode":"// fail early on an unsupported yamux setting\nval=$(ipfs config --json Swarm.Transports.Multiplexers.Yamux 2>/dev/null || echo 1)\nif [ \"$val\" -lt 0 ]; then\n  echo \"error: Yamux cannot be disabled; set Swarm.Transports.Multiplexers.Yamux >= 0\" >&2\n  exit 1\nfi","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Never set Multiplexers.Yamux below 0; yamux is mandatory","Validate JSON config after scripted edits with `ipfs config --json ...` round-trips","Test node startup in CI after config changes"],"tags":["libp2p","config","yamux","muxer"],"backgroundTag":"unsupported-transport-configuration","analyzedSha":"329838acdfafae224582930457efe80aa217afc0","analyzedAt":"2026-09-03T18:30:52.135Z","contentChangedAt":"2026-09-03T18:30:52.135Z","schemaVersion":2},"datasetVersion":"2026-09-11T00:17:11.886Z"}