projectdiscovery/nuclei · error

the chrome browser is not installed

Error message

the chrome browser is not installed

What it means

Raised when the headless engine is forced to use a system-installed browser — either because options.UseInstalledChrome is set (CLI flag -system-chrome) or a musl-based build (Alpine) makes the downloaded Chromium unusable — and launcher.LookPath() finds no chrome/chromium executable in PATH. Nuclei refuses to fall back to downloading in these modes, so it errors out.

Solutions

  1. Install Chrome or Chromium and ensure it is on PATH (e.g. `apt-get install -y chromium` or install google-chrome-stable)
  2. Drop the -system-chrome flag so go-rod downloads and caches a compatible Chromium automatically
  3. On Alpine/production images, add the chromium package since musl builds cannot use the downloaded browser
  4. Verify with `which chromium || which google-chrome` before launching headless scans

Example fix

# before (Dockerfile, alpine, headless fails)
FROM alpine:latest
RUN apk add --no-cache nuclei
# after
FROM alpine:latest
RUN apk add --no-cache nuclei chromium chromium-chromedriver
ENV PATH="/usr/bin/chromium-browser:$PATH"
Defensive patterns

Strategy: validation

Validate before calling

// precheck in a wrapper script before headless scans:
// if !command -v chromium && !command -v google-chrome; then install or drop -system-chrome; fi
if _, hasChrome := launcher.LookPath(); !hasChrome {
    return errors.New("system chrome requested but not found; install chromium or omit -system-chrome")
}

Prevention

When it happens

Trigger: Running `nuclei -headless -system-chrome ...` on a machine with no Chrome/Chromium installed; running headless templates in an Alpine-based container without the chromium package (musl detection forces the system-chrome path).

Common situations: Minimal Docker images and CI runners where Chrome was never installed; -system-chrome passed to avoid the Chromium download, but the binary exists only under an unexpected name or is not on PATH; Alpine images where go-rod's bundled browser cannot run.

Related errors


AI-assisted analysis of projectdiscovery/nuclei@265b3a3dec (2026-08-15). Data as JSON: /api/errors/ec998ab7130dbfca. Report an issue: GitHub.

Appendix: source

Thrown at pkg/protocols/headless/engine/engine.go:76

			Delete("use-mock-keychain").
			UserDataDir(dataStore)

		if MustDisableSandbox() {
			chromeLauncher = chromeLauncher.NoSandbox(true)
		}

		executablePath, err := os.Executable()
		if err != nil {
			return nil, err
		}

		// if musl is used, most likely we are on alpine linux which is not supported by go-rod, so we fallback to default chrome
		useMusl, _ := fileutil.UseMusl(executablePath)
		if options.UseInstalledChrome || useMusl {
			if chromePath, hasChrome := launcher.LookPath(); hasChrome {
				chromeLauncher.Bin(chromePath)
			} else {
				return nil, errors.New("the chrome browser is not installed")
			}
		}

		if options.ShowBrowser {
			chromeLauncher = chromeLauncher.Headless(false)
		} else {
			chromeLauncher = chromeLauncher.Headless(true)
		}
		if options.AliveHttpProxy != "" {
			chromeLauncher = chromeLauncher.Proxy(options.AliveHttpProxy)
		}

		for k, v := range options.ParseHeadlessOptionalArguments() {
			chromeLauncher.Set(flags.Flag(k), v)
		}

		launcherURL, err = chromeLauncher.Launch()
		if err != nil {

View on GitHub (pinned to 265b3a3dec)