BookStackApp/BookStack · error · ThemeModuleException
Failed loading module from "{$moduleJsonFile}" with error: {
Error message
Failed loading module from "{$moduleJsonFile}" with error: {$exception->getMessage()} What it means
Wrapping ThemeModuleException rethrown in ThemeModuleManager::loadFromFolder when loading a module manifest fails for any reason (bad JSON or ThemeModule::fromJson validation failure); the original error text is embedded so the root cause of the failed module load is preserved.
Source
Thrown at app/Theming/ThemeModuleManager.php:135
{
$moduleJsonFile = $this->modulesFolderPath . DIRECTORY_SEPARATOR . $folderName . DIRECTORY_SEPARATOR . 'bookstack-module.json';
if (!file_exists($moduleJsonFile)) {
return null;
}
try {
$jsonContent = file_get_contents($moduleJsonFile);
$jsonData = json_decode($jsonContent, true);
if (json_last_error() !== JSON_ERROR_NONE) {
throw new ThemeModuleException("Invalid JSON in module file at \"{$moduleJsonFile}\": " . json_last_error_msg());
}
$module = ThemeModule::fromJson($jsonData, $folderName);
} catch (ThemeModuleException $exception) {
throw $exception;
} catch (\Exception $exception) {
throw new ThemeModuleException("Failed loading module from \"{$moduleJsonFile}\" with error: {$exception->getMessage()}");
}
return $module;
}
}
View on GitHub (pinned to 18f8469a1c)
Solutions
- Read the embedded original error message to identify whether it is invalid JSON or a missing/invalid manifest property
- Fix the bookstack-module.json accordingly (syntax or required name/description/version fields)
- Reinstall the theme module from a fresh copy if the file is corrupt
Defensive patterns
Strategy: fallback
When it happens
Trigger: Thrown at app/Theming/ThemeModuleManager.php:135 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of BookStackApp/BookStack@18f8469a1c (2026-09-02).
Data as JSON: /api/errors/a727d77319a47253.
Report an issue: GitHub.