{"id":16118022,"url":"https://github.com/wessberg/polyfiller","last_synced_at":"2025-10-09T19:07:52.179Z","repository":{"id":32458902,"uuid":"133969505","full_name":"wessberg/Polyfiller","owner":"wessberg","description":"Never worry about polyfills again.","archived":false,"fork":false,"pushed_at":"2024-06-23T16:20:14.000Z","size":15192,"stargazers_count":128,"open_issues_count":25,"forks_count":5,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-09-29T09:53:54.059Z","etag":null,"topics":["javascript","polyfill-app","polyfills","polyfills-as-a-service","shim","typescript","web","webservice"],"latest_commit_sha":null,"homepage":"https://polyfill.app","language":"JavaScript","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/wessberg.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE.md","code_of_conduct":"CODE_OF_CONDUCT.md","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":"wessberg","patreon":"wessberg"}},"created_at":"2018-05-18T15:04:15.000Z","updated_at":"2025-08-04T12:00:58.000Z","dependencies_parsed_at":"2024-10-25T17:07:27.592Z","dependency_job_id":"83d1bb25-b0df-4748-b776-bfbda6d684ca","html_url":"https://github.com/wessberg/Polyfiller","commit_stats":null,"previous_names":[],"tags_count":159,"template":false,"template_full_name":null,"purl":"pkg:github/wessberg/Polyfiller","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wessberg%2FPolyfiller","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wessberg%2FPolyfiller/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wessberg%2FPolyfiller/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wessberg%2FPolyfiller/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/wessberg","download_url":"https://codeload.github.com/wessberg/Polyfiller/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wessberg%2FPolyfiller/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279001982,"owners_count":26083243,"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","status":"online","status_checked_at":"2025-10-09T02:00:07.460Z","response_time":59,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["javascript","polyfill-app","polyfills","polyfills-as-a-service","shim","typescript","web","webservice"],"created_at":"2024-10-09T20:48:25.561Z","updated_at":"2025-10-09T19:07:52.128Z","avatar_url":"https://github.com/wessberg.png","language":"JavaScript","funding_links":["https://github.com/sponsors/wessberg","https://patreon.com/wessberg","https://www.patreon.com/bePatron?u=11315442"],"categories":[],"sub_categories":[],"readme":"\u003c!-- SHADOW_SECTION_LOGO_START --\u003e\n\n\u003cdiv\u003e\u003cimg alt=\"Logo\" src=\"https://raw.githubusercontent.com/wessberg/Polyfiller/master/documentation/asset/logo-color-text.png\" height=\"80\"   /\u003e\u003c/div\u003e\n\n\u003c!-- SHADOW_SECTION_LOGO_END --\u003e\n\n\u003c!-- SHADOW_SECTION_DESCRIPTION_SHORT_START --\u003e\n\n\u003e Never worry about polyfills again.\n\n\u003c!-- SHADOW_SECTION_DESCRIPTION_SHORT_END --\u003e\n\n\u003c!-- SHADOW_SECTION_BADGES_START --\u003e\n\n\u003ca href=\"https://npmcharts.com/compare/%40wessberg%2Fpolyfiller?minimal=true\"\u003e\u003cimg alt=\"Downloads per month\" src=\"https://img.shields.io/npm/dm/%40wessberg%2Fpolyfiller.svg\"    /\u003e\u003c/a\u003e\n\u003ca href=\"https://www.npmjs.com/package/%40wessberg%2Fpolyfiller\"\u003e\u003cimg alt=\"NPM version\" src=\"https://badge.fury.io/js/%40wessberg%2Fpolyfiller.svg\"    /\u003e\u003c/a\u003e\n\u003cimg alt=\"Dependencies\" src=\"https://img.shields.io/librariesio/github/wessberg%2Fpolyfiller.svg\"    /\u003e\n\u003ca href=\"https://github.com/wessberg/polyfiller/graphs/contributors\"\u003e\u003cimg alt=\"Contributors\" src=\"https://img.shields.io/github/contributors/wessberg%2Fpolyfiller.svg\"    /\u003e\u003c/a\u003e\n\u003ca href=\"https://github.com/prettier/prettier\"\u003e\u003cimg alt=\"code style: prettier\" src=\"https://img.shields.io/badge/code_style-prettier-ff69b4.svg\"    /\u003e\u003c/a\u003e\n\u003ca href=\"https://opensource.org/licenses/MIT\"\u003e\u003cimg alt=\"License: MIT\" src=\"https://img.shields.io/badge/License-MIT-yellow.svg\"    /\u003e\u003c/a\u003e\n\u003ca href=\"https://www.patreon.com/bePatron?u=11315442\"\u003e\u003cimg alt=\"Support on Patreon\" src=\"https://img.shields.io/badge/patreon-donate-green.svg\"    /\u003e\u003c/a\u003e\n\n\u003c!-- SHADOW_SECTION_BADGES_END --\u003e\n\n\u003c!-- SHADOW_SECTION_DESCRIPTION_LONG_START --\u003e\n\n## Description\n\n\u003c!-- SHADOW_SECTION_DESCRIPTION_LONG_END --\u003e\n\nThis is a web service that returns a minified and encoded bundle of _only_ the polyfills your users need.\nIt's like [polyfill.io](https://github.com/Financial-Times/polyfill-service), but it has additional polyfills such as [Web Components](https://developer.mozilla.org/en-US/docs/Web/Web_Components), [Pointer Events](https://developer.mozilla.org/en-US/docs/Web/API/Pointer_events), and much more.\nIt is also potentially faster since all unique polyfill combinations are cached in memory and returned immediately as requested.\nAnd, it supports different kinds of encodings for the smallest possible network bandwidth overhead, including [Brotli](https://github.com/google/brotli) and [Gzip](https://en.wikipedia.org/wiki/Gzip).\nThe web service is hosted and live at `https://polyfill.app/api`. It is **free** to use, and there are no quota limits. See the [Hosting](#hosting) section for details on how to host it yourself, if you want to.\n\n\u003c!-- SHADOW_SECTION_FEATURES_START --\u003e\n\n### Features\n\n\u003c!-- SHADOW_SECTION_FEATURES_END --\u003e\n\n- Sends only the polyfills your users actually need\n- Wide range of polyfills for modern technologies such as [Web Components](https://developer.mozilla.org/en-US/docs/Web/Web_Components), [Pointer Events](https://developer.mozilla.org/en-US/docs/Web/API/Pointer_events), [Intl (including `RelativeTimeFormat` and `ListFormat`)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl), and much more.\n- Automatic deduplication and insertion of missing dependencies of requested polyfills\n- Supports multiple environments, including Browsers, Workers, and even Node.\n- Brotli and Gzip compression\n- Intelligent disk- and memory caching for maximum speed and availability\n- Completely free\n\n\u003c!-- SHADOW_SECTION_FEATURE_IMAGE_START --\u003e\n\n\u003c!-- SHADOW_SECTION_FEATURE_IMAGE_END --\u003e\n\n## Supporters\n\nPolyfiller is kindly supported by and relies heavily on [BrowserStack](https://www.browserstack.com) for cross-browser testing to ensure maximum cross-browser compatibility.\n\n\u003ca href=\"https://www.browserstack.com\"\u003e\u003cimg alt=\"BrowserStack\" src=\"https://raw.githubusercontent.com/wessberg/Polyfiller/master/documentation/asset/browserstack.png\" height=\"60\" /\u003e\u003c/a\u003e\n\nPolyfiller is kindly supported by [JetBrains](https://www.jetbrains.com/?from=Polyfiller) for software development tools:\n\n\u003ca href=\"https://www.jetbrains.com/?from=Polyfiller\"\u003e\u003cimg alt=\"Supported by JetBrains\" src=\"https://raw.githubusercontent.com/wessberg/Polyfiller/master/documentation/asset/jetbrains.png\" height=\"150\" /\u003e\u003c/a\u003e\n\n\u003c!-- SHADOW_SECTION_BACKERS_START --\u003e\n\n## Backers\n\n[Become a sponsor/backer](https://github.com/wessberg/polyfiller?sponsor=1) and get your logo listed here.\n\n| \u003ca href=\"https://usebubbles.com\"\u003e\u003cimg alt=\"Bubbles\" src=\"https://uploads-ssl.webflow.com/5d682047c28b217055606673/5e5360be16879c1d0dca6514_icon-thin-128x128%402x.png\" height=\"70\"   /\u003e\u003c/a\u003e | \u003ca href=\"https://www.xerox.com\"\u003e\u003cimg alt=\"Xerox\" src=\"https://avatars.githubusercontent.com/u/9158512?s=200\u0026v=4\" height=\"70\"   /\u003e\u003c/a\u003e | \u003ca href=\"https://changelog.me\"\u003e\u003cimg alt=\"Trent Raymond\" src=\"https://avatars.githubusercontent.com/u/1509616?v=4\" height=\"70\"   /\u003e\u003c/a\u003e | \u003ca href=\"https://scrubtheweb.com\"\u003e\u003cimg alt=\"scrubtheweb\" src=\"https://avatars.githubusercontent.com/u/41668218?v=4\" height=\"70\"   /\u003e\u003c/a\u003e | \u003ca href=\"https://github.com/hjoelh\"\u003e\u003cimg alt=\"Joel\" src=\"https://avatars.githubusercontent.com/u/68335961?v=4\" height=\"70\"   /\u003e\u003c/a\u003e |\n| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- |\n| [Bubbles](https://usebubbles.com)\u003cbr\u003e\u003cstrong\u003eTwitter\u003c/strong\u003e: [@usebubbles](https://twitter.com/usebubbles)                                                                                | [Xerox](https://www.xerox.com)                                                                                                        | [Trent Raymond](https://changelog.me)                                                                                                  | [scrubtheweb](https://scrubtheweb.com)                                                                                                   | [Joel](https://github.com/hjoelh)                                                                                                   |\n\n### Patreon\n\n\u003ca href=\"https://www.patreon.com/bePatron?u=11315442\"\u003e\u003cimg alt=\"Patrons on Patreon\" src=\"https://img.shields.io/endpoint.svg?url=https%3A%2F%2Fshieldsio-patreon.vercel.app%2Fapi%3Fusername%3Dwessberg%26type%3Dpatrons\"  width=\"200\"  /\u003e\u003c/a\u003e\n\n\u003c!-- SHADOW_SECTION_BACKERS_END --\u003e\n\n\u003c!-- SHADOW_SECTION_TOC_START --\u003e\n\n## Table of Contents\n\n- [Description](#description)\n  - [Features](#features)\n- [Supporters](#supporters)\n- [Backers](#backers)\n  - [Patreon](#patreon)\n- [Table of Contents](#table-of-contents)\n- [Install](#install)\n  - [npm](#npm)\n  - [Yarn](#yarn)\n  - [pnpm](#pnpm)\n- [Usage](#usage)\n  - [Usage in a Browser](#usage-in-a-browser)\n- [Examples](#examples)\n  - [Example 1:](#example-1)\n  - [Example 2:](#example-2)\n  - [Example 3:](#example-3)\n- [Web Service API Reference](#web-service-api-reference)\n  - [`GET /api/polyfill?features=[...features]`](#get-apipolyfillfeaturesfeatures)\n    - [Parameter overview](#parameter-overview)\n    - [`feature`](#feature)\n    - [`Option`](#option)\n    - [The `force` option](#the-force-option)\n    - [The `locale` option for `Intl`](#the-locale-option-for-intl)\n    - [The `variant` option for `SystemJS`](#the-variant-option-for-systemjs)\n    - [Extra options for `Zone`](#extra-options-for-zone)\n    - [Extra options for `shadow-dom`](#extra-options-for-shadow-dom)\n  - [Usage in a Web Worker/Service Worker](#usage-in-a-web-workerservice-worker)\n  - [Usage in Node](#usage-in-node)\n- [Contributing](#contributing)\n- [Maintainers](#maintainers)\n- [FAQ](#faq)\n  - [What's the difference from polyfill.io](#whats-the-difference-from-polyfillio)\n  - [Hosting](#hosting)\n- [Logo](#logo)\n- [License](#license)\n  - [Feature names](#feature-names)\n\n\u003c!-- SHADOW_SECTION_TOC_END --\u003e\n\n\u003c!-- SHADOW_SECTION_INSTALL_START --\u003e\n\n## Install\n\n### npm\n\n```\n$ npm install @wessberg/polyfiller\n```\n\n### Yarn\n\n```\n$ yarn add @wessberg/polyfiller\n```\n\n### pnpm\n\n```\n$ pnpm add @wessberg/polyfiller\n```\n\n\u003c!-- SHADOW_SECTION_INSTALL_END --\u003e\n\n`Polyfiller` is already hosted at `https://polyfill.app/api` as a **free** web service, but you can install it, for example if\nyou want to host it yourself. See the [Hosting](#hosting) section for more details on that.\n\n\u003c!-- SHADOW_SECTION_USAGE_START --\u003e\n\n## Usage\n\n\u003c!-- SHADOW_SECTION_USAGE_END --\u003e\n\n`Polyfiller` can be used both in a _Browser_, _Worker_, and _Node_ environment. By default, the assumed environment is _Browser_.\n\n### Usage in a Browser\n\nPlace a `\u003cscript\u003e` tag inside your `index.html` file with a `src` pointing at `https://polyfill.app/api/polyfill`.\nIn the following example, polyfills for `ES2015` and `Shadow DOM` are requested:\n\n```html\n\u003c!-- An example of requesting polyfills for an ES2015 environment as well as Web Component support\n--\u003e\n\u003cscript crossorigin src=\"https://polyfill.app/api/polyfill?features=es,web-components\"\u003e\u003c/script\u003e\n```\n\nA targeted bundle will be returned that **only contains the specific polyfills the browser needs**!\nWhen a browser (or robot) visits your site, `Polyfiller` evaluates the user agent against [Caniuse](http://caniuse.com/) and decides what is supported and what isn't.\nIt is up to you to decide which polyfills you need, but the web service will automatically make sure to include every dependency of those polyfills, but only if the browser doesn't already support them.\nSee [this](#usage-in-a-web-workerservice-worker) or [this](#usage-in-node) section for details on how to use `Polyfiller` from Web Workers/ServiceWorkers and Node.\n\nYou can provide options to Polyfiller via query parameters such as `minify` and `sourcemap` to adjust the received payload to your liking.\n\n## Examples\n\n### Example 1:\n\nIn this example:\n\n- `es` polyfills those EcmaScript features that the browser doesn't support.\n- `intersection-observer` is polyfilled, _even if the browser supports it_, because it has the `force` option.\n- `intl` is polyfilled, with the inclusion of `Intl.ListFormat` and `Intl.RelativeTimeFormat`, if the browser doesn't support it, and the `en` locale data is included.\n- Sourcemaps are generated, and the bundle is minified\n\n```html\n\u003cscript crossorigin src=\"https://polyfill.app/api/polyfill?minify\u0026sourcemap\u0026features=es,intersection-observer|force,intl|locale=en\"\u003e\u003c/script\u003e\n```\n\n### Example 2:\n\nThis example shows how you can add support for [Web Components](https://developer.mozilla.org/en-US/docs/Web/Web_Components):\n\n- `template` polyfills the `HTMLTemplateElement` if the browser doesn't support it.\n- `shadow-dom` polyfills the `Shadow DOM` v1 specification if the browser doesn't support it.\n- `custom-elements` polyfills the `Custom Elements` v1 specification if the browser doesn't support it.\n\n```html\n\u003cscript crossorigin src=\"https://polyfill.app/api/polyfill?features=template,shadow-dom,custom-elements\"\u003e\u003c/script\u003e\n```\n\nFor your convenience, the `web-components` alias requests those three features.\n\n```html\n\u003cscript crossorigin src=\"https://polyfill.app/api/polyfill?features=web-components\"\u003e\u003c/script\u003e\n```\n\n### Example 3:\n\nFor your convenience, a few libraries are included that isn't strictly polyfills but are closely related to compatibility:\nIn this example:\n\n- `systemjs` Adds the [`SystemJS`](https://github.com/systemjs/systemjs) ES module loader. Useful if you target a browser that doesn't support ES-modules and want to use something like dynamic imports and code-splitting.\n- `regenerator-runtime` is added, which is what [babel](https://github.com/babel/) transpiles async functions and generator functions into if you don't target browsers that supports it.\n\n```html\n\u003cscript crossorigin src=\"https://polyfill.app/api/polyfill?features=systemjs,regenerator-runtime\"\u003e\u003c/script\u003e\n```\n\n## Web Service API Reference\n\n### `GET /api/polyfill?features=[...features]`\n\nRetrieves a bundle of polyfills.\n`Polyfiller` will use the incoming `Accept-Encoding` headers of the request to decide if the response should be `Brotli` encoded, `Gzip` encoded or not encoded at all.\n\n#### Parameter overview\n\n| Parameter   | Description                                                                                                                                                                                                                                                       |\n| ----------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| `features`  | A comma-separated string of all the `feature`s you want to include in your bundle (if required by the browser). Each `feature` may receive zero or more `option`s. Some `option`s are supported for all `feature`s while others only support specific `feature`s. |\n| `context`   | Can be either `window`, `worker`, or `node`. Use this to instruct `Polyfiller` to optimize polyfills for the given environment, as well as to exclude polyfills that doesn't support the given context.                                                           |\n| `sourcemap` | If given, or if it has a value of `true`, `Polyfiller` will be instructed to generate SourceMaps. Use this in development for better stack traces.                                                                                                                |\n| `minify`    | If given, `Polyfiller` will send back a minified Polyfill bundle.                                                                                                                                                                                                 |\n\n#### `feature`\n\nA `feature` has a _name_ and may receive zero or more `option`s.\nFor example, `intl` is a feature name, and so is `custom-elements`.\nSee the [Feature name](#feature-names) section for the full list of possible `feature` names.\n\n#### `Option`\n\nAn `option` is some data associated with a `feature`.\nIt is associated with a feature using the `|` (pipe) operator.\nFor example, here's how to associate the `force` option with a `feature`:\n`animation|force`.\n\nSome `option`s apply to all `feature`s while others only apply to specific `feature`s. For example:\n`intl|locale=en`\n\n#### The `force` option\n\nBy default, `feature`s that are already supported by the browser sending the request to the web service _won't_ be polyfilled. That would be a waste of network bandwidth and parsing cost for your users.\n_However_, sometimes you may want to _force_ a polyfill, even for browsers that support a `feature`.\nIn order to do so, associate the `force` option with a `feature`. For example:\n`animation|force`\nThis will force-apply a polyfill for `Web Animations`.\n\n#### The `locale` option for `Intl`\n\n**This option only works with `intl`, `intl.core`, `intl.list-format`, or `intl.relative-time-format`**.\nThe `Intl` family of polyfills rely on locale data for them to work. There are over 600 different locale files shipped. Sending all of them back over the network would take way too much bandwidth.\nInstead, if you just ask for the `intl`, `intl.core`, `intl.list-format`, or `intl.relative-time-format` features, they will be returned without any locale data.\n\nTo add one or more locales, use the `locale` option. For example:\n`intl|locale=en`\n\nThis will return a bundle of `Intl`-related polyfills along with locale data for the `en` (English) language code.\nYou can ask for as many you want by separating the locales with the `~` operator. For example:\n`intl|locale=en~da~fr`\nThis will return a bundle of `Intl`-related polyfills along with locale data for `en` (English), `da` (Danish), and `fr` (French).\n\n#### The `variant` option for `SystemJS`\n\nSystemJS comes in two base versions, a [minimal version called _s_](https://github.com/systemjs/systemjs#1-sjs-minimal-loader), and a [more feature-complete version called _system_](https://github.com/systemjs/systemjs#2-systemjs-loader).\nBy default, the _system_ variant will be used. You can decide which one to use with the `variant` option.\n\nFor example: `systemjs|variant=s` selects the _s_ variant, while `systemjs|variant=system` selects the _system_ variant.\n\n#### Extra options for `Zone`\n\n[Zone.js](https://github.com/angular/zone.js/), which is supported by Polyfiller, can be configured with some extra options to enhance its operation or support interoperability with more APIs:\n\n| Option           | Description                                                                                        |\n| ---------------- | -------------------------------------------------------------------------------------------------- |\n| `error`          | Generates more readable Stack traces when using Zone                                               |\n| `shadydom`       | Makes Zone compatible with the ShadyDOM polyfill.                                                  |\n| `mediaquery`     | Patches the [Media Query API](https://developer.mozilla.org/en-US/docs/Web/API/Window/matchMedia)  |\n| `fetch`          | Patches the [Fetch API](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API).               |\n| `resizeobserver` | Patches the [ResizeObserver API](https://developer.mozilla.org/en-US/docs/Web/API/ResizeObserver). |\n\n#### Extra options for `shadow-dom`\n\n| Option         | Description                                                                                                                                                                                                                                                                                         |\n| -------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| `experimental` | You can pass the `experimental` option to `shadow-dom` (or any of its aliases such as `web-components`) to base it on some experimental features that may reduce bugs in older browsers such as IE and Edge \u003c= 15.                                                                                  |\n| `lit`          | If you're going to be using [Lit](https://lit.dev/), you can also pass the `lit` option to `shadow-dom` (or any of its aliases such as `web-components`) to include its [polyfill support layer](https://lit.dev/docs/releases/upgrade/#load-polyfill-support-when-using-web-components-polyfills). |\n\n### Usage in a Web Worker/Service Worker\n\nYou can also request polyfills from a Worker. It is highly recommended that you pass in the [`context`](#the-context-option) query parameter with a value of `worker` to instruct `Polyfiller` to optimize polyfills for a Worker environment, as well as to\nnot include any polyfills that won't work in a Worker environment.\n\n```typescript\n// Provide a context query parameter with a value of 'worker' to avoid polyfills that doesn't support that environment\nimportScripts(\"https://polyfill.app/api/polyfill?features=es,intl,web-animations\u0026context=worker\");\n```\n\n### Usage in Node\n\nYou can also request polyfills from Node, if that's a thing you want to do. It is highly recommended that you pass in the [`context`](#parameter-overview) query parameter with a value of `node` to instruct `Polyfiller` to optimize polyfills for a Node environment, as well as to\nnot include any polyfills that won't work in a Node environment.\n\n```typescript\n(async () =\u003e {\n\t// Remember to provide a user agent header if you want anything meaningful back\n\tconst response = await fetch(\"https://polyfill.app/api/polyfill?features=intl\u0026context=node\");\n\tconst text = await response.text();\n\t// Apply the polyfills\n\tnew Function(text)();\n})();\n```\n\n\u003c!-- SHADOW_SECTION_CONTRIBUTING_START --\u003e\n\n## Contributing\n\nDo you want to contribute? Awesome! Please follow [these recommendations](./CONTRIBUTING.md).\n\n\u003c!-- SHADOW_SECTION_CONTRIBUTING_END --\u003e\n\n\u003c!-- SHADOW_SECTION_MAINTAINERS_START --\u003e\n\n## Maintainers\n\n| \u003ca href=\"mailto:frederikwessberg@hotmail.com\"\u003e\u003cimg alt=\"Frederik Wessberg\" src=\"https://avatars2.githubusercontent.com/u/20454213?s=460\u0026v=4\" height=\"70\"   /\u003e\u003c/a\u003e                                                                |\n| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| [Frederik Wessberg](mailto:frederikwessberg@hotmail.com)\u003cbr\u003e\u003cstrong\u003eTwitter\u003c/strong\u003e: [@FredWessberg](https://twitter.com/FredWessberg)\u003cbr\u003e\u003cstrong\u003eGithub\u003c/strong\u003e: [@wessberg](https://github.com/wessberg)\u003cbr\u003e_Lead Developer_ |\n\n\u003c!-- SHADOW_SECTION_MAINTAINERS_END --\u003e\n\n\u003c!-- SHADOW_SECTION_FAQ_START --\u003e\n\n## FAQ\n\n\u003c!-- SHADOW_SECTION_FAQ_END --\u003e\n\n### What's the difference from polyfill.io\n\nThese two services are very much alike. In fact, `Polyfiller` depends on the library behind [polyfill.io](https://github.com/Financial-Times/polyfill-service) for some of the polyfills!\n`Polyfiller` exists for two reasons:\n\n- A wider range of available polyfills such as Web Components, PointerEvents and Proxies\n- Deep integration with `Caniuse`. If you use something like `babel-preset-env` with a `browserslist` and you generate this automatically based on the features you want to support with a tool such as [browserslist-generator](https://www.npmjs.com/package/browserslist-generator), both syntax detection for transpiling, and feature detection for polyfilling will be seamlessly based on your `browserslist`.\n\n### Hosting\n\n`Polyfiller` is already hosted at `https://polyfill.app/api` as a **free** web service, but feel free to host it yourself.\nThe server is built with support for both HTTP2 and HTTP. The environment variable `HTTP2=[true|false]` decides whether a HTTP2 server will be hosted or not.\nIf you use a load balancer and something like `nginx` in a reverse proxy setup, please know that `nginx` doesn't support HTTP2 via its proxy module, so you have to use HTTP1.1 there. Thankfully, it is as easy as setting `HTTP2=false` before launching the server and setting `HTTPS=false`.\n\n## Logo\n\nAll credits go to [Andreas Mehlsen (@andreasbm)](https://github.com/andreasbm/) for the awesome logo design.\n\n\u003c!-- SHADOW_SECTION_LICENSE_START --\u003e\n\n## License\n\nMIT © [Frederik Wessberg](mailto:frederikwessberg@hotmail.com) ([@FredWessberg](https://twitter.com/FredWessberg)) ([Website](https://github.com/wessberg))\n\n\u003c!-- SHADOW_SECTION_LICENSE_END --\u003e\n\n### Feature names\n\nHere's a full list of all possible `feature` _names_.\nNote that these will be deduplicated. For example, if you request `es.object`, but also request `es`, `es.object` will only be included once as part of `es`.\nAnd, if you request `performance.now`, `date.now` will also be included since the polyfill depends on it. You don't have to worry about dependencies.\n\n**Bold**-formatted polyfills are _aliases_ for one or several other related `feature`s.\n\n- **`formdata`**\n  - `form-data`\n- **`requestidlecallback`**\n  - `request-idle-callback`\n- **`requestanimationframe`**\n  - `request-animation-frame`\n- **`es`**\n  - `es.promise`\n  - `es.object`\n  - `es.function`\n  - `es.array`\n  - `es.array-buffer`\n  - `es.string`\n  - `es.data-view`\n  - `es.regexp`\n  - `es.number`\n  - `es.math`\n  - `es.date`\n  - `es.symbol`\n  - `es.collections`\n  - `es.typed-array`\n  - `es.reflect`\n  - `es.global-this`\n- **`es2015`**\n  - `es`\n- **`es.promise`**\n  - `es.promise.constructor`\n  - `es.promise.any`\n  - `es.promise.all-settled`\n  - `es.promise.finally`\n- **`es.object`**\n  - `es.object.assign`\n  - `es.object.create`\n  - `es.object.define-getter`\n  - `es.object.define-setter`\n  - `es.object.entries`\n  - `es.object.from-entries`\n  - `es.object.get-own-property-descriptors`\n  - `es.object.lookup-getter`\n  - `es.object.lookup-setter`\n  - `es.object.values`\n  - `es.object.define-properties`\n  - `es.object.define-property`\n  - `es.object.freeze`\n  - `es.object.get-own-property-descriptor`\n  - `es.object.get-own-property-names`\n  - `es.object.get-prototype-of`\n  - `es.object.is-extensible`\n  - `es.object.is-frozen`\n  - `es.object.is-sealed`\n  - `es.object.is`\n  - `es.object.keys`\n  - `es.object.prevent-extensions`\n  - `es.object.seal`\n  - `es.object.set-prototype-of`\n  - `es.object.to-string`\n- **`es.function`**\n  - `es.function.bind`\n  - `es.function.name`\n- **`es.array`**\n  - `es.array.concat`\n  - `es.array.copy-within`\n  - `es.array.every`\n  - `es.array.flat`\n  - `es.array.flat-map`\n  - `es.array.fill`\n  - `es.array.filter`\n  - `es.array.find`\n  - `es.array.find-index`\n  - `es.array.for-each`\n  - `es.array.from`\n  - `es.array.includes`\n  - `es.array.index-of`\n  - `es.array.is-array`\n  - `es.array.iterator`\n  - `es.array.join`\n  - `es.array.last-index-of`\n  - `es.array.map`\n  - `es.array.of`\n  - `es.array.reduce`\n  - `es.array.reduce-right`\n  - `es.array.slice`\n  - `es.array.some`\n  - `es.array.sort`\n  - `es.array.species`\n  - `es.array.splice`\n  - `es.array.at`\n  - `es.array.find-last`\n  - `es.array.find-last-index`\n- **`es.array-buffer`**\n  - `es.array-buffer.constructor`\n  - `es.array-buffer.is-view`\n  - `es.array-buffer.slice`\n- **`es.string`**\n  - `es.string.anchor`\n  - `es.string.big`\n  - `es.string.blink`\n  - `es.string.bold`\n  - `es.string.code-point-at`\n  - `es.string.ends-with`\n  - `es.string.fixed`\n  - `es.string.fontcolor`\n  - `es.string.fontsize`\n  - `es.string.from-code-point`\n  - `es.string.includes`\n  - `es.string.italics`\n  - `es.string.iterator`\n  - `es.string.link`\n  - `es.string.match`\n  - `es.string.pad-end`\n  - `es.string.pad-start`\n  - `es.string.raw`\n  - `es.string.repeat`\n  - `es.string.search`\n  - `es.string.small`\n  - `es.string.split`\n  - `es.string.starts-with`\n  - `es.string.strike`\n  - `es.string.sub`\n  - `es.string.sup`\n  - `es.string.trim`\n  - `es.string.trim-start`\n  - `es.string.trim-end`\n  - `es.string.replace-all`\n  - `es.string.match-all`\n  - `es.string.at`\n- **`es.regexp`**\n  - `es.regexp.constructor`\n  - `es.regexp.flags`\n  - `es.regexp.to-string`\n- **`es.number`**\n  - `es.number.constructor`\n  - `es.number.epsilon`\n  - `es.number.is-finite`\n  - `es.number.is-integer`\n  - `es.number.is-nan`\n  - `es.number.is-safe-integer`\n  - `es.number.max-safe-integer`\n  - `es.number.min-safe-integer`\n  - `es.number.parse-float`\n  - `es.number.parse-int`\n  - `es.number.to-fixed`\n  - `es.number.to-precision`\n- **`es.math`**\n  - `es.math.acosh`\n  - `es.math.asinh`\n  - `es.math.atanh`\n  - `es.math.cbrt`\n  - `es.math.clz32`\n  - `es.math.cosh`\n  - `es.math.expm1`\n  - `es.math.fround`\n  - `es.math.hypot`\n  - `es.math.imul`\n  - `es.math.log1p`\n  - `es.math.log2`\n  - `es.math.log10`\n  - `es.math.sign`\n  - `es.math.sinh`\n  - `es.math.tanh`\n  - `es.math.trunc`\n- **`es.date`**\n  - `es.date.now`\n  - `es.date.to-iso-string`\n  - `es.date.to-json`\n  - `es.date.to-primitive`\n  - `es.date.to-string`\n- **`es.symbol`**\n  - `es.symbol.async-iterator`\n  - `es.symbol.has-instance`\n  - `es.symbol.is-concat-spreadable`\n  - `es.symbol.iterator`\n  - `es.symbol.constructor`\n  - `es.symbol.match`\n  - `es.symbol.match-all`\n  - `es.symbol.replace`\n  - `es.symbol.search`\n  - `es.symbol.species`\n  - `es.symbol.split`\n  - `es.symbol.to-primitive`\n  - `es.symbol.to-string-tag`\n  - `es.symbol.unscopables`\n  - `es.symbol.description`\n- **`es.collections`**\n  - `es.map`\n  - `es.weak-map`\n  - `es.set`\n  - `es.weak-set`\n- **`es.typed-array`**\n  - `es.typed-array.copy-within`\n  - `es.typed-array.every`\n  - `es.typed-array.fill`\n  - `es.typed-array.filter`\n  - `es.typed-array.find`\n  - `es.typed-array.find-index`\n  - `es.typed-array.float32-array`\n  - `es.typed-array.float64-array`\n  - `es.typed-array.for-each`\n  - `es.typed-array.from`\n  - `es.typed-array.includes`\n  - `es.typed-array.index-of`\n  - `es.typed-array.int8-array`\n  - `es.typed-array.int16-array`\n  - `es.typed-array.int32-array`\n  - `es.typed-array.iterator`\n  - `es.typed-array.join`\n  - `es.typed-array.last-index-of`\n  - `es.typed-array.map`\n  - `es.typed-array.of`\n  - `es.typed-array.reduce`\n  - `es.typed-array.reduce-right`\n  - `es.typed-array.reverse`\n  - `es.typed-array.set`\n  - `es.typed-array.slice`\n  - `es.typed-array.some`\n  - `es.typed-array.sort`\n  - `es.typed-array.subarray`\n  - `es.typed-array.to-locale-string`\n  - `es.typed-array.to-string`\n  - `es.typed-array.uint8-array`\n  - `es.typed-array.uint8-clamped-array`\n  - `es.typed-array.uint16-array`\n  - `es.typed-array.uint32-array`\n  - `es.typed-array.at`\n  - `es.typed-array.find-last`\n  - `es.typed-array.find-last-index`\n- **`es.reflect`**\n  - `es.reflect.apply`\n  - `es.reflect.construct`\n  - `es.reflect.define-property`\n  - `es.reflect.delete-property`\n  - `es.reflect.get`\n  - `es.reflect.get-own-property-descriptor`\n  - `es.reflect.get-prototype-of`\n  - `es.reflect.has`\n  - `es.reflect.is-extensible`\n  - `es.reflect.own-keys`\n  - `es.reflect.prevent-extensions`\n  - `es.reflect.set`\n  - `es.reflect.set-prototype-of`\n- **`dom.collections.iterable`**\n  - `dom.collections.iterator`\n  - `dom.collections.for-each`\n- **`intl`**\n  - `intl.date-time-format`\n  - `intl.display-names`\n  - `intl.get-canonical-locales`\n  - `intl.list-format`\n  - `intl.locale`\n  - `intl.number-format`\n  - `intl.plural-rules`\n  - `intl.relative-time-format`\n- **`animation`**\n  - `web-animations`\n- **`web-components`**\n  - `custom-elements`\n  - `shadow-dom`\n  - `template`\n- **`event`**\n  - `event.constructor`\n  - `event.focusin`\n  - `event.hashchange`\n- **`setimmediate`**\n  - `set-immediate`\n- **`globalthis`**\n  - `es.global-this`\n- **`global-this`**\n  - `es.global-this`\n- **`adopted-style-sheets`**\n  - `constructable-style-sheets`\n- **`structuredclone`**\n  - `structured-clone`\n- **`base64`**\n  - `atob`\n  - `btoa`\n- `systemjs`\n- `zone`\n- `performance.now`\n- `url`\n- `object-fit`\n- `console`\n- `blob`\n- `proxy`\n- `es.string.replace`\n- `pointer-event`\n- `xhr`\n- `fetch`\n- `regenerator-runtime`\n- `queryselector`\n- `document-fragment`\n- `node.parentelement`\n- `scroll-behavior`\n- `focus-visible`\n- `node.contains`\n- `window`\n- `document`\n- `class-list`\n- `dom-token-list`\n- `element`\n- `custom-event`\n- `event-source`\n- `get-computed-style`\n- `intersection-observer`\n- `mutation-observer`\n- `resize-observer`\n- `broadcast-channel`\n- `proto`\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwessberg%2Fpolyfiller","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwessberg%2Fpolyfiller","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwessberg%2Fpolyfiller/lists"}