Skip to main content
Prerequisites: Node 18+, PNPM/NPM/Yarn, a Trigger.dev account, and a Browserbase API key.

1. Scaffold a fresh project

mkdir my-trigger-project && cd $_
npm init -y # or pnpm init / yarn init
Add required packages:
npm install @trigger.dev/sdk @trigger.dev/build puppeteer puppeteer-core
If you want TypeScript (recommended):
npm install -D typescript ts-node @types/node
npx tsc --init

2. Create trigger.config.ts

trigger.config.ts
import { defineConfig } from "@trigger.dev/sdk";
import { puppeteer } from "@trigger.dev/build/extensions/puppeteer";
import { aptGet } from "@trigger.dev/build/extensions/core";

export default defineConfig({
  project: "your_project_id", // grab from the Trigger dashboard
  dirs: ["./src/trigger"],
  build: {
    extensions: [aptGet({ packages: ["mupdf-tools", "curl"] }), puppeteer()],
  },
});
This installs MuPDF + Chrome in the build container so your tasks can run mutool and Puppeteer.

3. Configure .env.local

cp .env.example .env.local && $EDITOR .env.local
Fill in:
TRIGGER_SECRET_KEY=tr_dev_***
BROWSERBASE_API_KEY=bb_***
BROWSERBASE_PROJECT_ID=proj_***
S3_ENDPOINT=https://<account>.r2.cloudflarestorage.com
R2_ACCESS_KEY_ID=
R2_SECRET_ACCESS_KEY=
S3_BUCKET=my-bucket

4. Add your first task src/trigger/puppeteer-log-title.ts

src/trigger/puppeteer-log-title.ts
import { task } from "@trigger.dev/sdk";
import puppeteer from "puppeteer";

export const logTitle = task({
  id: "browserbase-title",
  run: async () => {
    const browser = await puppeteer.connect({
      browserWSEndpoint: `wss://connect.browserbase.com?apiKey=${process.env.BROWSERBASE_API_KEY}`,
    });

    const page = await browser.newPage();
    await page.goto("https://example.com");

    const title = await page.title();
    console.log({ title });

    await browser.close();
  },
});
You can export multiple tasks from this file or additional files in src/trigger/—Trigger.dev will pick them up automatically.

5. Run locally

Start the Trigger.dev CLI dev server, which watches your task files and connects to the Trigger.dev platform:
npx trigger.dev dev
You should see the task register in the Trigger.dev dashboard. From there you can test-run the task directly.

6. Deploy

npx trigger.dev deploy
That’s it—your background browser automation now scales automatically in production.
Need something more advanced? Check out:
  • pdf-to-image.tsx – converts multi-page PDFs to PNG and uploads to Cloudflare R2.
  • summarize-hn.tsx – scrapes Hacker News, feeds articles to OpenAI, emails a summary.
Happy triggering! 🎯