# puppeteer

> A high-level API to control headless Chrome over the DevTools Protocol

Latest version **25.10.0** (published 2026-09-03) · Apache-2.0 license · 0 weekly downloads

## Install

```sh
npm install puppeteer
pnpm add puppeteer
yarn add puppeteer
bun add puppeteer
```

## Health

**Score 68/100 (B)** — status: active.

Positive: has types package; no vulnerabilities; recently updated; high maintenance score; popular repo; extremely popular.

Warnings: low downloads; no esm support.

## Facts

| | |
|---|---|
| Version | 25.10.0 |
| Published | 2026-09-03 |
| First published | 2013-03-23 |
| Weekly downloads | 0 |
| License | Apache-2.0 |
| TypeScript types | separate (@types/puppeteer) |
| Module format | CommonJS |
| Dependencies | 0 |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 95581 |
| Author | The Chromium Authors |
| Maintainers | mathias, google-wombot |
| Keywords | puppeteer, chrome, headless, automation |

## Links

- npm: https://www.npmjs.com/package/puppeteer
- Repository: https://github.com/puppeteer/puppeteer.git#main
- Homepage: https://github.com/puppeteer/puppeteer/tree/main#readme
- Issues: https://github.com/puppeteer/puppeteer/issues
- npm.io page: https://npm.io/package/puppeteer

## Alternatives

- [@snazzah/davey](https://npm.io/package/@snazzah/davey.md) — 1.5M weekly downloads
- [@vendure/testing](https://npm.io/package/@vendure/testing.md) — 8.3K weekly downloads
- [vue-simple-context-menu](https://npm.io/package/vue-simple-context-menu.md) — 6.6K weekly downloads
- [cypress-webpack-preprocessor-v5](https://npm.io/package/cypress-webpack-preprocessor-v5.md) — 2.1K weekly downloads
- [@backstage/plugin-catalog-backend-module-puppetdb](https://npm.io/package/@backstage/plugin-catalog-backend-module-puppetdb.md) — 1.3K weekly downloads

## Recent versions

- 25.10.0 (latest) — 2026-09-03
- 5.3.1 (chrome-86) — 2020-09-22
- 5.2.1 (chrome-85) — 2020-07-21
- 5.1.0 (chrome-84) — 2020-07-13
- 3.1.0 (chrome-83) — 2020-05-18
- 3.0.0 (chrome-81) — 2020-04-16
- 2.1.0 (chrome-80) — 2020-01-27
- 2.0.0 (chrome-79) — 2019-10-24
- 1.20.0 (chrome-78) — 2019-09-13
- 1.19.0 (chrome-77) — 2019-07-23
- 1.17.0 (chrome-76) — 2019-05-24
- 1.15.0 (chrome-75) — 2019-04-26
- 1.13.0 (chrome-74) — 2019-03-05
- 1.12.2 (chrome-73) — 2019-02-05
- 1.11.0 (chrome-72) — 2018-11-30
- … 992 more at https://npm.io/package/puppeteer/versions

## README

# Puppeteer

[![build](https://github.com/puppeteer/puppeteer/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/puppeteer/puppeteer/actions/workflows/ci.yml)
[![npm puppeteer package](https://img.shields.io/npm/v/puppeteer.svg)](https://npmjs.org/package/puppeteer)

<img src="https://user-images.githubusercontent.com/10379601/29446482-04f7036a-841f-11e7-9872-91d1fc2ea683.png" height="200" align="right"/>

> Puppeteer is a JavaScript library which provides a high-level API to control
> Chrome or Firefox over the
> [DevTools Protocol](https://chromedevtools.github.io/devtools-protocol/) or [WebDriver BiDi](https://pptr.dev/webdriver-bidi).
> Puppeteer runs in the headless (no visible UI) by default

## [Get started](https://pptr.dev/docs) | [API](https://pptr.dev/api) | [FAQ](https://pptr.dev/faq) | [Contributing](https://pptr.dev/contributing) | [Troubleshooting](https://pptr.dev/troubleshooting)

## Installation

```bash npm2yarn
npm i puppeteer # Downloads compatible Chrome during installation.
npm i puppeteer-core # Alternatively, install as a library, without downloading Chrome.
```

:::note

Modern package managers (including npm (see the [RFC](https://github.com/npm/rfcs/pull/868)), pnpm, Yarn, Bun, and Deno) block dependency install scripts by default. If the install script is blocked, Puppeteer will not download the browser during installation, leading to runtime errors.

You can manually download the required browsers after installation by running:

```bash npm2yarn
npx puppeteer browsers install
```

Alternatively, you can configure your package manager to allow the install script to run (for example, with npm, by adding `"puppeteer"` to `"allowScripts"` in your `package.json`).

:::

## MCP

Install [`chrome-devtools-mcp`](https://github.com/ChromeDevTools/chrome-devtools-mcp),
a Puppeteer-based MCP server for browser automation and debugging.

Puppeteer also supports the experimental [WebMCP](https://pptr.dev/guides/webmcp) API.

## Example

```ts
import puppeteer from 'puppeteer';
// Or import puppeteer from 'puppeteer-core';

// Launch the browser and open a new blank page.
const browser = await puppeteer.launch();
const page = await browser.newPage();

// Navigate the page to a URL.
await page.goto('https://developer.chrome.com/');

// Set the screen size.
await page.setViewport({width: 1080, height: 1024});

// Open the search menu using the keyboard.
await page.keyboard.press('/');

// Type into search box using accessible input name.
await page.locator('::-p-aria(Search)').fill('automate beyond recorder');

// Wait and click on first result.
await page.locator('.devsite-result-item-link').click();

// Locate the full title with a unique string.
const textSelector = await page
  .locator('::-p-text(Customize and automate)')
  .waitHandle();
const fullTitle = await textSelector?.evaluate(el => el.textContent);

// Print the full title.
console.log('The title of this blog post is "%s".', fullTitle);

await browser.close();
```

---
_Source: https://npm.io/package/puppeteer · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
