Script Modules
schema_version: 1 id: developer-script-modules-overview slug: /developer/script-modules/ title: Script Modules section: Developer topic: Script Modules audience: plugin, theme, and block developers status: source-backed-draft review_state: needs-human-review source_set: script-modules-pilot source_commit: 58f02a0278b49f35436ecd14a73a9701f1a115ef source_paths:
- src/wp-includes/script-modules.php
- src/wp-includes/class-wp-script-modules.php
- src/wp-includes/assets/script-modules-packages.php
generated_by: technical-docs-agent-compatible pilot slice
generation_note: Prepared from the committed Script Modules pilot recipe and public WordPress Core source; not a full WP Codebox runtime corpus run.
generated_at: 2026-06-16T16:38:25Z
nav:
label: Script Modules
order: 10
search:
weight: 1.0
keywords:
- script modules
- ES modules
- import map
- modulepreload
Script Modules are WordPress’s native API for loading JavaScript ES modules. Use them when your code is authored as modules, imports other modules by identifier, or needs WordPress to build the page’s import map and module preload tags.
Classic scripts and Script Modules are different loading systems. Classic scripts are registered with script handles and printed as normal script tags. Script Modules are registered with module identifiers and printed as type="module" scripts, import maps, and rel="modulepreload" links.
When To Use Script Modules
Use Script Modules for JavaScript that imports or exports ES modules, depends on a WordPress module such as @wordpress/interactivity, or should participate in the browser module graph.
Use classic scripts for JavaScript that expects the traditional WordPress script dependency system, global variables, or non-module script loading.
The Core Workflow
Register a module with wp_register_script_module() when you want WordPress to know about the module without loading it immediately. Enqueue a module with wp_enqueue_script_module() when the page needs that module. WordPress then resolves dependencies, prints import-map entries for dependencies, preloads static dependencies, and prints enqueued modules as module scripts.
add_action( 'wp_enqueue_scripts', function () {
wp_register_script_module(
'my-plugin/view',
plugins_url( 'assets/view.js', __FILE__ ),
array(
array( 'id' => '@wordpress/interactivity', 'import' => 'static' ),
),
'1.0.0'
);
wp_enqueue_script_module( 'my-plugin/view' );
} );What WordPress Prints
For enqueued modules, WordPress can print:
- script modules
- ES modules
- import map
- modulepreload
Pilot Pages
- script modules
- ES modules
- import map
- modulepreload
Review Status
This pilot section is a source-backed draft. It is intentionally small so reviewers can check the information architecture, navigation metadata, search metadata, source mapping, and rendering shape before the corpus expands.
Source evidence is recorded in content/_meta/source-map.json.