{"record":{"id":"0f7996437112041f","repo":"tailscale/tailscale","slug":"taildrive-not-supported-on-platform","errorCode":null,"errorMessage":"taildrive not supported on platform","messagePattern":"taildrive not supported on platform","errorType":"http","errorClass":null,"httpStatus":404,"severity":"warning","filePath":"ipn/ipnlocal/peerapi_drive.go","lineNumber":59,"sourceCode":"\t\treturn\n\t}\n\n\trawPerms := make([][]byte, 0, len(driveCaps))\n\tfor _, cap := range driveCaps {\n\t\trawPerms = append(rawPerms, []byte(cap))\n\t}\n\n\tp, err := drive.ParsePermissions(rawPerms)\n\tif err != nil {\n\t\th.logf(\"taildrive: error parsing permissions: %v\", err)\n\t\thttp.Error(w, err.Error(), http.StatusInternalServerError)\n\t\treturn\n\t}\n\n\tfs, ok := h.ps.b.sys.DriveForRemote.GetOK()\n\tif !ok {\n\t\th.logf(\"taildrive: not supported on platform\")\n\t\thttp.Error(w, \"taildrive not supported on platform\", http.StatusNotFound)\n\t\treturn\n\t}\n\twr := &httpResponseWrapper{\n\t\tResponseWriter: w,\n\t}\n\tbw := &requestBodyWrapper{\n\t\tReadCloser: r.Body,\n\t}\n\tr.Body = bw\n\n\tdefer func() {\n\t\tswitch wr.statusCode {\n\t\tcase 304:\n\t\t\t// 304s are particularly chatty so skip logging.\n\t\tdefault:\n\t\t\tlog := h.logf\n\t\t\tif r.Method != httpm.PUT && r.Method != httpm.GET {\n\t\t\t\tlog = h.logfv1","sourceCodeStart":41,"sourceCodeEnd":77,"githubUrl":"https://github.com/tailscale/tailscale/blob/6e0912f97994f927632b34ae9e63b53d6516a6ac/ipn/ipnlocal/peerapi_drive.go#L41-L77","documentation":"After the capability checks pass, the drive handler needs the DriveForRemote subsystem from tsd.System. GetOK() returns false when that subsystem was never installed, meaning the platform or build variant does not provide the remote-access drive implementation. The handler replies 404 'taildrive not supported on platform'.","triggerScenarios":"Running a tailscaled build or platform where DriveForRemote is not wired (for example an embedded/tsnet integration or a platform port without drive support); system component initialization left it unset.","commonSituations":"Embedding tailscale via tsnet and exposing peerapi; older versions before drive support landed on that platform; build tags that trim platform subsystems.","solutions":["Check the platform support matrix for Taildrive; use a supported OS.","Upgrade tailscaled to a version that ships DriveForRemote for this platform.","If you build tailscale yourself, make sure the system installs the DriveForRemote component."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"// Feature-detect the same subsystem the handler uses.\nif _, ok := sys.DriveForRemote.GetOK(); !ok {\n    log.Printf(\"drive remote access unavailable on this platform\")\n    return errUnsupportedPlatform\n}","typeGuard":null,"tryCatchPattern":"Treat 404 'taildrive not supported on platform' as permanent for that node: route file sharing to a node on a supported platform rather than retrying.","preventionTips":["Pin node images to platforms with Taildrive support.","Smoke-test drive access when provisioning new node types.","Track release notes for platform support changes."],"tags":["taildrive","tailscale","platform","build","feature-support"],"backgroundTag":"unsupported-platform","analyzedSha":"6e0912f97994f927632b34ae9e63b53d6516a6ac","analyzedAt":"2026-08-18T08:17:25.280Z","contentChangedAt":"2026-08-18T08:17:25.280Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}