{"record":{"id":"61474dfcf8da11cc","repo":"GoogleChrome/lighthouse","slug":"launching-chrome-on-mac-silicon-arm64-from-an-x6","errorCode":null,"errorMessage":"Launching Chrome on Mac Silicon (arm64) from an x64 Node installation results in Rosetta translating the Chrome binary, even if Chrome is already arm64. This would result in huge performance issues. To resolve this, you must run Lighthouse CLI with a version of Node built for arm64. You should also confirm that your Chrome install says arm64 in chrome://version","messagePattern":"Launching Chrome on Mac Silicon \\(arm64\\) from an x64 Node installation results in Rosetta translating the Chrome binary, even if Chrome is already arm64\\. This would result in huge performance issues\\. To resolve this, you must run Lighthouse CLI with a version of Node built for arm64\\. You should also confirm that your Chrome install says arm64 in chrome://version","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"cli/run.js","lineNumber":76,"sourceCode":"        if (parsed[key] === true) return `--${key}`;\n        // ChromeLauncher passes flags to Chrome as atomic arguments, so do not double quote\n        // i.e. `lighthouse --chrome-flags=\"--user-agent='My Agent'\"` becomes `chrome \"--user-agent=My Agent\"`\n        // see https://github.com/GoogleChrome/lighthouse/issues/3744\n        return `--${key}=${parsed[key]}`;\n      });\n}\n\n/**\n * Attempts to connect to an instance of Chrome with an open remote-debugging\n * port. If none is found, launches a debuggable instance.\n * @param {LH.CliFlags} flags\n * @return {Promise<ChromeLauncher.LaunchedChrome>}\n */\nfunction getDebuggableChrome(flags) {\n  if (process.platform === 'darwin' && process.arch === 'x64') {\n    const cpus = os.cpus();\n    if (cpus[0].model.includes('Apple')) {\n      throw new Error(\n        'Launching Chrome on Mac Silicon (arm64) from an x64 Node installation results in ' +\n        'Rosetta translating the Chrome binary, even if Chrome is already arm64. This would ' +\n        'result in huge performance issues. To resolve this, you must run Lighthouse CLI with ' +\n        'a version of Node built for arm64. You should also confirm that your Chrome install ' +\n        'says arm64 in chrome://version');\n    }\n  }\n\n  return ChromeLauncher.launch({\n    port: flags.port,\n    ignoreDefaultFlags: flags.chromeIgnoreDefaultFlags,\n    chromeFlags: parseChromeFlags(flags.chromeFlags),\n    logLevel: flags.logLevel,\n  });\n}\n\n/** @return {never} */\nfunction printConnectionErrorAndExit() {","sourceCodeStart":58,"sourceCodeEnd":94,"githubUrl":"https://github.com/GoogleChrome/lighthouse/blob/9515cd4e58ebed69f78742d932b501c2cab8ad8f/cli/run.js#L58-L94","documentation":"On macOS, Lighthouse detects when the Node.js process is an x64 build running on Apple Silicon (arm64) hardware. In this configuration, macOS's Rosetta 2 translates the Chrome binary, causing severe performance measurement corruption even if Chrome itself is arm64. Lighthouse proactively refuses to launch rather than produce misleading metrics. The detection checks process.platform === 'darwin', process.arch === 'x64', and whether the CPU model string contains 'Apple'.","triggerScenarios":"Running the Lighthouse CLI on an Apple Silicon Mac (M1/M2/M3/M4) where the Node.js binary is an x64 (Intel) build running under Rosetta. The check fires at Chrome launch time in getDebuggableChrome before any audit work begins.","commonSituations":"Installing Node via a version manager (nvm, homebrew) that provided the Intel x64 build on an Apple Silicon machine; CI runners or Docker containers using x64 Node images on arm64 hosts; corporate IT-provided Node installations that default to x64.","solutions":["Install an arm64-native Node.js build: use nvm to install an arm64 version, or download from nodejs.org choosing the arm64 Darwin installer","Verify your Node architecture: node -p \"process.arch\" should print 'arm64', not 'x64'","If using nvm: arch -arm64 zsh && nvm install --arch=arm64 lts/iron","Verify Chrome is also arm64 by checking chrome://version for 'arm64' in the platform line","Alternatively, run Lighthouse in a Docker container with an x64 image on an x64 host (avoids Rosetta entirely)"],"exampleFix":"# before: node -p \"process.arch\" prints 'x64'\n# fix with nvm:\narch -arm64 zsh\nnvm install --arch=arm64 20\nnvm use 20\nnode -p \"process.arch\"  # should print 'arm64'\nlighthouse https://example.com","handlingStrategy":"validation","validationCode":"// Check for the Apple Silicon + x64 Node mismatch before running Lighthouse\nconst os = require('os');\nfunction checkPlatformCompatibility() {\n  if (process.platform === 'darwin' && process.arch === 'x64') {\n    const cpus = os.cpus();\n    if (cpus[0]?.model?.includes('Apple')) {\n      console.error('ERROR: x64 Node on Apple Silicon. Install arm64 Node: nvm install --arch=arm64 lts/iron');\n      process.exit(1);\n    }\n  }\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["On Apple Silicon Macs, always install arm64-native Node (check with: node -p process.arch)","Use nvm with --arch=arm64: nvm install --arch=arm64 20","In CI/Docker on arm64 hosts, use arm64 images for both Node and Chrome","Verify Chrome is arm64 via chrome://version before relying on performance metrics"],"tags":["platform","macos","arm64","environment","chrome"],"backgroundTag":null,"analyzedSha":"9515cd4e58ebed69f78742d932b501c2cab8ad8f","analyzedAt":"2026-08-13T06:28:10.346Z","schemaVersion":2},"datasetVersion":"2026-08-13T09:17:06.757Z"}