{"record":{"id":"ab31a9ffa5aad33f","repo":"ipfs/kubo","slug":"support-for-experimental-graphsyncenabled-has-been","errorCode":null,"errorMessage":"Support for Experimental.GraphsyncEnabled has been removed in Kubo 0.25.0, please remove this key. For more details see https://github.com/ipfs/kubo/pull/9747.","messagePattern":"Support for Experimental\\.GraphsyncEnabled has been removed in Kubo 0\\.25\\.0, please remove this key\\. For more details see https://github\\.com/ipfs/kubo/pull/9747\\.","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"config/types.go","lineNumber":585,"sourceCode":"\ntype graphsyncEnabled doNotUse\n\nvar _ json.Unmarshaler = graphsyncEnabled(false)\n\nfunc (graphsyncEnabled) UnmarshalJSON(b []byte) error {\n\td := json.NewDecoder(bytes.NewReader(b))\n\tfor {\n\t\tswitch tok, err := d.Token(); err {\n\t\tcase io.EOF:\n\t\t\treturn nil\n\t\tcase nil:\n\t\t\tswitch tok {\n\t\t\tcase json.Delim('{'), json.Delim('}'), false:\n\t\t\t\t// accept empty objects and false\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\t//nolint\n\t\t\treturn fmt.Errorf(\"Support for Experimental.GraphsyncEnabled has been removed in Kubo 0.25.0, please remove this key. For more details see https://github.com/ipfs/kubo/pull/9747.\")\n\t\tdefault:\n\t\t\treturn err\n\t\t}\n\t}\n}\n","sourceCodeStart":567,"sourceCodeEnd":591,"githubUrl":"https://github.com/ipfs/kubo/blob/329838acdfafae224582930457efe80aa217afc0/config/types.go#L567-L591","documentation":"Experimental.GraphsyncEnabled support was removed in Kubo 0.25.0 (kubo PR #9747). Its UnmarshalJSON accepts an empty object or an explicit false (both treated as 'not set'), but any other value (notably true) is rejected with this error pointing at the removal PR.","triggerScenarios":"Starting a node with config.json containing Experimental.GraphsyncEnabled: true, or any value other than false/empty object, on Kubo >= 0.25.","commonSituations":"Nodes that enabled graphsync for BITSWAP-over-graphsync experiments before 0.25; copied legacy configs; automation that still sets the flag.","solutions":["Remove the key: `ipfs config delete Experimental.GraphsyncEnabled` (or delete it from config.json).","If it must stay for scripted configs, set it to false: {\"Experimental\": {\"GraphsyncEnabled\": false}}.","Review https://github.com/ipfs/kubo/pull/9747 for what changed if you depended on graphswap behavior."],"exampleFix":"// before (config.json)\n{\"Experimental\": {\"GraphsyncEnabled\": true}}\n// after\n{}   // key removed entirely","handlingStrategy":"validation","validationCode":"// detect stale GraphsyncEnabled before daemon start\nfunc hasGraphsyncEnabled(cfg map[string]any) bool {\n    exp, _ := cfg[\"Experimental\"].(map[string]any)\n    v, ok := exp[\"GraphsyncEnabled\"]\n    if !ok { return false }\n    b, isBool := v.(bool)\n    return isBool && b // only true is rejected\n}","typeGuard":"func graphsyncKeySafe(cfg map[string]any) bool {\n    exp, _ := cfg[\"Experimental\"].(map[string]any)\n    v, present := exp[\"GraphsyncEnabled\"]\n    if !present { return true }\n    if b, ok := v.(bool); ok && !b { return true }\n    if m, ok := v.(map[string]any); ok && len(m) == 0 { return true }\n    return false\n}","tryCatchPattern":"if err := node.Start(); err != nil {\n    if strings.Contains(err.Error(), \"Experimental.GraphsyncEnabled\") {\n        // delete the key (or set false) and restart\n    }\n}","preventionTips":["Remove Experimental.GraphsyncEnabled from configs and automation when upgrading to >=0.25","Set the key to false only if legacy scripts require its presence","Review kubo changelog/PR 9747 for removal context"],"tags":["config","migration","graphsync"],"backgroundTag":"removed-config-key","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"}