Where apps hide your files
Playwright downloads its browsers to ~/Library/Caches/ms-playwright and Puppeteer to ~/.cache/puppeteer, both outside your projects. Old revisions can add up to gigabytes, so here is how to see them and clear them with each tool's own commands.
~/Library/Caches/ms-playwright
~/.cache/puppeteer
The first is Playwright's default on macOS, from its documentation. The second is Puppeteer's default since version 19.0.0, also from its documentation and its source. Neither lives inside a project, which is why deleting node_modules frees nothing here straight away.
To open them, choose Go > Go to Folder (⇧⌘G) in Finder and paste the path, or use Terminal:
open ~/Library/Caches/ms-playwright
open ~/.cache/puppeteer
~/Library is hidden in Finder and .cache starts with a dot, so neither shows in a normal window. Press ⇧⌘. to show hidden items. If open says the folder does not exist, that tool has not downloaded any browsers for your account, or the location was changed (see below).
On the Mac used for this guide it holds one folder per browser build:
| Folder | Size here | What it is |
|---|---|---|
chromium-1140 | 429M | An older Chromium build: Chromium.app inside a chrome-mac folder |
chromium-1243 | 359M | A newer one: Google Chrome for Testing.app inside chrome-mac-arm64 |
chromium_headless_shell-1243, -1248 | 195M, 203M | The lighter headless-only build used when tests run without a window |
ffmpeg-1010, ffmpeg-1011 | 2.5M each | A small ffmpeg used for video recording |
.links | tiny | Hidden folder with one small file per Playwright install that uses this cache |
The number after each name is a build revision tied to a Playwright release, so a newer Playwright wants a new number and downloads it. Each folder also has an INSTALLATION_COMPLETE marker. Firefox and WebKit appear as firefox-... and webkit-... folders once you install them; this Mac has neither. The total here is 1.2G, built up over several Playwright updates.
Apple silicon and Intel Macs get different downloads (note the mac-arm64 in some folder names), so a cache copied from an Intel Mac is no use on an Apple silicon one.
Puppeteer's source lays the cache out as browser, then platform and version, then the browser's own files:
~/.cache/puppeteer/chrome/mac_arm-<version>/chrome-mac-arm64/Google Chrome for Testing.app
~/.cache/puppeteer/chrome-headless-shell/mac_arm-<version>/...
On an Intel Mac the platform part is mac-<version>. Puppeteer's documentation says Firefox is not downloaded unless you turn it on in the configuration, so a default install holds Chrome builds only. The folder on the Mac used for this guide exists but is empty, which is what you see when no project has downloaded a browser yet, or downloads are switched off with PUPPETEER_SKIP_DOWNLOAD.
PLAYWRIGHT_BROWSERS_PATH both when installing and when running tests, for example PLAYWRIGHT_BROWSERS_PATH=$HOME/pw-browsers npx playwright install. Setting it to 0 puts browsers inside the project, in node_modules/playwright-core/.local-browsers. It does not move Google Chrome or Microsoft Edge installs.PUPPETEER_CACHE_DIR, or put cacheDirectory in a config file such as .puppeteerrc.cjs in the project. Environment variables override the file. Reinstall puppeteer afterwards so it downloads to the new place.If a project sets either one, its browsers are not in the default folders. Check the project's config files and ~/.zshrc before deciding the cache is missing.
From a project folder that uses Playwright:
npx playwright install --list
It prints the browsers from all Playwright installations on the Mac. From a project that uses Puppeteer:
npx puppeteer browsers list
That reads the cache Puppeteer is configured to use. The standalone tool works too, but it looks in the current folder unless you give it a path, so pass one:
npx @puppeteer/browsers list --path "$HOME/.cache/puppeteer"
All three only read. For sizes, du -sh ~/Library/Caches/ms-playwright/* lists each folder.
Stop any running test or script first, then use the tools rather than the Trash:
npx playwright uninstall, run in a project, unregisters that project's Playwright and deletes every browser that no remaining install still needs. npx playwright uninstall --all unregisters every install and deletes all of them. Playwright also removes unused revisions whenever you run npx playwright install, unless PLAYWRIGHT_SKIP_BROWSER_GC=1 is set or you pass --no-remove. A project whose node_modules you deleted no longer counts, so its browsers go at the next install or uninstall.npx puppeteer browsers clear asks for confirmation, then deletes the whole configured cache. The standalone npx @puppeteer/browsers clear needs --path and recursively deletes whatever folder you give it, so type "$HOME/.cache/puppeteer" exactly and nothing else.Anything removed comes back on demand: npx playwright install for Playwright, and npx puppeteer browsers install or the next npm install that runs Puppeteer's download step. The cost is download time, and tests fail until the browser is back.
If you would rather use Finder, move a single revision folder such as chromium-1140 to the Trash, never the whole ~/Library/Caches folder, and leave .links alone: Playwright uses it to decide what is still needed.
Do not copy these folders. Install the project's dependencies on the new Mac and run the install commands above; they fetch builds for the new Mac's chip. There is no need to back these folders up, since everything in them can be downloaded again.
~/Library/Caches and the hidden ~/.cache folder are both places Finder and Spotlight searches leave out, and each browser is packaged as an app bundle, so its files sit inside a package Finder shows as one item.
Type ms-playwright or chrome-headless-shell into Everywhere and the cache folders and the revisions inside them are listed with their full paths, whether they sit in ~/Library/Caches, ~/.cache or a project's .local-browsers folder. It reads names only, so it cannot tell you which project still needs a revision; npx playwright install --list does that.
In ~/Library/Caches/ms-playwright, unless PLAYWRIGHT_BROWSERS_PATH is set. Each browser build is its own folder, such as chromium-1243.
To ~/.cache/puppeteer by default, in folders such as chrome/mac_arm-<version>. You can change it with PUPPETEER_CACHE_DIR or a cacheDirectory setting in a Puppeteer config file.
Stop running tests, then run npx playwright uninstall in a project, or npx playwright uninstall --all to remove the browsers of every Playwright install. npx playwright install downloads them again.
Each Playwright release uses new browser revisions, and old ones stay until an install or uninstall removes those no project needs. On the Mac used for this guide, two Chromium builds are 429M and 359M, and two headless shells are about 200M each.
Everywhere keeps track of every file on your Mac — including the folders Spotlight hides and drives you have unplugged. Free for a day, then $19 once.
Version 2.20.3 · macOS 13+ · 4.7 MB · notarised