{"record":{"id":"9ee9bccaa33e8ab4","repo":"louislam/uptime-kuma","slug":"chromium-not-found-please-specify-chromium-execut","errorCode":null,"errorMessage":"Chromium not found, please specify Chromium executable path in the settings page.","messagePattern":"Chromium not found, please specify Chromium executable path in the settings page\\.","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"server/monitor-types/real-browser-monitor-type.js","lineNumber":196,"sourceCode":" * @param {string[]} executables Executables to search through\n * @returns {Promise<string>} Executable\n * @throws {Error} Could not find executable\n */\nasync function findChrome(executables) {\n    // Use the last working executable, so we don't have to search for it again\n    if (lastAutoDetectChromeExecutable) {\n        if (await commandExists(lastAutoDetectChromeExecutable)) {\n            return lastAutoDetectChromeExecutable;\n        }\n    }\n\n    for (let executable of executables) {\n        if (await commandExists(executable)) {\n            lastAutoDetectChromeExecutable = executable;\n            return executable;\n        }\n    }\n    throw new Error(\"Chromium not found, please specify Chromium executable path in the settings page.\");\n}\n\n/**\n * Reset chrome\n * @returns {Promise<void>}\n */\nasync function resetChrome() {\n    if (browser) {\n        await browser.close();\n        browser = null;\n    }\n}\n\n/**\n * Test if the chrome executable is valid and return the version\n * @param {string} executablePath Path to executable\n * @returns {Promise<string>} Chrome version\n */","sourceCodeStart":178,"sourceCodeEnd":214,"githubUrl":"https://github.com/louislam/uptime-kuma/blob/6b5ea0155793e666666745fb8d6fef1e829543a2/server/monitor-types/real-browser-monitor-type.js#L178-L214","documentation":"findChrome caches the last successful auto-detected binary in lastAutoDetectChromeExecutable and otherwise iterates a built-in `executables` list, probing each with commandExists. If none is found on PATH, it throws telling the user to set a path in settings. This is the no-Chromium-present terminal condition.","triggerScenarios":"No executable in the `executables` array resolves via PATH, and the cached last-detection is missing too. Common in minimal containers or fresh OS installs without Chrome/Chromium installed.","commonSituations":"Alpine/slim Docker images without chromium, CI runners without a browser, servers where Chrome was never installed, or PATH not including the browser's bin directory.","solutions":["Install Chromium/Chrome: apt install chromium-browser / dnf install chromium / apk add chromium.","Set the Chromium executable path explicitly in the Uptime Kuma settings page.","Run UPTIME_KUMA_IS_CONTAINER=1 so the monitor installs Chromium via APT to /usr/bin/chromium.","Ensure the browser's binary directory is on PATH for the Uptime Kuma process."],"exampleFix":"# before\n# chromium not installed\n# after\napt-get update && apt-get install -y chromium","handlingStrategy":"validation","validationCode":"const util = require('util'), execFile = util.promisify(require('child_process').execFile);\nasync function ensureChromium() {\n  const candidates = ['chromium', 'chromium-browser', 'google-chrome', 'google-chrome-stable'];\n  for (const c of candidates) {\n    try { await execFile('which', [c]); return c; } catch {}\n  }\n  throw new Error('Chromium not found; install it or set executablePath');\n}","typeGuard":"async function chromiumOnPath() { try { await execFile('which', ['chromium']); return true; } catch { return false; } }","tryCatchPattern":"try {\n  await findChrome();\n} catch (e) {\n  if (/Chromium not found/.test(e.message)) {\n    // install chromium or prompt user for executablePath\n  }\n  throw e;\n}","preventionTips":["Install Chromium in the base image, not at runtime.","In containers, set UPTIME_KUMA_IS_CONTAINER=1 to use the APT install path.","Pin a Chromium version that matches the bundled Playwright expectations."],"tags":["chromium","environment","install","config"],"backgroundTag":null,"analyzedSha":"6b5ea0155793e666666745fb8d6fef1e829543a2","analyzedAt":"2026-08-12T23:42:12.959Z","schemaVersion":2},"datasetVersion":"2026-08-13T04:17:16.726Z"}