{"record":{"id":"4147177e88ee59bc","repo":"Devolutions/UniGetUI","slug":"the-manager-managerid-does-not-support-install","errorCode":null,"errorMessage":"The manager \"{managerId}\" does not support installer downloads.","messagePattern":"The manager \"(.+?)\" does not support installer downloads\\.","errorType":"exception","errorClass":"InvalidOperationException","httpStatus":400,"severity":"warning","filePath":"src/UniGetUI.Interface.IpcApi/IpcPackageApi.cs","lineNumber":217,"sourceCode":"    }\n\n    public static async Task<IpcPackageOperationResult> DownloadPackageAsync(\n        IpcPackageActionRequest request\n    )\n    {\n        ArgumentNullException.ThrowIfNull(request);\n\n        if (string.IsNullOrWhiteSpace(request.OutputPath))\n        {\n            throw new InvalidOperationException(\n                \"The outputPath parameter is required when downloading a package.\"\n            );\n        }\n\n        var package = FindAnyPackage(request);\n        if (!package.Manager.Capabilities.CanDownloadInstaller)\n        {\n            throw new InvalidOperationException(\n                $\"The manager \\\"{IpcManagerSettingsApi.GetPublicManagerId(package.Manager)}\\\" does not support installer downloads.\"\n            );\n        }\n\n        var operation = new DownloadOperation(package, request.OutputPath);\n        string operationId = IpcOperationApi.Track(operation);\n\n        if (request.WaitForCompletion == false)\n        {\n            _ = Task.Run(() => RunTrackedOperationAsync(operation));\n            return CreateOperationResult(\n                \"download-package\",\n                package,\n                operation,\n                operation.DownloadLocation,\n                completed: false,\n                operationId: operationId\n            );","sourceCodeStart":199,"sourceCodeEnd":235,"githubUrl":"https://github.com/Devolutions/UniGetUI/blob/9b1d7d0eab91620fc15c86b36676532095936ae3/src/UniGetUI.Interface.IpcApi/IpcPackageApi.cs#L199-L235","documentation":"DownloadPackageAsync throws when the resolved package's manager has Capabilities.CanDownloadInstaller == false. Not every package manager can fetch a standalone installer; only those that advertise the capability accept download requests.","triggerScenarios":"Calling download on a package backed by a manager (e.g. npm, pip, .NET tool) that does not implement installer download.","commonSituations":"UI offers a Download button for every manager; client assumes download is universally supported; capability differs per manager implementation.","solutions":["Check package.Manager.Capabilities.CanDownloadInstaller before requesting a download","Filter the offered actions by manager capabilities in the UI","Fall back to an install operation when download is unsupported"],"exampleFix":"// before\nawait IpcPackageApi.DownloadPackageAsync(req);\n// after\nif (!package.Manager.Capabilities.CanDownloadInstaller)\n    return Result.Unsupported(\"download not supported by \" + package.Manager.Name);\nawait IpcPackageApi.DownloadPackageAsync(req);","handlingStrategy":"validation","validationCode":"if (!package.Manager.Capabilities.CanDownloadInstaller)\n    throw new NotSupportedException(\n        $\"{package.Manager.Name} cannot download installers\");","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Surface capabilities per manager in the client UI","Never assume download is universal across managers"],"tags":["ipc","package-download","capability"],"backgroundTag":null,"analyzedSha":"9b1d7d0eab91620fc15c86b36676532095936ae3","analyzedAt":"2026-08-13T12:19:18.278Z","schemaVersion":2},"datasetVersion":"2026-08-13T14:17:21.547Z"}