PHPackages                             automattic/jetpack-wp-build-polyfills - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. automattic/jetpack-wp-build-polyfills

ActiveJetpack-library[Utility &amp; Helpers](/categories/utility)

automattic/jetpack-wp-build-polyfills
=====================================

Polyfills for WordPress Core packages not available in WP &lt; 7.0

01↑2900%1PHPCI failing

Since Mar 20Pushed 1mo agoCompare

[ Source](https://github.com/Automattic/jetpack-wp-build-polyfills)[ Packagist](https://packagist.org/packages/automattic/jetpack-wp-build-polyfills)[ RSS](/packages/automattic-jetpack-wp-build-polyfills/feed)WikiDiscussions trunk Synced 1mo ago

READMEChangelogDependenciesVersions (1)Used By (1)

Jetpack WP Build Polyfills
==========================

[](#jetpack-wp-build-polyfills)

Polyfills for WordPress Core packages not yet available in WordPress &lt; 7.0.

This package conditionally registers `@wordpress/*` packages as both classic scripts (IIFE) and script modules (ESM) when they are not already provided by Core or Gutenberg. It is intended to be used until WordPress 7.1 is released, at which point versions of WordPress &lt; 7.0 will no longer be supported and this package will no longer be needed.

Problem
-------

[](#problem)

WordPress 7.0 introduces several new packages (`@wordpress/boot`, `@wordpress/route`, `@wordpress/theme`, etc.) that plugins built with [`@wordpress/build`](https://github.com/WordPress/gutenberg/tree/trunk/packages/wp-build) depend on. On older WordPress versions, these packages are missing or ship incomplete implementations — for example, `wp-private-apis` has an allowlist that rejects `@wordpress/theme` and `@wordpress/route`, and `wp-notices` lacks component exports that `@wordpress/boot` requires.

This package provides those missing packages so that plugins using `@wordpress/build` can work on WordPress versions before 7.0.

What it polyfills
-----------------

[](#what-it-polyfills)

### Classic scripts (IIFE)

[](#classic-scripts-iife)

HandleSource packageForce-replaced on WP &lt; 7.0?`wp-notices``@wordpress/notices`Yes — missing component exports`wp-private-apis``@wordpress/private-apis`Yes — incomplete allowlist`wp-theme``@wordpress/theme`No — only registered if absent### Script modules (ESM)

[](#script-modules-esm)

Module IDSource package`@wordpress/boot``@wordpress/boot``@wordpress/route``@wordpress/route``@wordpress/a11y``@wordpress/a11y`Script modules use "first-wins" semantics — if Core or Gutenberg already registered the module, the polyfill is silently ignored.

How it works
------------

[](#how-it-works)

1. `WP_Build_Polyfills::register()` hooks into `wp_default_scripts` at **priority 20**, after Core (priority 0) and Gutenberg (priority 10) have registered their scripts.
2. For each polyfill, it checks whether a built asset file exists (`build/scripts/*/index.asset.php` or `build/modules/*/index.asset.php`).
3. For classic scripts, it checks whether the handle is already registered. Scripts marked as `force` are deregistered and re-registered with the polyfill version. Non-force scripts are skipped if already registered.
4. For script modules, it calls `wp_register_script_module()`, which silently ignores duplicates.

Usage
-----

[](#usage)

Call `register()` early in your plugin, specifying a consumer name and the polyfills you need:

```
use Automattic\Jetpack\WP_Build_Polyfills\WP_Build_Polyfills;

WP_Build_Polyfills::register( 'my-plugin', array(
    'wp-notices',
    'wp-private-apis',
    '@wordpress/boot',
    '@wordpress/route',
) );
```

Available handles are listed in `WP_Build_Polyfills::SCRIPT_HANDLES` and `WP_Build_Polyfills::MODULE_IDS`.

Multiple plugins can call `register()` — the hook is only added once, and all requested polyfills are merged. You can inspect which consumers requested which polyfills via `WP_Build_Polyfills::get_consumers()`.

The version threshold for force-replacements can be overridden with a third parameter:

```
WP_Build_Polyfills::register( 'my-plugin', array( 'wp-notices' ), '7.1' );
```

Boot module asset file
----------------------

[](#boot-module-asset-file)

Packages that use `@wordpress/build` to generate pages get a hardcoded reference to `build/modules/boot/index.min.asset.php` in the generated page templates. This file provides the classic script dependencies and version hash needed to bootstrap the page.

When `@wordpress/build` stops bundling the boot module (as planned in upcoming Gutenberg changes), this asset file will no longer be generated. This package builds its own boot module asset file, and ships a bin script (`provide-boot-asset-file`) that copies it to the expected location in the consumer's build directory.

Consuming packages should add `@automattic/jetpack-wp-build-polyfills` as a devDependency and call the script after `wp-build`:

```
"build:boot-proxy": "provide-boot-asset-file"
```

Development
-----------

[](#development)

```
# Build polyfills (development)
pnpm run build

# Build polyfills (production)
pnpm run build-production

# Run PHP tests
composer run test-php
```

###  Health Score

21

—

LowBetter than 19% of packages

Maintenance60

Regular maintenance activity

Popularity2

Limited adoption so far

Community13

Small or concentrated contributor base

Maturity11

Early-stage or recently created project

 Bus Factor2

2 contributors hold 50%+ of commits

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

### Community

Maintainers

![](https://www.gravatar.com/avatar/7c5869ecbb8e0eac7e8b8e0f3cf7bdd8d5fcdc4abc10a72281872c53f8639d44?d=identicon)[automattic](/maintainers/automattic)

---

Top Contributors

[![dhasilva](https://avatars.githubusercontent.com/u/8486249?v=4)](https://github.com/dhasilva "dhasilva (2 commits)")[![tbradsha](https://avatars.githubusercontent.com/u/32492176?v=4)](https://github.com/tbradsha "tbradsha (2 commits)")[![enejb](https://avatars.githubusercontent.com/u/115071?v=4)](https://github.com/enejb "enejb (1 commits)")[![kraftbj](https://avatars.githubusercontent.com/u/88897?v=4)](https://github.com/kraftbj "kraftbj (1 commits)")[![simison](https://avatars.githubusercontent.com/u/87168?v=4)](https://github.com/simison "simison (1 commits)")

### Embed Badge

![Health badge](/badges/automattic-jetpack-wp-build-polyfills/health.svg)

```
[![Health](https://phpackages.com/badges/automattic-jetpack-wp-build-polyfills/health.svg)](https://phpackages.com/packages/automattic-jetpack-wp-build-polyfills)
```

###  Alternatives

[mckenziearts/laravel-command

A simple Laravel package to provide artisan new commands

321.2k](/packages/mckenziearts-laravel-command)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
