{"id":13574587,"url":"https://github.com/Sparticuz/chromium","last_synced_at":"2025-04-04T15:31:29.755Z","repository":{"id":60394726,"uuid":"541732486","full_name":"Sparticuz/chromium","owner":"Sparticuz","description":"Chromium (x86-64) for Serverless Platforms","archived":false,"fork":false,"pushed_at":"2024-10-28T09:54:45.000Z","size":1305606,"stargazers_count":987,"open_issues_count":43,"forks_count":68,"subscribers_count":15,"default_branch":"master","last_synced_at":"2024-10-29T14:51:41.877Z","etag":null,"topics":["chromium","hacktoberfest","serverless"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Sparticuz.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":"Sparticuz","custom":["https://paypal.me/sparticuz"]}},"created_at":"2022-09-26T18:38:50.000Z","updated_at":"2024-10-29T03:14:58.000Z","dependencies_parsed_at":"2023-10-23T18:30:38.428Z","dependency_job_id":"3226106e-5bd1-40b7-8c16-2c42cfcb66e8","html_url":"https://github.com/Sparticuz/chromium","commit_stats":{"total_commits":223,"total_committers":9,"mean_commits":24.77777777777778,"dds":"0.11659192825112108","last_synced_commit":"517b6c43a41eed554ac41cf3e3e80982d91f134d"},"previous_names":[],"tags_count":37,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Sparticuz%2Fchromium","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Sparticuz%2Fchromium/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Sparticuz%2Fchromium/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Sparticuz%2Fchromium/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Sparticuz","download_url":"https://codeload.github.com/Sparticuz/chromium/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247202817,"owners_count":20900845,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["chromium","hacktoberfest","serverless"],"created_at":"2024-08-01T15:00:52.795Z","updated_at":"2025-04-04T15:31:29.745Z","avatar_url":"https://github.com/Sparticuz.png","language":"TypeScript","funding_links":["https://github.com/sponsors/Sparticuz","https://paypal.me/sparticuz"],"categories":["TypeScript"],"sub_categories":[],"readme":"# @sparticuz/chromium\n\n[![@sparticuz/chromium](https://img.shields.io/npm/v/@sparticuz/chromium.svg?style=for-the-badge)](https://www.npmjs.com/package/@sparticuz/chromium)\n[![Chromium](https://img.shields.io/github/size/sparticuz/chromium/bin/chromium.br?label=Chromium\u0026style=for-the-badge)](bin/)\n[![npm](https://img.shields.io/npm/dw/@sparticuz/chromium?label=%40sparticuz%2Fchromium\u0026style=for-the-badge)](https://www.npmjs.com/package/@sparticuz/chromium)\n[![npm](https://img.shields.io/npm/dw/@sparticuz/chromium-min?label=%40sparticuz%2Fchromium-min\u0026style=for-the-badge)](https://www.npmjs.com/package/@sparticuz/chromium-min)\n[![Donate](https://img.shields.io/badge/donate-paypal-orange.svg?style=for-the-badge)](https://paypal.me/sparticuz)\n\n## Chromium for Serverless platforms\n\n[sparticuz/chrome-aws-lambda](https://github.com/sparticuz/chrome-aws-lambda) was originally forked from [alixaxel/chrome-aws-lambda#264](https://github.com/alixaxel/chrome-aws-lambda/pull/264).\nThe biggest difference, besides the chromium version, is the inclusion of some code from https://github.com/alixaxel/lambdafs, as well as dropping that as a dependency. Due to some changes in WebGL, the files in bin/swiftshader.tar.br need to be extracted to `/tmp` instead of `/tmp/swiftshader`. This necessitated changes in lambdafs.\n\nHowever, it quickly became difficult to maintain because of the pace of `puppeteer` updates. This package, `@sparticuz/chromium`, is not chained to `puppeteer` versions, but also does not include the overrides and hooks that the original package contained. It is only `chromium`, as well as the special code needed to decompress the brotli package, and a set of predefined arguments tailored to serverless usage.\n\n## Install\n\n[`puppeteer` ships with a preferred version of `chromium`](https://pptr.dev/faq/#q-why-doesnt-puppeteer-vxxx-work-with-chromium-vyyy). In order to figure out what version of `@sparticuz/chromium` you will need, please visit [Puppeteer's Chromium Support page](https://pptr.dev/chromium-support).\n\n\u003e For example, as of today, the latest version of `puppeteer` is `18.0.5`. The latest version of `chromium` stated on `puppeteer`'s support page is `106.0.5249.0`. So you need to install `@sparticuz/chromium@106`.\n\n```shell\n# Puppeteer or Playwright is a production dependency\nnpm install --save puppeteer-core@$PUPPETEER_VERSION\n# @sparticuz/chromium can be a DEV dependency IF YOU ARE USING A LAYER, if you are not using a layer, use as a production dependency!\nnpm install --save-dev @sparticuz/chromium@$CHROMIUM_VERSION\n```\n\nIf your vendor does not allow large deploys (`chromium.br` is 50+ MB), you'll need to host the `chromium-v#-pack.tar` separately and use the [`@sparticuz/chromium-min` package](https://github.com/Sparticuz/chromium#-min-package).\n\n```shell\nnpm install --save @sparticuz/chromium-min@$CHROMIUM_VERSION\n```\n\nIf you wish to install an older version of Chromium, take a look at [@sparticuz/chrome-aws-lambda](https://github.com/Sparticuz/chrome-aws-lambda#versioning) or [@alixaxel/chrome-aws-lambda](https://github.com/alixaxel/chrome-aws-lambda).\n\n## Versioning\n\nThe @sparticuz/chromium version schema is as follows:\n`MajorChromiumVersion.MinorChromiumIncrement.@Sparticuz/chromiumPatchLevel`\n\nBecause this package follows Chromium's releases, it does NOT follow semantic versioning. **Breaking changes can occur with the 'patch' level.** Please check the release notes for information on breaking changes.\n\n## Usage\n\nThis package works with all the currently supported AWS Lambda Node.js runtimes out of the box.\n\n```javascript\nconst test = require(\"node:test\");\nconst puppeteer = require(\"puppeteer-core\");\nconst chromium = require(\"@sparticuz/chromium\");\n\n// Optional: If you'd like to disable webgl, true is the default.\nchromium.setGraphicsMode = false;\n\n// Optional: Load any fonts you need. Open Sans is included by default in AWS Lambda instances\nawait chromium.font(\n  \"https://raw.githack.com/googlei18n/noto-emoji/master/fonts/NotoColorEmoji.ttf\"\n);\n\ntest(\"Check the page title of example.com\", async (t) =\u003e {\n  const browser = await puppeteer.launch({\n    args: chromium.args,\n    defaultViewport: chromium.defaultViewport,\n    executablePath: await chromium.executablePath(),\n    headless: chromium.headless,\n  });\n\n  const page = await browser.newPage();\n  await page.goto(\"https://example.com\");\n  const pageTitle = await page.title();\n  await browser.close();\n\n  assert.strictEqual(pageTitle, \"Example Domain\");\n});\n```\n\n### Usage with Playwright\n\n```javascript\nconst test = require(\"node:test\");\n// Need to rename playwright's chromium object to something else\nconst { chromium: playwright } = require(\"playwright-core\");\nconst chromium = require(\"@sparticuz/chromium\");\n\ntest(\"Check the page title of example.com\", async (t) =\u003e {\n  const browser = await playwright.launch({\n    args: chromium.args,\n    executablePath: await chromium.executablePath(),\n    headless: chromium.headless,\n  });\n\n  const context = await browser.newContext();\n  const page = await context.newPage();\n  await page.goto(\"https://example.com\");\n  const pageTitle = await page.title();\n  await browser.close();\n\n  assert.strictEqual(pageTitle, \"Example Domain\");\n});\n```\n\nYou should allocate at least 512 MB of RAM to your instance, however 1600 MB (or more) is recommended.\n\n### -min package\n\nThe -min package DOES NOT include the chromium brotli files. There are a few instances where this is useful. Primarily, this is useful when your host has file size limits.\n\nTo use the -min package please install the `@sparticuz/chromium-min` package.\n\nWhen using the -min package, you need to specify the location of the brotli files.\n\nIn this example, /opt/chromium contains all the brotli files\n\n```\n/opt\n  /chromium\n    /aws.tar.br\n    /chromium.br\n    /swiftshader.tar.br\n```\n\n```javascript\nconst browser = await puppeteer.launch({\n  args: chromium.args,\n  defaultViewport: chromium.defaultViewport,\n  executablePath: await chromium.executablePath(\"/opt/chromium\"),\n  headless: chromium.headless,\n});\n```\n\nIn the following example, https://www.example.com/chromiumPack.tar contains all the brotli files. Generally, this would be a location on S3, or another very fast downloadable location, that is in close proximity to your function's execution location.\n\nOn the initial iteration, `@sparticuz/chromium` will download the pack tar file, untar the files to `/tmp/chromium-pack`, then will un-brotli the `chromium` binary to `/tmp/chromium`. The following iterations will see that `/tmp/chromium` exists and will use the already downloaded files.\n\nThe latest chromium-pack.tar file will be on the latest [release](https://github.com/Sparticuz/chromium/releases).\n\n```javascript\nconst browser = await puppeteer.launch({\n  args: chromium.args,\n  defaultViewport: chromium.defaultViewport,\n  executablePath: await chromium.executablePath(\n    \"https://www.example.com/chromiumPack.tar\"\n  ),\n  headless: chromium.headless,\n});\n```\n\n### Examples\n\nHere are some example projects and help with other services\n\n- [Production Dependency](https://github.com/Sparticuz/chromium/tree/master/examples/production-dependency)\n- [Serverless Framework with Lambda Layer](https://github.com/Sparticuz/chromium/tree/master/examples/serverless-with-lambda-layer)\n- [Serverless Framework with Pre-existing Lambda Layer](https://github.com/Sparticuz/chromium/tree/master/examples/serverless-with-preexisting-lambda-layer)\n- [Chromium-min](https://github.com/Sparticuz/chromium/tree/master/examples/remote-min-binary)\n- [AWS SAM](https://github.com/Sparticuz/chromium/tree/master/examples/aws-sam)\n- [Webpack](https://github.com/Sparticuz/chromium/issues/24#issuecomment-1343196897)\n- [Netlify](https://github.com/Sparticuz/chromium/issues/24#issuecomment-1414107620)\n\n### Running Locally \u0026 Headless/Headful mode\n\nThis version of `chromium` is built using the `headless.gn` build variables, which does not even include a GUI. Also, this package does not include an ARM version yet, which means it will not work on any M Series Apple products. If you need to test your code using a headful or ARM version, please use your locally installed version of `chromium/chrome`, or you may use the `puppeteer` provided version. Users have reported installing `rosetta` on MacOS will also work.\n\n```shell\nnpx @puppeteer/browsers install chromium@latest --path /tmp/localChromium\n```\n\nFor more information on installing a specific version of `chromium`, check out [@puppeteer/browsers](https://www.npmjs.com/package/@puppeteer/browsers).\n\nFor example, you can set your code to use an ENV variable such as `IS_LOCAL`, then use if/else statements to direct puppeteer to the correct environment.\n\n```javascript\nconst browser = await puppeteer.launch({\n  args: process.env.IS_LOCAL ? puppeteer.defaultArgs() : chromium.args,\n  defaultViewport: chromium.defaultViewport,\n  executablePath: process.env.IS_LOCAL\n    ? \"/tmp/localChromium/chromium/linux-1122391/chrome-linux/chrome\"\n    : await chromium.executablePath(),\n  headless: process.env.IS_LOCAL ? false : chromium.headless,\n});\n```\n\n## Frequently asked questions\n\n### Can I use ARM or Graviton instances?\n\nAt this point, @sparticuz/chromium does not support ARM.\n\n- https://github.com/Sparticuz/chrome-aws-lambda/pull/11\n\n### Can I use Google Chrome or Chrome for Testing, what is chrome-headless-shell?\n\n`headless_shell` is a purpose built version of `chromium` specific for headless purposes. It does not include the GUI at all and only works via remote debugging connection. This is what this package is built on.\n\n- https://chromium.googlesource.com/chromium/src/+/lkgr/headless/README.md\n- https://source.chromium.org/chromium/chromium/src/+/main:headless/app/headless_shell.cc\n- https://developer.chrome.com/blog/chrome-headless-shell\n\n### Can I use the \"new\" Headless mode?\n\nFrom what I can tell, `headless_shell` does not seem to include support for the \"new\" headless mode.\n\n### It doesn't work with Webpack!?!\n\nTry marking this package as an external.\n\n- https://webpack.js.org/configuration/externals/\n\n### I'm experiencing timeouts or failures closing Chromium\n\nThis is a common issue. Chromium sometimes opens up more pages than you ask for. You can try the following\n\n```typescript\nfor (const page of await browser.pages()) {\n  await page.close();\n}\nawait browser.close();\n```\n\nYou can also try the following if one of the calls is hanging for some reason.\n\n```typescript\nawait Promise.race([browser.close(), browser.close(), browser.close()]);\n```\n\nAlways `await browser.close()`, even if your script is returning an error.\n\n### `BrowserContext` isn't working properly (Target.closed)\n\nYou may not be able to create a new context, you can try to use the default context as seen in this patch: https://github.com/Sparticuz/chromium/issues/298\n\n### Do I need to use @sparticuz/chromium?\n\nThis package is designed to be run on a vanilla Lambda instance. If you are using a dockerfile to publish your code to Lambda, it may be a better idea to install `chromium` and it's dependencies from the distribution's repositories.\n\n### I need Accessible pdf files\n\nThis is due to the way @sparticuz/chromium is built. If you require accessible pdf's, you'll need to\nrecompile chromium yourself with the following patch. You can then use that binary with @sparticuz/chromium-min.\n\n_Note_: This will increase the time required to generate a PDF.\n\n```patch\ndiff --git a/_/ansible/plays/chromium.yml b/_/ansible/plays/chromium.yml\nindex b42c740..49111d7 100644\n--- a/_/ansible/plays/chromium.yml\n+++ b/_/ansible/plays/chromium.yml\n@@ -249,8 +249,9 @@\n           blink_symbol_level = 0\n           dcheck_always_on = false\n           disable_histogram_support = false\n-          enable_basic_print_dialog = false\n           enable_basic_printing = true\n+          enable_pdf = true\n+          enable_tagged_pdf = true\n           enable_keystone_registration_framework = false\n           enable_linux_installer = false\n           enable_media_remoting = false\n```\n\n## Fonts\n\nThe Amazon Linux 2 AWS Lambda runtime is not provisioned with any font faces.\n\nBecause of this, this package ships with [Open Sans](https://fonts.google.com/specimen/Open+Sans), which supports the following scripts:\n\n- Latin\n- Greek\n- Cyrillic\n\nTo provision additional fonts, simply call the `font()` method with an absolute path or URL:\n\n```typescript\nawait chromium.font(\"/var/task/fonts/NotoColorEmoji.ttf\");\n// or\nawait chromium.font(\n  \"https://raw.githack.com/googlei18n/noto-emoji/master/fonts/NotoColorEmoji.ttf\"\n);\n```\n\n\u003e `Noto Color Emoji` (or similar) is needed if you want to [render emojis](https://getemoji.com/).\n\n\u003e For URLs, it's recommended that you use a CDN, like [raw.githack.com](https://raw.githack.com/) or [gitcdn.xyz](https://gitcdn.xyz/).\n\nThis method should be invoked _before_ launching Chromium.\n\n---\n\nAlternatively, it's also possible to provision fonts via AWS Lambda Layers.\n\nSimply create a directory named `.fonts` or `fonts` and place any font faces you want there:\n\n```\n.fonts\n├── NotoColorEmoji.ttf\n└── Roboto.ttf\n```\n\nAfterwards, you just need to ZIP the directory and upload it as a AWS Lambda Layer:\n\n```shell\nzip -9 --filesync --move --recurse-paths fonts.zip fonts/\n```\n\nFont directories are specified inside of the `fonts.conf` file found inside of the `bin/fonts.tar.br` file. These are the default folders:\n\n- `/var/task/.fonts`\n- `/var/task/fonts`\n- `/opt/fonts`\n- `/tmp/fonts`\n\n## Graphics\n\nBy default, this package uses `swiftshader`/`angle` to do CPU acceleration for WebGL. This is the only known way to enable WebGL on a serverless platform. You can disable WebGL by setting `chromium.setGraphiceMode = false;` _before_ launching Chromium. Disabling this will also skip the extract of the `bin/swiftshader.tar.br` file, which saves about a second of initial execution time. Disabling graphics is recommended if you know you are not using any WebGL.\n\n## API\n\n| Method / Property                   | Returns           | Description                                                                                                                                             |\n| ----------------------------------- | ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| `font(url)`                         | `Promise\u003cstring\u003e` | Provisions a custom font and returns its basename.                                                                                                      |\n| `args`                              | `Array\u003cstring\u003e`   | Provides a list of recommended additional [Chromium flags](https://github.com/GoogleChrome/chrome-launcher/blob/master/docs/chrome-flags-for-tools.md). |\n| `defaultViewport`                   | `Object`          | Returns a sensible default viewport for serverless.                                                                                                     |\n| `executablePath(location?: string)` | `Promise\u003cstring\u003e` | Returns the path the Chromium binary was extracted to.                                                                                                  |\n|                                     |\n| `headless`                          | `\"shell\"`         | Returns `\"shell\"` which is what `chrome-headless-shell` requires                                                                                        |\n| `setGraphicsMode`                   | `void`            | Sets the graphics mode to either `true` or `false`                                                                                                      |\n| `graphics`                          | `boolean`         | Returns a boolean depending on whether webgl is enabled or disabled                                                                                     |\n\n## Compiling\n\nTo compile your own version of Chromium check the [Ansible playbook instructions](_/ansible).\n\n## AWS Lambda Layer\n\n[Lambda Layers](https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html) is a convenient way to manage common dependencies between different Lambda Functions.\n\nThe following set of (Linux) commands will create a layer of this package:\n\n```shell\ngit clone --depth=1 https://github.com/sparticuz/chromium.git \u0026\u0026 \\\ncd chromium \u0026\u0026 \\\nmake chromium.zip\n```\n\nThe above will create a `chromium.zip` file, which can be uploaded to your Layers console. You can and should upload using the `aws cli`. (Replace the variables with your own values)\n\n```shell\nbucketName=\"chromiumUploadBucket\" \u0026\u0026 \\\nversionNumber=\"107\" \u0026\u0026 \\\naws s3 cp chromium.zip \"s3://${bucketName}/chromiumLayers/chromium${versionNumber}.zip\" \u0026\u0026 \\\naws lambda publish-layer-version --layer-name chromium --description \"Chromium v${versionNumber}\" --content \"S3Bucket=${bucketName},S3Key=chromiumLayers/chromium${versionNumber}.zip\" --compatible-runtimes nodejs --compatible-architectures x86_64\n```\n\nAlternatively, you can also download the layer artifact from one of our [releases](https://github.com/Sparticuz/chromium/releases).\n\nAccording to our benchmarks, it's 40% to 50% faster than using the off-the-shelf `puppeteer` bundle.\n\n## Migration from `chrome-aws-lambda`\n\n- Change the import or require to be `@sparticuz/chromium`\n- Add the import or require for `puppeteer-core`\n- Change the browser launch to use the native `puppeteer.launch()` function\n- Change the `executablePath` to be a function.\n\n```diff\n-const chromium = require('@sparticuz/chrome-aws-lambda');\n+const chromium = require(\"@sparticuz/chromium\");\n+const puppeteer = require(\"puppeteer-core\");\n\nexports.handler = async (event, context, callback) =\u003e {\n  let result = null;\n  let browser = null;\n\n  try {\n-    browser = await chromium.puppeteer.launch({\n+    browser = await puppeteer.launch({\n      args: chromium.args,\n      defaultViewport: chromium.defaultViewport,\n-      executablePath: await chromium.executablePath,\n+      executablePath: await chromium.executablePath(),\n      headless: chromium.headless,\n      ignoreHTTPSErrors: true,\n    });\n\n    let page = await browser.newPage();\n\n    await page.goto(event.url || 'https://example.com');\n\n    result = await page.title();\n  } catch (error) {\n    return callback(error);\n  } finally {\n    if (browser !== null) {\n      await browser.close();\n    }\n  }\n\n  return callback(null, result);\n};\n```\n\n## Compression\n\nThe Chromium binary is compressed using the Brotli algorithm.\n\nThis allows us to get the best compression ratio and faster decompression times.\n\n| File          | Algorithm | Level | Bytes     | MiB       | %          | Inflation  |\n| ------------- | --------- | ----- | --------- | --------- | ---------- | ---------- |\n| `chromium`    | -         | -     | 136964856 | 130.62    | -          | -          |\n| `chromium.gz` | Gzip      | 1     | 51662087  | 49.27     | 62.28%     | 1.035s     |\n| `chromium.gz` | Gzip      | 2     | 50438352  | 48.10     | 63.17%     | 1.016s     |\n| `chromium.gz` | Gzip      | 3     | 49428459  | 47.14     | 63.91%     | 0.968s     |\n| `chromium.gz` | Gzip      | 4     | 47873978  | 45.66     | 65.05%     | 0.950s     |\n| `chromium.gz` | Gzip      | 5     | 46929422  | 44.76     | 65.74%     | 0.938s     |\n| `chromium.gz` | Gzip      | 6     | 46522529  | 44.37     | 66.03%     | 0.919s     |\n| `chromium.gz` | Gzip      | 7     | 46406406  | 44.26     | 66.12%     | 0.917s     |\n| `chromium.gz` | Gzip      | 8     | 46297917  | 44.15     | 66.20%     | 0.916s     |\n| `chromium.gz` | Gzip      | 9     | 46270972  | 44.13     | 66.22%     | 0.968s     |\n| `chromium.gz` | Zopfli    | 10    | 45089161  | 43.00     | 67.08%     | 0.919s     |\n| `chromium.gz` | Zopfli    | 20    | 45085868  | 43.00     | 67.08%     | 0.919s     |\n| `chromium.gz` | Zopfli    | 30    | 45085003  | 43.00     | 67.08%     | 0.925s     |\n| `chromium.gz` | Zopfli    | 40    | 45084328  | 43.00     | 67.08%     | 0.921s     |\n| `chromium.gz` | Zopfli    | 50    | 45084098  | 43.00     | 67.08%     | 0.935s     |\n| `chromium.br` | Brotli    | 0     | 55401211  | 52.83     | 59.55%     | 0.778s     |\n| `chromium.br` | Brotli    | 1     | 54429523  | 51.91     | 60.26%     | 0.757s     |\n| `chromium.br` | Brotli    | 2     | 46436126  | 44.28     | 66.10%     | 0.659s     |\n| `chromium.br` | Brotli    | 3     | 46122033  | 43.99     | 66.33%     | 0.616s     |\n| `chromium.br` | Brotli    | 4     | 45050239  | 42.96     | 67.11%     | 0.692s     |\n| `chromium.br` | Brotli    | 5     | 40813510  | 38.92     | 70.20%     | **0.598s** |\n| `chromium.br` | Brotli    | 6     | 40116951  | 38.26     | 70.71%     | 0.601s     |\n| `chromium.br` | Brotli    | 7     | 39302281  | 37.48     | 71.30%     | 0.615s     |\n| `chromium.br` | Brotli    | 8     | 39038303  | 37.23     | 71.50%     | 0.668s     |\n| `chromium.br` | Brotli    | 9     | 38853994  | 37.05     | 71.63%     | 0.673s     |\n| `chromium.br` | Brotli    | 10    | 36090087  | 34.42     | 73.65%     | 0.765s     |\n| `chromium.br` | Brotli    | 11    | 34820408  | **33.21** | **74.58%** | 0.712s     |\n\n## Backers\n\nThank you for your support!\n\n[![Munawwar](https://avatars.githubusercontent.com/Munawwar?size=100)](https://github.com/munawwar)\n[![syntaxfm](https://avatars.githubusercontent.com/syntaxfm?size=100)](https://github.com/syntaxfm)\n[![th3madhack3r](https://avatars.githubusercontent.com/th3madhack3r?size=100)](https://github.com/th3madhack3r)\n\n### Past\n\n![C2BB](https://avatars.githubusercontent.com/C2BB?size=30)\n![acchou](https://avatars.githubusercontent.com/acchou?size=30)\n![infr](https://avatars.githubusercontent.com/infr?size=30)\n![aarmora](https://avatars.githubusercontent.com/aarmora?size=30)\n![azymnis](https://avatars.githubusercontent.com/azymnis?size=30)\n![mushilabs](https://avatars.githubusercontent.com/mushilabs?size=30)\n![omgovich](https://avatars.githubusercontent.com/omgovich?size=30)\n\u003cimg src=\"https://avatars.githubusercontent.com/kuda1992\" width=\"30\" /\u003e\n![jlee512](https://avatars.githubusercontent.com/jlee512?size=30)\n![swain](https://avatars.githubusercontent.com/swain?size=30)\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FSparticuz%2Fchromium","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FSparticuz%2Fchromium","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FSparticuz%2Fchromium/lists"}