{"record":{"id":"c2d178cdb0e424e1","repo":"halo-dev/halo","slug":"provider-manifest-must-contain-format-entry-and","errorCode":null,"errorMessage":"Provider manifest must contain format, entry, and optional style only","messagePattern":"Provider manifest must contain format, entry, and optional style only","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"application/src/main/java/run/halo/app/plugin/UiPluginBundleServiceImpl.java","lineNumber":223,"sourceCode":"        } catch (Exception e) {\n            return ClassifiedProvider.invalid(\n                    candidate, Objects.toString(e.getMessage(), e.getClass().getSimpleName()));\n        }\n    }\n\n    private ProviderManifest readManifest(ProviderCandidate candidate, Resource resource) throws IOException {\n        JsonNode manifest;\n        try (var inputStream = resource.getInputStream()) {\n            manifest = JSON_MAPPER.readTree(inputStream);\n        }\n        if (!manifest.isObject()) {\n            throw new IllegalArgumentException(\"Provider manifest must be an object\");\n        }\n        var fields = new HashSet<String>();\n        fields.addAll(manifest.propertyNames());\n        if (!fields.containsAll(Set.of(\"format\", \"entry\"))\n                || !Set.of(\"format\", \"entry\", \"style\").containsAll(fields)) {\n            throw new IllegalArgumentException(\"Provider manifest must contain format, entry, and optional style only\");\n        }\n        if (!\"esm\".equals(manifest.path(\"format\").textValue())) {\n            throw new IllegalArgumentException(\"Provider manifest format must be esm\");\n        }\n        var entry = validateManifestResource(candidate, manifest.path(\"entry\"));\n        var style = manifest.has(\"style\") ? validateManifestResource(candidate, manifest.path(\"style\")) : null;\n        return new ProviderManifest(entry, style);\n    }\n\n    private String validateManifestResource(ProviderCandidate candidate, JsonNode value) {\n        if (!value.isTextual()) {\n            throw new IllegalArgumentException(\"Provider resource path must be a string\");\n        }\n        var resourcePath = normalizeResourcePath(value.textValue());\n        var resource = providerResource(candidate, resourcePath);\n        if (resource == null || !resource.isReadable()) {\n            throw new IllegalArgumentException(\n                    \"Provider resource does not exist inside its root: \" + value.textValue());","sourceCodeStart":205,"sourceCodeEnd":241,"githubUrl":"https://github.com/halo-dev/halo/blob/d2f5165f9c8f055ffcb3fa9c3f4032821a7b68c8/application/src/main/java/run/halo/app/plugin/UiPluginBundleServiceImpl.java#L205-L241","documentation":"Error \"Provider manifest must contain format, entry, and optional style only\" thrown in halo-dev/halo.","triggerScenarios":"Thrown at application/src/main/java/run/halo/app/plugin/UiPluginBundleServiceImpl.java:223 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Remove any extra keys from the provider manifest; only 'format', 'entry', and optionally 'style' are allowed.","Regenerate the bundle with the official bundler kit instead of hand-editing the manifest.","Verify the manifest was not corrupted or merged with other configuration during the build."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"d2f5165f9c8f055ffcb3fa9c3f4032821a7b68c8","analyzedAt":"2026-08-14T00:18:38.915Z","schemaVersion":2},"datasetVersion":"2026-08-14T05:17:29.042Z"}