Playwright
Use the playwright build extension to use Playwright with Trigger.dev
If you are using Playwright, you should use the Playwright build extension.
- Automatically installs Playwright and required browser dependencies
- Allows you to specify which browsers to install (chromium, firefox, webkit)
- Supports headless or non-headless mode
- Lets you specify the Playwright version, or auto-detects it
- Installs only the dependencies needed for the selected browsers to optimize build time and image size
This extension only affects the build and deploy process, not the dev
command.
You can use it for a simple Playwright setup like this:
Options
-
browsers
: Array of browsers to install. Valid values:"chromium"
,"firefox"
,"webkit"
. Default:["chromium"]
. -
headless
: Run browsers in headless mode. Default:true
. If set tofalse
, a virtual display (Xvfb) will be set up automatically. -
version
: Playwright version to install. If not provided, the version will be auto-detected from your dependencies (recommended).Using a different version in your app than specified here will break things. We recommend not setting this option to automatically detect the version.
Custom browsers and version
Headless mode
By default, browsers are run in headless mode. If you need to run browsers with a UI (for example, for debugging), set headless: false
. This will automatically set up a virtual display using Xvfb.
Environment variables
The extension sets the following environment variables during the build:
PLAYWRIGHT_BROWSERS_PATH
: Set to/ms-playwright
so Playwright finds the installed browsersPLAYWRIGHT_SKIP_BROWSER_DOWNLOAD
: Set to1
to skip browser download at runtimePLAYWRIGHT_SKIP_BROWSER_VALIDATION
: Set to1
to skip browser validation at runtimeDISPLAY
: Set to:99
ifheadless: false
(for Xvfb)
Managing browser instances
To prevent issues with waits and resumes, you can use middleware and locals to manage the browser instance. This will ensure the browser is available for the whole run, and is properly cleaned up on waits, resumes, and after the run completes.
Here’s an example using chromium
, but you can adapt it for other browsers:
You can then use getBrowser()
in your task’s run
function to access the browser instance: