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.

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)

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.