{"id":90735,"date":"2018-09-01T12:14:21","date_gmt":"2018-09-01T12:14:21","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/jsdelivr-this\/"},"modified":"2026-08-20T17:12:52","modified_gmt":"2026-08-20T17:12:52","slug":"nextgenthemes-jsdelivr-this","status":"closed","type":"plugin","link":"https:\/\/hsb.wordpress.org\/plugins\/nextgenthemes-jsdelivr-this\/","author":8928822,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.3.8","stable_tag":"1.3.8","tested":"7.0.4","requires":"6.5","requires_php":"8.0","requires_plugins":null,"header_name":"NextGenThemes jsDelivr CDN","header_author":"Nicolas Jonas","header_description":"Makes your site load all WP Core assets with","assets_banners_color":"78898f","last_updated":"2026-08-20 17:12:52","external_support_url":"","external_repository_url":"","donate_link":"https:\/\/nextgenthemes.com\/donate","header_plugin_uri":"https:\/\/nextgenthemes.com","header_author_uri":"https:\/\/nextgenthemes.com\/donate","rating":5,"author_block_rating":0,"active_installs":200,"downloads":18579,"num_ratings":6,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","changelog"],"tags":{"0.9.0":{"tag":"0.9.0","author":"nico23","date":"2018-10-02 08:25:30"},"0.9.1":{"tag":"0.9.1","author":"nico23","date":"2018-10-02 08:25:30"},"0.9.2":{"tag":"0.9.2","author":"nico23","date":"2018-10-02 08:25:30"},"0.9.4":{"tag":"0.9.4","author":"nico23","date":"2019-08-31 04:00:23"},"0.9.5":{"tag":"0.9.5","author":"nico23","date":"2019-08-31 05:45:42"},"0.9.6":{"tag":"0.9.6","author":"nico23","date":"2019-08-31 06:49:02"},"0.9.7":{"tag":"0.9.7","author":"nico23","date":"2019-09-01 08:39:52"},"1.0.0":{"tag":"1.0.0","author":"nico23","date":"2019-09-12 05:23:56"},"1.1.0":{"tag":"1.1.0","author":"nico23","date":"2024-05-15 03:06:12"},"1.1.1":{"tag":"1.1.1","author":"nico23","date":"2024-12-06 09:39:04"},"1.2.0":{"tag":"1.2.0","author":"nico23","date":"2024-12-04 17:36:59"},"1.2.1":{"tag":"1.2.1","author":"nico23","date":"2024-12-06 10:34:20"},"1.2.3":{"tag":"1.2.3","author":"nico23","date":"2024-12-21 19:37:26"},"1.2.5":{"tag":"1.2.5","author":"nico23","date":"2025-09-16 14:44:33"},"1.2.6":{"tag":"1.2.6","author":"nico23","date":"2025-09-16 14:52:16"},"1.3.0":{"tag":"1.3.0","author":"nico23","date":"2025-10-11 17:18:11"},"1.3.3":{"tag":"1.3.3","author":"nico23","date":"2025-10-12 15:06:06"},"1.3.6":{"tag":"1.3.6","author":"nico23","date":"2026-06-12 00:19:35"},"1.3.8":{"tag":"1.3.8","author":"nico23","date":"2026-08-20 17:12:52"}},"upgrade_notice":[],"ratings":{"1":0,"2":0,"3":0,"4":0,"5":6},"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":1950088,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":1950088,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3376917,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3376917,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["0.9.0","0.9.1","0.9.2","0.9.4","0.9.5","0.9.6","0.9.7","1.0.0","1.1.0","1.1.1","1.2.0","1.2.1","1.2.3","1.2.5","1.2.6","1.3.0","1.3.3","1.3.6","1.3.8"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[144,3863,16717,37721,247],"plugin_category":[52,54],"plugin_contributors":[78270],"plugin_business_model":[],"class_list":["post-90735","plugin","type-plugin","status-closed","hentry","plugin_tags-caching","plugin_tags-cdn","plugin_tags-cdnjs","plugin_tags-jsdelivr","plugin_tags-performance","plugin_category-performance","plugin_category-security-and-spam-protection","plugin_contributors-nico23","plugin_committers-nico23"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/s.w.org\/plugins\/geopattern-icon\/nextgenthemes-jsdelivr-this_78898f.svg","icon_2x":false,"generated":true},"screenshots":[],"raw_content":"<!--section=description-->\n<p>It replaces all assets with versions available on jsDelivr. No options, nothing to configure, just works.<\/p>\n\n<p>The code needs to be openly hosted on NPM, Github or wordpress.org.<\/p>\n\n<p>This plugin adds a little a invisible button in the admin bar on the top right, left of \"Howdy, {Name}\". It turns dark red on hover. You can click that and see the assets loaded from jsDelivr. I hope you appreciate how I made it so its not annoying or distracting.<\/p>\n\n<h3>Security<\/h3>\n\n<p>The plugin serves your assets securely. It takes two hashes of your assets (and caches them). One sha256 hash for the jsDelivr API to check if the file is hosted there, another sha384 hash that is put on the <code>integrity<\/code> attribute of every asset to make 100% sure that the exact same file you have on your server is the served by the CDN! In case this would ever not be the case the files gets rejected client side.<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin serves JavaScript and CSS assets from the jsDelivr CDN (cdn.jsdelivr.net, no affiliation) instead of your own server. It also uses the jsDelivr hash lookup API (data.jsdelivr.com) to find whether a file is available on the CDN.<\/p>\n\n<p>To detect CDN files, the plugin sends a SHA-256 hash of each local asset's content to the jsDelivr lookup API. Asset requests to the CDN and the hash lookup are made from your server when a page is loaded; your visitors' browsers then load the assets directly from cdn.jsdelivr.net. jsDelivr may log standard request metadata such as IP addresses and requested URLs (see their policies below).<\/p>\n\n<p>The CDN and API are provided by Volentio JSD Limited (jsDelivr). See their <a href=\"https:\/\/www.jsdelivr.com\/terms\/terms-of-use\">Terms of Use<\/a> and <a href=\"https:\/\/www.jsdelivr.com\/terms\/privacy-policy\">Privacy Policy<\/a>.<\/p>\n\n<h3>Your donation would be appreciated<\/h3>\n\n<p>It took me a lot of time to come up with this plugin and I had many iterations over various different approaches how to do this until I came up with this working solution that also does not need much code. I know the official plugin was abandoned years ago and I looked at complicated bloated code and did not even feel like learning what its doing and never looked at it again and started from scratch.<\/p>\n\n<p>Please check out my commercial plugin and level up your video embeds with <a href=\"https:\/\/nextgenthemes.com\/plugins\/arve-pro\/\">ARVE Pro<\/a> or <a href=\"https:\/\/nextgenthemes.com\/donate\/\">Donate here<\/a><\/p>\n\n<!--section=changelog-->\n<h3>2026-08-20 1.3.8<\/h3>\n\n<ul>\n<li>Improved: Refactor dialog JS \u2014 wrap init logic in init() function, simplify null guards.<\/li>\n<li>Improved: Dialog CSS \u2014 adjust width, center text, style backdrop.<\/li>\n<li>Improved: Update donation links and dialog content, extract arve_links() with short\/long variants.<\/li>\n<li>Improved: Readme \u2014 fix tags, date, changelog wording, add security section.<\/li>\n<\/ul>\n\n<h3>2026-08-11 1.3.7<\/h3>\n\n<ul>\n<li>New: Document the jsDelivr external service usage in the readme.<\/li>\n<li>Fix: Declare minimum WordPress version (script modules require 6.5).<\/li>\n<li>Fix: Use the correct text domain for translations.<\/li>\n<\/ul>\n\n<h3>2025-06-12 1.3.6<\/h3>\n\n<ul>\n<li>New: Add <code>&lt;link href='https:\/\/cdn.jsdelivr.net' crossorigin='anonymous' rel='preconnect' \/&gt;<\/code> to the header to improve performance.<\/li>\n<\/ul>\n\n<h3>2025-10-22 1.3.5<\/h3>\n\n<ul>\n<li>Fix: Script Modules not working correctly.<\/li>\n<li>Improved: Unified URLs for WordPress assets, skip api calls for them.<\/li>\n<li>Improved: Code Quality.<\/li>\n<li>Improved: Tests.<\/li>\n<\/ul>\n\n<h3>2025-10-12 1.3.3<\/h3>\n\n<ul>\n<li>Improved: Updated logo.<\/li>\n<\/ul>\n\n<h3>2025-10-11 1.3.0<\/h3>\n\n<ul>\n<li>New: Full support for script modules, including import map and <code>&lt;link rel=\"modulepreload\"<\/code><\/li>\n<\/ul>\n\n<h3>2025-09-16 1.2.6<\/h3>\n\n<ul>\n<li>Fix: Prevent 404 for some files by checking if files detected by hash are available on the CDN.<\/li>\n<\/ul>\n\n<h3>2025-03-22 1.2.4<\/h3>\n\n<ul>\n<li>Fix: Wrong type returned.<\/li>\n<li>Fix: Not included dialog.js file.<\/li>\n<li>Improved: Minor code improvements.<\/li>\n<\/ul>\n\n<h3>2024-12-21 1.2.3<\/h3>\n\n<ul>\n<li>Fix: Plugin style detection not working.<\/li>\n<\/ul>\n\n<h3>2024-12-06 1.2.1<\/h3>\n\n<ul>\n<li>Fix: Code mistake caused <code>integrity<\/code> attribute to be wrong, plugin files would get blocked.<\/li>\n<\/ul>\n\n<h3>2024-12-04 1.2.0<\/h3>\n\n<ul>\n<li>New: A info dialog was added that is only loaded when the admin bar is visible.<\/li>\n<li>New\/Fix: Support for script modules.<\/li>\n<li>Improved: Shorten potentially too long transient names.<\/li>\n<li>Improved: Replaced <code>get_headers<\/code> with <code>wp_safe_remote_head<\/code>. WP coding standards and more efficient.<\/li>\n<li>Improved: Simplified and improved the code.<\/li>\n<\/ul>\n\n<h3>2024-05-14 1.1.0<\/h3>\n\n<ul>\n<li>Improved: Modernized the code.<\/li>\n<\/ul>\n\n<h3>2019-09-07 1.0.0<\/h3>\n\n<ul>\n<li>Improved: Run only once per page-load.<\/li>\n<li>Improved: Better function names and some useful comments.<\/li>\n<li>Improved: Send this plugins url as user-agent to jsDelivr knows how it's used. (They asked for this). This also means more privacy as the <code>wp_remote_get<\/code> referrer by default would send your site URL (I really do not like that)<\/li>\n<\/ul>\n\n<h3>2019-08-31 0.9.4<\/h3>\n\n<ul>\n<li>Improved: Coding standards, some minor things.<\/li>\n<\/ul>\n\n<h3>2018-09-23 0.9.2<\/h3>\n\n<ul>\n<li>Fix: Force the recheck of file hashes when WP gets updated to not end up with core assets.<\/li>\n<\/ul>\n\n<h3>2018-09-01 0.9.1<\/h3>\n\n<ul>\n<li>First release<\/li>\n<\/ul>","raw_excerpt":"Free CDN for for all assets from wordpress.org Github and NPM.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/hsb.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/90735","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/hsb.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/hsb.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/hsb.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=90735"}],"author":[{"embeddable":true,"href":"https:\/\/hsb.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/nico23"}],"wp:attachment":[{"href":"https:\/\/hsb.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=90735"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/hsb.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=90735"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/hsb.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=90735"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/hsb.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=90735"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/hsb.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=90735"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/hsb.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=90735"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}