{"id":319420,"date":"2026-06-02T17:44:47","date_gmt":"2026-06-02T17:44:47","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/asset-control\/"},"modified":"2026-06-04T18:27:37","modified_gmt":"2026-06-04T18:27:37","slug":"assetpilot","status":"publish","type":"plugin","link":"https:\/\/cn.wordpress.org\/plugins\/assetpilot\/","author":16591212,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"7.0","requires":"6.2","requires_php":"8.1","requires_plugins":null,"header_name":"AssetPilot - Granular control over frontend assets","header_author":"Amr Abdelkarem","header_description":"Granular control over frontend assets \u2014 disable, defer, async, preload, and conditional rules.","assets_banners_color":"eaf7f7","last_updated":"2026-06-04 18:27:37","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/amrabdelkarem.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":63,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"amrelarabi","date":"2026-06-04 18:27:37"}},"upgrade_notice":{"1.0.0":"<p>First public release. Scan a page, create a narrow rule, and test before applying site-wide conditions.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3558391,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3558391,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3558391,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3558391,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3558391,"resolution":"1","location":"assets","locale":"","width":1514,"height":821},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3558391,"resolution":"2","location":"assets","locale":"","width":1673,"height":732},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3558391,"resolution":"3","location":"assets","locale":"","width":1219,"height":622},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3558391,"resolution":"4","location":"assets","locale":"","width":1262,"height":688},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3558391,"resolution":"5","location":"assets","locale":"","width":1678,"height":551},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3558391,"resolution":"6","location":"assets","locale":"","width":1509,"height":591},"screenshot-7.png":{"filename":"screenshot-7.png","revision":3558391,"resolution":"7","location":"assets","locale":"","width":1737,"height":538},"screenshot-8.png":{"filename":"screenshot-8.png","revision":3558391,"resolution":"8","location":"assets","locale":"","width":821,"height":690}},"screenshots":{"1":"Dashboard \u2014 scan progress and quick entry to asset tools","2":"Assets Explorer \u2014 scripts and styles found on a scanned URL","3":"Create Rule \u2014 choose action, asset, and conditions in steps","4":"Conditions \u2014 page, URL, device, WooCommerce, and more","5":"Bulk rule \u2014 apply one action to multiple handles","6":"Dependency graph \u2014 see what depends on what before disabling","7":"Recommendations \u2014 suggested optimizations from your scans","8":"Settings \u2014 Safe Mode, logging, and runtime status"}},"plugin_section":[],"plugin_tags":[23130,23325,5896,247,2864],"plugin_category":[52,54],"plugin_contributors":[213469],"plugin_business_model":[],"class_list":["post-319420","plugin","type-plugin","status-publish","hentry","plugin_tags-defer","plugin_tags-dequeue","plugin_tags-page-speed","plugin_tags-performance","plugin_tags-scripts","plugin_category-performance","plugin_category-security-and-spam-protection","plugin_contributors-amrelarabi","plugin_committers-amrelarabi"],"banners":{"banner":"https:\/\/ps.w.org\/assetpilot\/assets\/banner-772x250.png?rev=3558391","banner_2x":"https:\/\/ps.w.org\/assetpilot\/assets\/banner-1544x500.png?rev=3558391","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/assetpilot\/assets\/icon-128x128.png?rev=3558391","icon_2x":"https:\/\/ps.w.org\/assetpilot\/assets\/icon-256x256.png?rev=3558391","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/assetpilot\/assets\/screenshot-1.png?rev=3558391","caption":"Dashboard \u2014 scan progress and quick entry to asset tools"},{"src":"https:\/\/ps.w.org\/assetpilot\/assets\/screenshot-2.png?rev=3558391","caption":"Assets Explorer \u2014 scripts and styles found on a scanned URL"},{"src":"https:\/\/ps.w.org\/assetpilot\/assets\/screenshot-3.png?rev=3558391","caption":"Create Rule \u2014 choose action, asset, and conditions in steps"},{"src":"https:\/\/ps.w.org\/assetpilot\/assets\/screenshot-4.png?rev=3558391","caption":"Conditions \u2014 page, URL, device, WooCommerce, and more"},{"src":"https:\/\/ps.w.org\/assetpilot\/assets\/screenshot-5.png?rev=3558391","caption":"Bulk rule \u2014 apply one action to multiple handles"},{"src":"https:\/\/ps.w.org\/assetpilot\/assets\/screenshot-6.png?rev=3558391","caption":"Dependency graph \u2014 see what depends on what before disabling"},{"src":"https:\/\/ps.w.org\/assetpilot\/assets\/screenshot-7.png?rev=3558391","caption":"Recommendations \u2014 suggested optimizations from your scans"},{"src":"https:\/\/ps.w.org\/assetpilot\/assets\/screenshot-8.png?rev=3558391","caption":"Settings \u2014 Safe Mode, logging, and runtime status"}],"raw_content":"<!--section=description-->\n<p><strong>AssetPilot<\/strong> helps you speed up WordPress by controlling <strong>which scripts and styles load on which pages<\/strong> \u2014 without guessing handle names in <code>functions.php<\/code>.<\/p>\n\n<p>Scan a real page URL, see every enqueued asset (and many from the HTML), then create rules to <strong>disable<\/strong>, <strong>defer<\/strong>, <strong>async<\/strong>, <strong>preload<\/strong>, or set <strong>fetch priority<\/strong> \u2014 only where your conditions match (homepage, shop, mobile, logged-in users, specific URLs, and more).<\/p>\n\n<p>Built for site owners who want measurable wins and for developers who want <strong>conditional dequeue with guardrails<\/strong>: validation warnings, dependency insight, scan history, and <strong>Safe Mode<\/strong> if something breaks.<\/p>\n\n<h4>Why AssetPilot instead of a simple \u201cunload\u201d plugin?<\/h4>\n\n<ul>\n<li><strong>See before you change<\/strong> \u2014 scan a URL and browse assets with origin, size, and usage hints.<\/li>\n<li><strong>Rules, not one-off hacks<\/strong> \u2014 reusable conditions (page type, archive, WooCommerce views, device, auth, URL).<\/li>\n<li><strong>Bulk actions<\/strong> \u2014 one rule for many handles (e.g. a plugin\u2019s scripts everywhere except checkout).<\/li>\n<li><strong>Safer changes<\/strong> \u2014 conflict checks, impact preview, optional verification, automatic runtime pause after repeated errors.<\/li>\n<li><strong>Stay in control<\/strong> \u2014 dependency graph, recommendations, debug logs, and Safe Mode.<\/li>\n<\/ul>\n\n<h4>What you can do<\/h4>\n\n<ul>\n<li>Disable scripts and styles you do not need on specific views<\/li>\n<li>Defer or async JavaScript to reduce render-blocking work<\/li>\n<li>Preload critical scripts, styles, fonts, and images<\/li>\n<li>Set <code>fetchpriority<\/code> on images and preloads<\/li>\n<li>Target by singular page, post type, archive, URL fragment, query string, device, login state, user role, WooCommerce page type, and scan URL<\/li>\n<li>Create <strong>bulk rules<\/strong> from the asset list<\/li>\n<li>Review <strong>optimization recommendations<\/strong> from scan data<\/li>\n<li>Explore <strong>asset dependencies<\/strong> in a visual graph<\/li>\n<li>Keep <strong>scan history<\/strong> and compare what changed over time<\/li>\n<\/ul>\n\n<h4>Typical use cases<\/h4>\n\n<ul>\n<li>Stop a plugin\u2019s CSS\/JS on pages where it is not used (blog posts, landing pages, archives)<\/li>\n<li>Defer non-critical scripts on catalog pages while keeping checkout intact<\/li>\n<li>Preload hero fonts or LCP images on key templates only<\/li>\n<li>Audit what Elementor, WooCommerce, or form plugins actually enqueue before tightening rules<\/li>\n<\/ul>\n\n<h4>How it works<\/h4>\n\n<ol>\n<li>Open <strong>AssetPilot \u2192 Assets<\/strong> and scan a page (your homepage, a product page, a form page, etc.).<\/li>\n<li>Pick an asset (or select several for a bulk rule).<\/li>\n<li>Choose an action and <strong>conditions<\/strong> (where the rule applies).<\/li>\n<li>Review validation and impact, then save.<\/li>\n<li>Visit the front end \u2014 use <strong>Safe Mode<\/strong> anytime you need to disable all runtime rules instantly.<\/li>\n<\/ol>\n\n<p>The block editor includes an <strong>AssetPilot<\/strong> sidebar on supported setups so you can jump from a post to asset management with context.<\/p>\n\n<h4>Requirements<\/h4>\n\n<ul>\n<li>WordPress 6.2+<\/li>\n<li>PHP 8.1+<\/li>\n<li>Administrator access to configure rules<\/li>\n<\/ul>\n\n<p>Frontend runtime changes apply to <strong>public site views<\/strong>, not the WordPress admin dashboard.<\/p>\n\n<h3>Getting started<\/h3>\n\n<p><strong>First rule in a few minutes<\/strong><\/p>\n\n<ol>\n<li><strong>Assets<\/strong> \u2192 enter your site homepage URL \u2192 scan.<\/li>\n<li>Find a script or style from a plugin you suspect is unnecessary on the homepage.<\/li>\n<li>Click to create a rule \u2192 choose <strong>Disable<\/strong> (or <strong>Defer<\/strong> for scripts).<\/li>\n<li>Set a condition such as \u201cthis scan URL only\u201d or \u201cnon-WooCommerce pages\u201d if you are testing carefully.<\/li>\n<li>Save, open the homepage in a private window, and confirm the site still works.<\/li>\n<\/ol>\n\n<p>Use <strong>Recommendations<\/strong> after a few scans for ideas (duplicate libraries, large files, low usage patterns).<\/p>\n\n<p><strong>Create Rule<\/strong> is opened from assets or recommendations \u2014 it is the guided wizard for actions, conditions, validation, and review.<\/p>\n\n<h3>Safe Mode<\/h3>\n\n<p>If the site looks wrong after applying rules, enable Safe Mode while logged in as an administrator:<\/p>\n\n<pre><code>\/wp-admin\/?assetpilot-safe-mode=1\n<\/code><\/pre>\n\n<p>Safe Mode turns off <strong>all frontend runtime rule changes<\/strong> for the whole site. The admin UI, REST API, scanning, and rule editing still work. Clear any page cache after enabling if changes seem to stick.<\/p>\n\n<p>If repeated frontend fatals occur, AssetPilot <strong>pauses runtime rules for 30 minutes<\/strong> automatically. Resume early from <strong>Settings<\/strong> or:<\/p>\n\n<pre><code>\/wp-admin\/admin.php?page=assetpilot-settings&amp;assetpilot-resume-runtime=1&lt;h3&gt;Development&lt;\/h3&gt;\n<\/code><\/pre>\n\n<p><strong>Source repository:<\/strong> https:\/\/github.com\/amrelarabi\/assetpilot<\/p>\n\n<p>Human-readable UI source is in <code>assets\/src\/<\/code>. Production bundles in <code>assets\/build\/<\/code> are built with <a href=\"https:\/\/www.npmjs.com\/package\/@wordpress\/scripts\">@wordpress\/scripts<\/a>.<\/p>\n\n<p><strong>Build (contributors only):<\/strong><\/p>\n\n<ol>\n<li><code>npm install<\/code><\/li>\n<li><code>npm run build<\/code><\/li>\n<\/ol>\n\n<p>PHP lives under <code>includes\/<\/code> (Composer PSR-4, <code>AssetControl\\<\/code> namespace).<\/p>\n\n<p><strong>Third-party frontend libraries:<\/strong> <code>@xyflow\/react<\/code> (dependency graph), <code>react-select<\/code> (rule builder fields).<\/p>\n\n<p><strong>Extension hooks:<\/strong> <code>assetpilot_rest_register<\/code>, <code>assetpilot_admin_localize<\/code>, <code>assetpilot_admin_menu_pages<\/code>, <code>assetpilot_scan_saved<\/code>, <code>assetpilot_condition_handlers<\/code>, <code>assetpilot_site_key_scan_urls<\/code>, <code>assetpilot_site_key_scan_max_urls<\/code>, <code>assetpilot_key_pages_scan_complete<\/code><\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate <strong>AssetPilot<\/strong> from the Plugins screen (or upload the <code>assetpilot<\/code> folder to <code>\/wp-content\/plugins\/<\/code>).<\/li>\n<li>In the admin menu, open <strong>AssetPilot<\/strong>.<\/li>\n<li>Go to <strong>Assets<\/strong>, enter a page URL, and run a scan.<\/li>\n<li>Create your first rule from any row in the results table.<\/li>\n<\/ol>\n\n<p>No command-line build is required for normal use on WordPress.org installs.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"will%20this%20break%20my%20site%3F\"><h3>Will this break my site?<\/h3><\/dt>\n<dd><p>Any plugin that changes how assets load can break layouts or checkout if rules are too aggressive. AssetPilot reduces risk with validation messages, dependency information, Safe Mode, and automatic runtime pause after errors. Start with narrow conditions (one URL or one page type), test, then expand.<\/p><\/dd>\n<dt id=\"will%20assetpilot%20improve%20my%20pagespeed%20or%20core%20web%20vitals%20score%3F\"><h3>Will AssetPilot improve my PageSpeed or Core Web Vitals score?<\/h3><\/dt>\n<dd><p>It can help by removing or deferring assets that should not run on a given view. Results depend on your theme, hosting, caching, and which plugins enqueue heavy scripts. AssetPilot shows what is loaded so you can make informed cuts \u2014 it is not a full-page cache or image optimizer.<\/p><\/dd>\n<dt id=\"how%20is%20this%20different%20from%20%E2%80%9Casset%20cleanup%E2%80%9D%20or%20%E2%80%9Cunload%E2%80%9D%20plugins%3F\"><h3>How is this different from \u201cAsset CleanUp\u201d or \u201cunload\u201d plugins?<\/h3><\/dt>\n<dd><p>Those tools focus on unloading assets per page. AssetPilot emphasizes <strong>conditional rules<\/strong>, bulk targeting, scan history, dependency graph, recommendations, validation, and verification workflows in one admin app \u2014 aimed at repeatable, auditable performance work.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20woocommerce%3F\"><h3>Does it work with WooCommerce?<\/h3><\/dt>\n<dd><p>Yes. Conditions can target shop, product, cart, checkout, and account views so you can keep payment scripts where they are needed.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20elementor%20and%20page%20builders%3F\"><h3>Does it work with Elementor and page builders?<\/h3><\/dt>\n<dd><p>Yes. Scan Elementor-built pages to see builder assets, then create rules with page-level conditions. Test carefully on editor and preview URLs; use Safe Mode if a template looks wrong.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20contact%20form%207%20and%20other%20plugins%3F\"><h3>Does it work with Contact Form 7 and other plugins?<\/h3><\/dt>\n<dd><p>Scan pages with and without the form (or feature). Disable or defer that plugin\u2019s handles only on views where the shortcode or block is not present.<\/p><\/dd>\n<dt id=\"does%20assetpilot%20change%20the%20wordpress%20admin%3F\"><h3>Does AssetPilot change the WordPress admin?<\/h3><\/dt>\n<dd><p>No. Rules target <strong>frontend<\/strong> delivery for visitors (subject to your conditions). Admin and block editor tooling are for configuration only.<\/p><\/dd>\n<dt id=\"do%20i%20need%20to%20edit%20code%3F\"><h3>Do I need to edit code?<\/h3><\/dt>\n<dd><p>No. Everything is configured in the AssetPilot admin UI. Developers can extend behavior via documented PHP hooks (see Development).<\/p><\/dd>\n<dt id=\"where%20is%20the%20source%20code%3F\"><h3>Where is the source code?<\/h3><\/dt>\n<dd><p>https:\/\/github.com\/amrelarabi\/assetpilot<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release on WordPress.org<\/li>\n<li>Page asset scanning and Assets Explorer<\/li>\n<li>Rules: disable, defer, async, preload, fetch priority<\/li>\n<li>Advanced conditions (URL, device, auth, roles, WooCommerce, singular, archives, scan URL)<\/li>\n<li>Bulk rules, validation pipeline, impact preview<\/li>\n<li>Dependency graph and optimization recommendations<\/li>\n<li>Scan history, debug logs, Safe Mode, and automatic runtime pause on errors<\/li>\n<li>Block editor sidebar entry point<\/li>\n<\/ul>","raw_excerpt":"Conditionally disable, defer, and preload scripts and styles \u2014 with page scans, safety checks, and Safe Mode.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/cn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/319420","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/cn.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/cn.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=319420"}],"author":[{"embeddable":true,"href":"https:\/\/cn.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/amrelarabi"}],"wp:attachment":[{"href":"https:\/\/cn.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=319420"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/cn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=319420"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/cn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=319420"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/cn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=319420"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/cn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=319420"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/cn.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=319420"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}