{"record":{"id":"1ef78be95cec3654","repo":"apple/pkl","slug":"noresourcereaderregistered","errorCode":"noResourceReaderRegistered","errorMessage":"noResourceReaderRegistered","messagePattern":"noResourceReaderRegistered","errorType":"error_code","errorClass":"PklException","httpStatus":null,"severity":"error","filePath":"pkl-core/src/main/java/org/pkl/core/resource/ResourceReaders.java","lineNumber":556,"sourceCode":"\n    @Override\n    public String getUriScheme() {\n      return \"projectpackage\";\n    }\n\n    @Override\n    public Optional<Object> read(URI uri)\n        throws IOException, URISyntaxException, SecurityManagerException {\n      var assetUri = new PackageAssetUri(uri);\n      var dependency = getProjectDepsResolver().getResolvedDependency(assetUri.getPackageUri());\n      var local = getLocalUri(dependency, assetUri);\n      if (local != null) {\n        var resourceManager = VmContext.get(null).getResourceManager();\n        var securityManager = VmContext.get(null).getSecurityManager();\n        securityManager.checkReadResource(local);\n        var reader = resourceManager.getResourceReader(local);\n        if (reader == null) {\n          throw new VmExceptionBuilder()\n              .evalError(\"noResourceReaderRegistered\", uri.getScheme())\n              .build();\n        }\n        return resourceManager.doRead(reader, local, null);\n      }\n      var remoteDep = (Dependency.RemoteDependency) dependency;\n      var bytes = getPackageResolver().getBytes(assetUri, true, remoteDep.getChecksums());\n      return Optional.of(new Resource(uri, bytes));\n    }\n\n    @Override\n    public boolean hasHierarchicalUris() {\n      return true;\n    }\n\n    @Override\n    public boolean isGlobbable() {\n      return true;","sourceCodeStart":538,"sourceCodeEnd":574,"githubUrl":"https://github.com/apple/pkl/blob/f3efcbfc9b60d30053b0536d664948d7aa1b8673/pkl-core/src/main/java/org/pkl/core/resource/ResourceReaders.java#L538-L574","documentation":"This evalError is thrown when Pkl code tries to read a resource from a local (file-backed) project dependency whose URI scheme has no registered ResourceReader in the ResourceManager. ResourceReaders resolves the dependency to a local URI, performs a security check, then asks the resource manager for a reader; a null reader means the scheme is unsupported (e.g. no reader registered for 'file' or a custom scheme). It is a configuration/evaluation-environment problem, not a data problem.","triggerScenarios":"Calling `read(...)` on a resource whose resolved dependency URI has a scheme with no reader registered; occurs in the read path when getResourceReader(local) returns null right after securityManager.checkReadResource(local) succeeds.","commonSituations":"Running Pkl embedded with a custom evaluator that omitted a resource reader (e.g. file or a custom scheme reader); reading package resources under a scheme the host environment does not support; security manager allows the read but no reader plugin is installed.","solutions":["Register a ResourceReader for the missing scheme when building the evaluator (e.g. EvaluatorBuilder.resourceReaders / ResourceManager registration).","Check the URI scheme of the resource being read; if it is a custom scheme, add the matching reader or switch the resource to a supported scheme (e.g. file/https).","If embedding Pkl, verify the same reader set used by the CLI is attached to your EvaluatorBuilder."],"exampleFix":"// before (embedded eval, no readers)\nEvaluatorBuilder.withDefault();\n// after\nEvaluatorBuilder.withDefault()\n    .resourceReaders(new FileResourceReader());","handlingStrategy":"validation","validationCode":"// in host code, before eval\nvar supported = Set.of(\"file\", \"https\", \"env\", \"projectpackage\");\nvar scheme = URI.create(resourceUri).getScheme();\nif (scheme == null || !supported.contains(scheme)) throw new IllegalArgumentException(\"no resource reader for scheme: \" + scheme);","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Register all needed ResourceReaders on the EvaluatorBuilder before evaluation","Mirror the CLI's reader configuration when embedding Pkl","Log the scheme of any URI passed to read() during development"],"tags":["pkl","resources","missing-reader","evaluator-config"],"backgroundTag":"missing-dependency","analyzedSha":"f3efcbfc9b60d30053b0536d664948d7aa1b8673","analyzedAt":"2026-09-08T13:10:45.570Z","contentChangedAt":"2026-09-08T13:10:45.570Z","schemaVersion":2},"datasetVersion":"2026-09-14T11:17:12.474Z"}