{"id":15715549,"url":"https://github.com/cloudflare/puppeteer","last_synced_at":"2026-02-03T13:14:22.925Z","repository":{"id":156232483,"uuid":"631054809","full_name":"cloudflare/puppeteer","owner":"cloudflare","description":"Puppeteer Core fork that works with Cloudflare Browser Workers","archived":false,"fork":false,"pushed_at":"2026-01-30T14:35:49.000Z","size":40652,"stargazers_count":352,"open_issues_count":53,"forks_count":45,"subscribers_count":13,"default_branch":"main","last_synced_at":"2026-01-31T09:30:18.098Z","etag":null,"topics":["cloudflare","workers"],"latest_commit_sha":null,"homepage":"https://developers.cloudflare.com/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cloudflare.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"docs/contributing.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":"CODEOWNERS","security":"SECURITY.md","support":"docs/supported-browsers.md","governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-04-21T20:08:59.000Z","updated_at":"2026-01-31T00:46:26.000Z","dependencies_parsed_at":null,"dependency_job_id":"f1b649e8-3ab3-4d4f-9262-69237450920e","html_url":"https://github.com/cloudflare/puppeteer","commit_stats":null,"previous_names":[],"tags_count":578,"template":false,"template_full_name":null,"purl":"pkg:github/cloudflare/puppeteer","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cloudflare%2Fpuppeteer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cloudflare%2Fpuppeteer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cloudflare%2Fpuppeteer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cloudflare%2Fpuppeteer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cloudflare","download_url":"https://codeload.github.com/cloudflare/puppeteer/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cloudflare%2Fpuppeteer/sbom","scorecard":{"id":578708,"data":{"date":"2025-08-20T16:10:52Z","repo":{"name":"github.com/cloudflare/puppeteer","commit":"f1e26ca619b5c7c48948336da341f5acae3ff4d0"},"scorecard":{"version":"v5.0.0-rc2","commit":"7ce8609469289d5f3b1bf5ee3122f42b4e3054fb"},"score":5.8,"checks":[{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/7ce8609469289d5f3b1bf5ee3122f42b4e3054fb/docs/checks.md#binary-artifacts"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'main'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/7ce8609469289d5f3b1bf5ee3122f42b4e3054fb/docs/checks.md#branch-protection"}},{"name":"CI-Tests","score":10,"reason":"9 out of 9 merged PRs checked by a CI test -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project runs tests before pull requests are merged.","url":"https://github.com/ossf/scorecard/blob/7ce8609469289d5f3b1bf5ee3122f42b4e3054fb/docs/checks.md#ci-tests"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/7ce8609469289d5f3b1bf5ee3122f42b4e3054fb/docs/checks.md#cii-best-practices"}},{"name":"Code-Review","score":6,"reason":"Found 8/12 approved changesets -- score normalized to 6","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/7ce8609469289d5f3b1bf5ee3122f42b4e3054fb/docs/checks.md#code-review"}},{"name":"Contributors","score":10,"reason":"project has 48 contributing companies or organizations","details":["Info: puppeteer contributor org/company found, ChromeDevTools contributor org/company found, router-async contributor org/company found, w3c contributor org/company found, so-fancy contributor org/company found, googlers contributor org/company found, google contributor org/company found, whatwg contributor org/company found, microsoft contributor org/company found, wix contributor org/company found, jshint contributor org/company found, html5rocks contributor org/company found, bower contributor org/company found, Heisenbergjs contributor org/company found, bestiejs contributor org/company found, GoogleChrome contributor org/company found, tibiamaps contributor org/company found, mozilla contributor org/company found, robinhood contributor org/company found, cloudflare contributor org/company found, jquery contributor org/company found, google chrome ♥z contributor org/company found, iRail contributor org/company found, unicode-org contributor org/company found, components contributor org/company found, robohornet contributor org/company found, catapult-project contributor org/company found, v8 contributor org/company found, ctfs contributor org/company found, firefox-devtools contributor org/company found, Modernizr contributor org/company found, sass contributor org/company found, diveintomark contributor org/company found, source-map contributor org/company found, DeveloperToolsWG contributor org/company found, 60devs contributor org/company found, chromium contributor org/company found, rustdresden contributor org/company found, yarnpkg contributor org/company found, h5bp contributor org/company found, GoogleChromeLabs contributor org/company found, yeoman contributor org/company found, GoogleCloudPlatform contributor org/company found, hardkoded contributor org/company found, ot-crew contributor org/company found, degulabs contributor org/company found, oftn-oswg contributor org/company found, tc39 contributor org/company found, "],"documentation":{"short":"Determines if the project has a set of contributors from multiple organizations (e.g., companies).","url":"https://github.com/ossf/scorecard/blob/7ce8609469289d5f3b1bf5ee3122f42b4e3054fb/docs/checks.md#contributors"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/7ce8609469289d5f3b1bf5ee3122f42b4e3054fb/docs/checks.md#dangerous-workflow"}},{"name":"Dependency-Update-Tool","score":10,"reason":"update tool detected","details":["Info: detected update tool: Dependabot: .github/dependabot.yml:1"],"documentation":{"short":"Determines if the project uses a dependency update tool.","url":"https://github.com/ossf/scorecard/blob/7ce8609469289d5f3b1bf5ee3122f42b4e3054fb/docs/checks.md#dependency-update-tool"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/7ce8609469289d5f3b1bf5ee3122f42b4e3054fb/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: Apache License 2.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/7ce8609469289d5f3b1bf5ee3122f42b4e3054fb/docs/checks.md#license"}},{"name":"Maintained","score":10,"reason":"24 commit(s) and 2 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/7ce8609469289d5f3b1bf5ee3122f42b4e3054fb/docs/checks.md#maintained"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/7ce8609469289d5f3b1bf5ee3122f42b4e3054fb/docs/checks.md#packaging"}},{"name":"Pinned-Dependencies","score":7,"reason":"dependency not pinned by hash detected -- score normalized to 7","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/cf_test_full.yml:15","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/cf_test_full.yml:16","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/cf_test_full.yml:35","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/cf_test_smoke.yml:16","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/cf_test_smoke.yml:17","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/cf_test_smoke.yml:36","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:115","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:196","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/deflake.yml:106","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/deflake.yml:65","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/publish.yml:15","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/publish.yml:17","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/semgrep.yml:23","Warn: npmCommand not pinned by hash: docker/Dockerfile:28-30","Warn: npmCommand not pinned by hash: .github/workflows/devtools.yml:69","Warn: npmCommand not pinned by hash: .github/workflows/pre-release.yml:69","Warn: npmCommand not pinned by hash: .github/workflows/publish.yml:22","Info:  28 out of  41 GitHub-owned GitHubAction dependencies pinned","Info:   5 out of   5 third-party GitHubAction dependencies pinned","Info:   1 out of   1 containerImage dependencies pinned","Info:  15 out of  19 npmCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/7ce8609469289d5f3b1bf5ee3122f42b4e3054fb/docs/checks.md#pinned-dependencies"}},{"name":"SAST","score":2,"reason":"SAST tool is not run on all commits -- score normalized to 2","details":["Warn: 7 commits out of 27 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/7ce8609469289d5f3b1bf5ee3122f42b4e3054fb/docs/checks.md#sast"}},{"name":"Security-Policy","score":9,"reason":"security policy file detected","details":["Info: security policy file detected: SECURITY.md:1","Info: Found linked content: SECURITY.md:1","Warn: One or no descriptive hints of disclosure, vulnerability, and/or timelines in security policy","Info: Found text in security policy: SECURITY.md:1"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/7ce8609469289d5f3b1bf5ee3122f42b4e3054fb/docs/checks.md#security-policy"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/7ce8609469289d5f3b1bf5ee3122f42b4e3054fb/docs/checks.md#signed-releases"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: jobLevel 'actions' permission set to 'write': .github/workflows/clear-caches.yml:15","Info: jobLevel 'contents' permission set to 'read': .github/workflows/publish.yml:12","Info: topLevel permissions set to 'read-all': .github/workflows/canary.yml:4","Warn: no topLevel permission defined: .github/workflows/cf_test_full.yml:1","Warn: no topLevel permission defined: .github/workflows/cf_test_smoke.yml:1","Info: topLevel permissions set to 'read-all': .github/workflows/changed-packages.yml:3","Info: topLevel permissions set to 'read-all': .github/workflows/ci.yml:4","Info: topLevel permissions set to 'read-all': .github/workflows/clear-caches.yml:9","Info: topLevel permissions set to 'read-all': .github/workflows/deflake.yml:4","Info: topLevel permissions set to 'read-all': .github/workflows/devtools.yml:4","Info: topLevel permissions set to 'read-all': .github/workflows/pre-release.yml:3","Warn: no topLevel permission defined: .github/workflows/publish.yml:1","Info: topLevel permissions set to 'read-all': .github/workflows/scorecards-analysis.yml:18","Warn: no topLevel permission defined: .github/workflows/semgrep.yml:1","Info: topLevel permissions set to 'read-all': .github/workflows/stale.yml:9"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/7ce8609469289d5f3b1bf5ee3122f42b4e3054fb/docs/checks.md#token-permissions"}},{"name":"Vulnerabilities","score":0,"reason":"25 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-gcx4-mw62-g8wm","Warn: Project is vulnerable to: GHSA-52f5-9888-hmc6","Warn: Project is vulnerable to: GHSA-968p-4wvh-cqc8","Warn: Project is vulnerable to: GHSA-qwcr-r2fm-qrc7","Warn: Project is vulnerable to: GHSA-v6h2-p8h4-qcjw","Warn: Project is vulnerable to: GHSA-pxg6-pf52-xh8x","Warn: Project is vulnerable to: GHSA-3xgq-45jj-v275","Warn: Project is vulnerable to: GHSA-f7f6-9jq7-3rqj","Warn: Project is vulnerable to: GHSA-qw6h-vgh9-j6wx","Warn: Project is vulnerable to: GHSA-c7qv-q95q-8v27","Warn: Project is vulnerable to: GHSA-4www-5p9h-95mh","Warn: Project is vulnerable to: GHSA-9gqv-wp59-fq42","Warn: Project is vulnerable to: GHSA-m5qc-5hw7-8vg7","Warn: Project is vulnerable to: GHSA-952p-6rrq-rcjv","Warn: Project is vulnerable to: GHSA-mwcw-c2x4-8c55","Warn: Project is vulnerable to: GHSA-76c9-3jph-rj3q","Warn: Project is vulnerable to: GHSA-9wv6-86v2-598j","Warn: Project is vulnerable to: GHSA-rhx6-c78j-4q9w","Warn: Project is vulnerable to: GHSA-x7hr-w5r2-h6wg","Warn: Project is vulnerable to: GHSA-m6fv-jmcg-4jfg","Warn: Project is vulnerable to: GHSA-76p7-773f-r4q5","Warn: Project is vulnerable to: GHSA-cm22-4g7w-348p","Warn: Project is vulnerable to: GHSA-4vvj-4cpr-p986","Warn: Project is vulnerable to: GHSA-4v9v-hfq4-rm2v","Warn: Project is vulnerable to: GHSA-9jgg-88mc-972h"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/7ce8609469289d5f3b1bf5ee3122f42b4e3054fb/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-20T18:34:18.472Z","repository_id":156232483,"created_at":"2025-08-20T18:34:18.472Z","updated_at":"2025-08-20T18:34:18.472Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29046503,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-03T10:09:22.136Z","status":"ssl_error","status_checked_at":"2026-02-03T10:09:16.814Z","response_time":96,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cloudflare","workers"],"created_at":"2024-10-03T21:41:59.500Z","updated_at":"2026-02-03T13:14:22.918Z","avatar_url":"https://github.com/cloudflare.png","language":"TypeScript","funding_links":[],"categories":["TypeScript","Developer Tools"],"sub_categories":["CLI \u0026 Development"],"readme":"# Workers version of Puppeteer Core\n\nThis repo is a fork of main puppeteer project. It creates a version of\npuppeteer core specialized for use in Cloudflare workers.\n\nThe goals of the fork are:\n\n- Support as much of the existing puppeteer core lib as possible.\n- Minimize the size of the library for workers developers, since library\n  space is at a premium in workers projects.\n- Make library use as seamless as possible in workers.\n\nNote that the main branch in this repo is branched off of version 22.13.1 of\nthe library, to match the currently deployed version of Chromium on the\nedge.\n\nMore information in the [developer docs](https://developers.cloudflare.com/browser-rendering/).\n\nOriginal README follows...\n\n# Puppeteer\n\n[![build](https://github.com/puppeteer/puppeteer/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/puppeteer/puppeteer/actions/workflows/ci.yml)\n[![npm puppeteer package](https://img.shields.io/npm/v/puppeteer.svg)](https://npmjs.org/package/puppeteer)\n\n\u003cimg src=\"https://user-images.githubusercontent.com/10379601/29446482-04f7036a-841f-11e7-9872-91d1fc2ea683.png\" height=\"200\" align=\"right\"/\u003e\n\n\u003e Puppeteer is a Node.js library which provides a high-level API to control\n\u003e Chrome or Firefox over the\n\u003e [DevTools Protocol](https://chromedevtools.github.io/devtools-protocol/) or [WebDriver BiDi](https://pptr.dev/webdriver-bidi).\n\u003e Puppeteer runs in the headless (no visible UI) by default\n\u003e but can be configured to run in a visible (\"headful\") browser.\n\n## [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)\n\n## Installation\n\n```bash npm2yarn\nnpm i puppeteer # Downloads compatible Chrome during installation.\nnpm i puppeteer-core # Alternatively, install as a library, without downloading Chrome.\n```\n\n## Example\n\n```ts\nimport puppeteer from 'puppeteer';\n// Or import puppeteer from 'puppeteer-core';\n\n// Launch the browser and open a new blank page\nconst browser = await puppeteer.launch();\nconst page = await browser.newPage();\n\n// Navigate the page to a URL.\nawait page.goto('https://developer.chrome.com/');\n\n// Set screen size.\nawait page.setViewport({width: 1080, height: 1024});\n\n// Type into search box.\nawait page.locator('.devsite-search-field').fill('automate beyond recorder');\n\n// Wait and click on first result.\nawait page.locator('.devsite-result-item-link').click();\n\n// Locate the full title with a unique string.\nconst textSelector = await page\n  .locator('text/Customize and automate')\n  .waitHandle();\nconst fullTitle = await textSelector?.evaluate(el =\u003e el.textContent);\n\n// Print the full title.\nconsole.log('The title of this blog post is \"%s\".', fullTitle);\n\nawait browser.close();\n```\n\n### Default runtime settings\n\n**1. Uses Headless mode**\n\nBy default Puppeteer launches Chrome in\n[old Headless mode](https://developer.chrome.com/articles/new-headless/).\n\n```ts\nconst browser = await puppeteer.launch();\n// Equivalent to\nconst browser = await puppeteer.launch({headless: true});\n```\n\n[Chrome 112 launched a new Headless mode](https://developer.chrome.com/articles/new-headless/) that might cause some differences in behavior compared to the old Headless implementation.\nIn the future Puppeteer will start defaulting to new implementation.\nWe recommend you try it out before the switch:\n\n```ts\nconst browser = await puppeteer.launch({headless: 'new'});\n```\n\nTo launch a \"headful\" version of Chrome, set the\n[`headless`](https://pptr.dev/api/puppeteer.browserlaunchargumentoptions) to `false`\noption when launching a browser:\n\n```ts\nconst browser = await puppeteer.launch({headless: false});\n```\n\n**2. Runs a bundled version of Chrome**\n\nBy default, Puppeteer downloads and uses a specific version of Chrome so its\nAPI is guaranteed to work out of the box. To use Puppeteer with a different\nversion of Chrome or Chromium, pass in the executable's path when creating a\n`Browser` instance:\n\n```ts\nconst browser = await puppeteer.launch({executablePath: '/path/to/Chrome'});\n```\n\nYou can also use Puppeteer with Firefox. See\n[status of cross-browser support](https://pptr.dev/faq/#q-what-is-the-status-of-cross-browser-support) for\nmore information.\n\nSee\n[`this article`](https://www.howtogeek.com/202825/what%E2%80%99s-the-difference-between-chromium-and-chrome/)\nfor a description of the differences between Chromium and Chrome.\n[`This article`](https://chromium.googlesource.com/chromium/src/+/refs/heads/main/docs/chromium_browser_vs_google_chrome.md)\ndescribes some differences for Linux users.\n\n**3. Creates a fresh user profile**\n\nPuppeteer creates its own browser user profile which it **cleans up on every\nrun**.\n\n#### Using Docker\n\nSee our [Docker guide](https://pptr.dev/guides/docker).\n\n#### Using Chrome Extensions\n\nSee our [Chrome extensions guide](https://pptr.dev/guides/chrome-extensions).\n\n## Resources\n\n- [API Documentation](https://pptr.dev/api)\n- [Guides](https://pptr.dev/category/guides)\n- [Examples](https://github.com/puppeteer/puppeteer/tree/main/examples)\n- [Community list of Puppeteer resources](https://github.com/transitive-bullshit/awesome-puppeteer)\n\n## Contributing\n\nCheck out our [contributing guide](https://pptr.dev/contributing) to get an\noverview of Puppeteer development.\n\n## FAQ\n\nOur [FAQ](https://pptr.dev/faq) has migrated to\n[our site](https://pptr.dev/faq).\n\n\u003e \u003e \u003e \u003e \u003e \u003e \u003e main\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcloudflare%2Fpuppeteer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcloudflare%2Fpuppeteer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcloudflare%2Fpuppeteer/lists"}