xpipe-io/xpipe · critical · IllegalStateException
Required local XPipe installation was not found but is requi
Error message
Required local XPipe installation was not found but is required for development. See https://github.com/xpipe-io/xpipe/blob/master/CONTRIBUTING.md#development-setup
What it means
During extension discovery in development mode, XPipe requires a locally installed XPipe build to supply external modules. If AppInstallation.ofDefault() points to a non-existent base path, findAndParseExtension aborts with an IllegalStateException linking the contributing guide.
Source
Thrown at app/src/main/java/io/xpipe/app/core/AppExtensionManager.java:130
extendedLayer.findModule(AppNames.extModuleName("proc")).orElseThrow());
}
}
private Optional<Module> findAndParseExtension(String name, ModuleLayer parent) {
var inModulePath = ModuleLayer.boot().findModule(AppNames.extModuleName(name));
if (inModulePath.isPresent()) {
TrackEvent.info("Loaded extension " + name + " from boot module path");
return inModulePath;
}
if (!AppProperties.get().isFullVersion()) {
try {
if (externalModuleFileSystem == null) {
var localInstallation =
AppInstallation.ofDefault(AppProperties.get().isLocatePtb());
Path p = localInstallation.getBaseInstallationPath();
if (!Files.exists(p)) {
throw new IllegalStateException(
"Required local " + AppNames.ofCurrent().getName()
+ " installation was not found but is required for development. See https://github"
+ ".com/xpipe-io/xpipe/blob/master/CONTRIBUTING.md#development-setup");
}
if (AppProperties.get().isLocatorVersionCheck()) {
var iv = getLocalInstallVersion(localInstallation);
var installVersion = AppVersion.parse(iv)
.orElseThrow(() -> new IllegalArgumentException("Invalid installation version: " + iv));
var sv = !AppProperties.get().isImage()
? Files.readString(Path.of("version")).strip()
: AppProperties.get().getVersion();
var sourceVersion = AppVersion.parse(sv)
.orElseThrow(() -> new IllegalArgumentException("Invalid source version: " + sv));
if (!installVersion.equals(sourceVersion)) {
throw new IllegalStateException("Incompatible development version. Source: " + sv
+ ", Installation: "
+ ivView on GitHub (pinned to d85ca821ba)
Solutions
- Install the XPipe desktop application locally (see CONTRIBUTING.md development setup)
- Ensure the installation is at the default location AppInstallation.ofDefault() resolves to
- Check AppProperties locator/PTB flags are not pointing at a missing variant
- Re-run the app after installation so externalModuleFileSystem can be populated
Example fix
// before ./gradlew run // fails: no local installation // after // install XPipe first, e.g. via package manager or installer script, then ./gradlew run
Defensive patterns
Strategy: validation
Validate before calling
const fs = require('fs');
function assertLocalXpipeInstalled(installPath) {
if (!fs.existsSync(installPath)) {
throw new Error(`Local XPipe installation missing at ${installPath}; install it before running dev mode`);
}
} Try / catch
try {
app.bootstrap(); // triggers extension discovery
} catch (e) {
if (String(e.message).includes('Required local')) {
console.error('Install the XPipe desktop app per CONTRIBUTING.md, then re-run.');
process.exit(1);
}
throw e;
} Prevention
- Install the XPipe desktop app before running from source
- Keep the installation at the default detected location
- Review CONTRIBUTING.md development setup after cloning
- Verify locator/PTB flags match the installed variant
When it happens
Trigger: Running the XPipe application from source in a development environment without a local XPipe installation present at the default installation location.
Common situations: Fresh clone of the repo without ever installing the XPipe desktop app, custom install location not detected, or PTB/locator settings changing which install path is resolved.
Understand the failure class
Background: "not installed", "pip install", "required for": how missing-dependency errors surface across open-source libraries — this error's family across 34 libraries.
AI-assisted analysis of xpipe-io/xpipe@d85ca821ba (2026-09-06).
Data as JSON: /api/errors/d29500a95794fabb.
Report an issue: GitHub.