Your Joomla site is loading 40+ JavaScript and CSS files on every page, and each one is a separate request slowing everything down. System - Bundler automatically combines those files into just a few optimized bundles, cutting your page requests by 90% and reducing file sizes by up to 80%. Your visitors get faster load times, Google sees better performance metrics, and you never think about it again.
Overview
Proof
Real results from production sites:
- 25 script files → 2 bundles (92% fewer requests)
- 363KB CSS → 69KB (81% smaller)
- 251KB JavaScript → 67KB (73% smaller)
Used in the wild: Running on this site right now
How It Works
You tell Bundler which JavaScript and CSS files load on every page of your site. It combines them into single minified files and compresses them with gzip. When visitors load your site, their browser downloads 2-4 optimized bundles instead of dozens of individual files. The bundles update automatically whenever you install or update extensions.
Features
- Automatic updates - Bundles rebuild whenever you update extensions, so you're always serving optimized files
- Preserves script behavior - Keeps defer and async attributes intact, so your JavaScript executes exactly as intended
- Smart caching - After the first page load, bundles are cached and reused, making subsequent pages lightning fast
- Invisible to visitors - Works completely in the background with zero impact on user experience
- Debugging built-in - Each bundle includes comments showing which files are included, making troubleshooting simple
- Free forever - No premium version, no feature limits, no tricks
You control exactly which files get bundled. Start with 2-3 files, test it, then add more. You can disable it instantly if needed. Install like any plugin, add file paths to your bundles, save. Most people are running it in under 10 minutes. Bundles rebuild automatically when extensions update. Joomla's media version system triggers the rebuild—you don't lift a finger. The opposite. You're replacing 40 separate file requests with compressed bundles. Even with minification overhead, you're dramatically reducing total load time.Frequently Asked Questions:
Will this break my site?
Is this hard to set up?
What if I update an extension?
Will this slow down my site?
Video
Technical Details
For the Technically Curious
Architecture:
- Event-driven with Joomla's WebAssetManager API
- Subscribes to onBeforeCompileHead (Priority::MIN)
- Auto-rebuild on onInstallerAfterInstaller and onExtensionAfterSave
- Cache invalidation via Joomla's mediaVersion system
Minification:
- JavaScript: MatthiasMullie\Minify\JS
- CSS: MatthiasMullie\Minify\CSS
- Gzip compression level 9 (maximum)
Output:
- Bundles saved to /media/plg_system_bundler/
- Naming pattern: {bundle-name}_{mediaVersion}.{ext}
- Source comments preserved for debugging: /** @origin {filepath} */
Compatibility:
- Joomla 4.x, 5.x, 6.x
- PHP 7.4+ (8.x recommended)
- Works with standard WebAssetManager-registered assets
- Does not support ES6 modules (type="module")
- Does not support template-rendered assets (yet)
Cache Strategy:
- Cache key: bundler_{mediaVersion}
- Cache group: plg_system_bundler
- Stores: Array of asset names to remove from WebAssetManager
- Invalidates on: Extension install/update, plugin config save
Security:
- All file reads use absolute paths (JPATH_ROOT)
- Graceful error handling for missing files
- No user-supplied code execution
- No external dependencies beyond minification library
Attribute Preservation:
- Maintains defer, async, and combined attributes on script bundles
- Separate bundles required for different execution contexts
- Style bundles support media attribute preservation
Installation:
- Upload via Extensions Manager
- Enable plugin in System > Plugins
- Configure bundles (bundle name, type, attributes, file list)
- Save and test
Known Limitations:
- Cannot bundle ES6 modules (type="module")
- Cannot remove template-injected assets (rendered after onBeforeCompileHead)
- Only bundles assets registered via WebAssetManager
- Requires manual file path configuration (no auto-discovery)
Best for:
- Sites with many extensions loading JavaScript/CSS
- Template core files used on every page
- System plugins with universal assets
- Bootstrap framework files
- Site-wide utility scripts
Not recommended for:
- Page-specific component assets
- Conditionally-loaded module scripts
- Assets from templates that bypass WebAssetManager
- Dynamic/inline scripts
Performance Impact:
- First page load: Scanning overhead (1-2ms)
- Subsequent loads: Cache hit, near-zero overhead
- File generation: One-time cost on config save or extension update
- Minification: Handled offline during bundle generation