> ## Documentation Index
> Fetch the complete documentation index at: https://docs.browserbase.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Quickstart

> Spin up your first Trigger.dev job that controls a Browserbase browser in under 5 minutes.

> Prerequisites: Node 18+, PNPM/NPM/Yarn, a **Trigger.dev** account, and a **Browserbase** API key.

## 1. Scaffold a fresh project

```bash theme={null}
mkdir my-trigger-project && cd $_
npm init -y # or pnpm init / yarn init
```

Add required packages:

```bash theme={null}
npm install @trigger.dev/sdk @trigger.dev/build puppeteer puppeteer-core
```

If you want TypeScript (recommended):

```bash theme={null}
npm install -D typescript ts-node @types/node
npx tsc --init
```

## 2. Create `trigger.config.ts`

```ts title="trigger.config.ts" theme={null}
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`

```bash theme={null}
cp .env.example .env.local && $EDITOR .env.local
```

Fill in:

```dotenv theme={null}
TRIGGER_SECRET_KEY=tr_dev_***
BROWSERBASE_API_KEY=bb_***
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`

```tsx title="src/trigger/puppeteer-log-title.ts" theme={null}
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:

```bash theme={null}
npx trigger.dev dev
```

You should see the task register in the [Trigger.dev dashboard](https://cloud.trigger.dev). From there you can test-run the task directly.

## 6. Deploy

```bash theme={null}
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`** – extracts Hacker News articles, feeds them to OpenAI, emails a summary.

Happy triggering!
