halo-dev/halo · error · IllegalArgumentException
Provider resource does not exist inside its root: {value}
Error message
Provider resource does not exist inside its root: {value} What it means
Error "Provider resource does not exist inside its root: {value}" thrown in halo-dev/halo.
Source
Thrown at application/src/main/java/run/halo/app/plugin/UiPluginBundleServiceImpl.java:240
|| !Set.of("format", "entry", "style").containsAll(fields)) {
throw new IllegalArgumentException("Provider manifest must contain format, entry, and optional style only");
}
if (!"esm".equals(manifest.path("format").textValue())) {
throw new IllegalArgumentException("Provider manifest format must be esm");
}
var entry = validateManifestResource(candidate, manifest.path("entry"));
var style = manifest.has("style") ? validateManifestResource(candidate, manifest.path("style")) : null;
return new ProviderManifest(entry, style);
}
private String validateManifestResource(ProviderCandidate candidate, JsonNode value) {
if (!value.isTextual()) {
throw new IllegalArgumentException("Provider resource path must be a string");
}
var resourcePath = normalizeResourcePath(value.textValue());
var resource = providerResource(candidate, resourcePath);
if (resource == null || !resource.isReadable()) {
throw new IllegalArgumentException(
"Provider resource does not exist inside its root: " + value.textValue());
}
return resourcePath;
}
private static String normalizeResourcePath(String resourcePath) {
if (!StringUtils.hasText(resourcePath)) {
throw new IllegalArgumentException("Provider resource path must not be blank");
}
var normalizedSlashes = resourcePath.replace('\\', '/');
if (normalizedSlashes.startsWith("/")
|| normalizedSlashes.startsWith("//")
|| normalizedSlashes.contains("?")
|| normalizedSlashes.contains("#")
|| normalizedSlashes.matches("^[a-zA-Z][a-zA-Z0-9+.-]*:.*")) {
throw new IllegalArgumentException(
"Provider resource path must be provider-root-relative: " + resourcePath);
}View on GitHub (pinned to d2f5165f9c)
Solutions
- Verify the entry/style path declared in the provider manifest actually exists inside the plugin bundle's static resources.
- Rebuild the plugin so the bundler emits the entry file at the path recorded in the manifest.
- Check for case-sensitivity mismatches between the manifest path and the packaged file name.
When it happens
Trigger: Thrown at application/src/main/java/run/halo/app/plugin/UiPluginBundleServiceImpl.java:240 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of halo-dev/halo@d2f5165f9c (2026-08-14).
Data as JSON: /api/errors/7c574a833cf9fa5a.
Report an issue: GitHub.