quarkusio/quarkus · error · RuntimeException
Not enough information to build the page. Set at least one o
Error message
Not enough information to build the page. Set at least one of componentLink and/or componentName and/or title
What it means
PageBuilder.build() requires identifying information for the page: at least one of componentName, componentLink, or title. The builder derives a component link from the component name or title when componentLink is absent, but with none of the three set there is nothing to render, so it fails fast.
Source
Thrown at extensions/devui/deployment-spi/src/main/java/io/quarkus/devui/spi/page/PageBuilder.java:147
return (T) this;
}
public T excludeFromMenu() {
this.includeInMenu = false;
return (T) this;
}
@SuppressWarnings("unchecked")
public T extension(String extension) {
this.extensionId = extension.toLowerCase().replaceAll(SPACE, DASH);
this.metadata.put("extensionName", extension);
this.metadata.put("extensionId", extensionId); // TODO: Remove ?
return (T) this;
}
public Page build() {
if (this.componentName == null && this.componentLink == null && this.title == null) {
throw new RuntimeException(
"Not enough information to build the page. Set at least one of componentLink and/or componentName and/or title");
}
// Guess the component link from the component name or title
if (this.componentLink == null) {
if (this.componentName != null) {
this.componentLink = this.componentName + DOT_JS;
} else if (this.title != null) {
this.componentLink = QWC_DASH + this.title.toLowerCase().replaceAll(SPACE, DASH) + DOT_JS;
}
}
// Guess the component name from the componentlink or title
if (this.componentName == null) {
this.componentName = this.componentLink.substring(0, this.componentLink.lastIndexOf(DOT)); // Remove the file extension (.js)
}
// Guess the titleView on GitHub (pinned to e1c734241f)
Solutions
- Add a title: pageBuilder().title("My Page") — the builder will derive a component link from it
- Or set componentLink("qwc-my-page.js") / componentName("qwc-my-page") directly
- Validate the source data before building; skip creating the page when the identifying fields are blank
- Chain setters in one fluent expression so an identifying call is structurally required
Example fix
// before
PageBuilder pb = new PageBuilder();
Page page = pb.build(); // throws
// after
PageBuilder pb = new PageBuilder()
.title("My Extension")
.componentLink("qwc-my-extension.js");
Page page = pb.build(); Defensive patterns
Strategy: validation
Validate before calling
if (componentName == null && componentLink == null && (title == null || title.isBlank())) {
throw new IllegalStateException("PageBuilder needs componentName, componentLink, or title");
} Type guard
boolean isBuildablePage(PageBuilder b) {
return b != null; // plus keep your own record of which identifying setter was applied
} Try / catch
try {
return pageBuilder.build();
} catch (RuntimeException e) {
if (e.getMessage().contains("Not enough information to build the page")) {
log.warn("Skipping unnamed Dev UI page");
return null;
}
throw e;
} Prevention
- Always start a PageBuilder chain with title(...) or componentLink(...)
- Validate config-derived names before feeding them to the builder
- Skip building pages whose source data is empty
- Add a deployment-time test that builds all pages the extension registers
When it happens
Trigger: Calling pageBuilder().build() on a completely fresh builder, or where all three of componentName(...), componentLink(...), title(...) calls were conditionally skipped or passed null/blank values.
Common situations: Extension authors adding Dev UI pages whose name/title come from config that is empty; copy-pasted builder code where all identifying setters were removed; generic page-generation loops where the data source yielded an empty record.
Understand the failure class
Background: "missing required argument" and "the following required arguments were not provided": what required-argument errors mean and how to fix them — this error's family across 20 libraries.
Related errors
- Invalid fileName
- CardAction title is required
- CardText requires either staticText(), dynamicText(), or str
- You have to specify a key. This is the key the user will pre
- You have to specify a description. This is what the user wil
AI-assisted analysis of quarkusio/quarkus@e1c734241f (2026-09-05).
Data as JSON: /api/errors/3802b4ab4ad0a8c1.
Report an issue: GitHub.