v1.0.0 · Free & Open Source · No API · No Server Changes

Twenty CSS files.
One request.

WordPress performance is not lost to big files. It is lost to the number of round trips. JCSSMM merges every enqueued CSS on a page into a single request. Same bytes. Fraction of the latency.

<!-- Before -->
<link rel="stylesheet" href="theme.css"> 200 ms
<link rel="stylesheet" href="elementor.css"> 300 ms
<link rel="stylesheet" href="widget-heading.css"> 200 ms
<link rel="stylesheet" href="post-212.css"> 200 ms
… 16 more
 
<!-- After -->
<link rel="stylesheet" href="merged-eb79f7557b91.css"> 1 request

The bottleneck is request count

20 files of 1 KB each take far longer than 1 file of 20 KB. Every request pays a fixed cost: DNS, TCP, TLS, HTTP header, server response. Those costs multiply by request count.

Without merging

  • 20+ HTTP requests blocking first paint
  • 4–6 seconds of pure round-trip latency
  • Critical request chain grows with every plugin
  • Each new plugin adds yet another CSS file

With JCSSMM

  • 1 request per page, same total bytes
  • Up to 95% less round-trip waiting
  • Critical chain collapsed into a single link
  • CSS content untouched — only reorganized

Eight things, done right

Every feature exists because a real WordPress site needed it.

01

One request per page

Combines every enqueued local CSS into a single merged file. Order preserved. Media queries intact.

core
02

Icon fonts protected

Font Awesome, Elementor Icons, Dashicons, IcoMoon, Ionicons and more are auto-excluded. No missing glyphs.

safety
03

Per-page cache

Each URL gets its own merged file, hashed by the exact CSS it loads. No cross-page contamination.

precision
04

Admin bar controls

Purge This Page or Purge All from the toolbar on any page. No need to visit the settings screen.

workflow
05

Smart invalidation

Auto-purges on post save, theme switch, plugin update, menu change, widget update. No manual management.

automatic
06

URL rewriting safe

Every url() inside merged CSS is rewritten to an absolute path. Background images never 404.

reliable
07

Zero JS impact

Does not touch any script. No defer, no async, no lazy. jQuery and Elementor JS load exactly as before.

non-invasive
08

OneWebP aware

Auto-detects Jacker OneWebP and rewrites background URLs to .jo.webp when a matching file exists.

integration

What actually changes

Same CSS bytes. Same visual result. One network round trip instead of twenty.

  • 15–25 fewer HTTP round trips per page
  • Critical CSS chain collapsed to a single link
  • No FOUC — CSS still blocks in <head>
  • LCP improves without touching JavaScript
  • Works with Elementor, Gutenberg, WooCommerce
CSS REQUESTS / PAGE 1
was 20+
ROUND-TRIP LATENCY −95%
multi-second improvement
CSS BYTES Unchanged
content is not modified

See it inside WordPress

Two screens and one toolbar menu. That's the entire plugin. Click the tabs to explore.

🏠 Site JCSSMM ▾ ➕ New 👤 admin
⚙️ Settings
⚡ Admin Bar
Merged files: 12  ·  Total size: 284.6 KB  ·  Tracked pages: 12  ·  Plugin version: 1.0.0
OneWebP integration active. Background images inside merged CSS are rewritten to .jo.webp when a matching file exists.
Enable CSS merging
Combines local CSS files into one request. Icon font libraries are automatically excluded. JavaScript is never touched.
Cache TTL (seconds)
How long merged files are kept. 86400 = 1 day.
Exclude URL patterns
One substring per line. Pages whose URL contains any of these are skipped. Useful for checkout, cart, or logged-in pages.

Per-page cache

Each page has its own merged file. Purge one page without touching any other.

Page URL File Size Action
/ merged-eb79f7557b91.css 27.62 KB Purge this page
/about/ merged-a3f8b2c1d4e5.css 24.18 KB Purge this page
/contact/ merged-b8c9d0e1f2a3.css 22.45 KB Purge this page
/blog/ merged-f2a3b4c5d6e7.css 26.03 KB Purge this page
/product/example/ merged-1a2b3c4d5e6f.css 31.87 KB Purge this page

Global actions

🏠 Site JCSSMM ▾ ➕ New 👤 admin

Hover "JCSSMM" in the toolbar to open:

Typical workflow:

  1. You edit a page and the layout looks off
  2. Toolbar → JCSSMM → Purge This Page
  3. Refresh. The merged file regenerates with the new CSS
  4. Other pages stay untouched
Note: The admin bar menu only appears for users with the manage_options capability (Administrators). Regular visitors never see it.

Three steps. Sixty seconds.

No configuration. No server changes. No API keys.

STEP 01

Download

Get the ZIP from GitHub releases.

STEP 02

Upload

WordPress → Plugins → Add New → Upload Plugin.

STEP 03

Activate

Activate. Merging starts automatically on the next page load.

Common questions

Straight answers, no marketing fluff.

Will this break my site?

No. The plugin only reorganizes <link> tags. It never modifies CSS content, never touches JavaScript, never adds inline styles. Icon font libraries are auto-excluded. If anything looks wrong, deactivate the plugin and everything returns to normal instantly.

Why not use Critical CSS instead?

Critical CSS solves "the first screen only needs a small part of the stylesheet." Your real problem is different: many small CSS files, each one a network round trip. Merging directly reduces request count, which is where the seconds are actually lost.

Will it cause flash of unstyled content?

No. The merged CSS still blocks in <head> — same loading behavior as before, just one file instead of twenty. The browser waits for the merged file, then paints once. No FOUC, no layout shift.

What about icon fonts?

Font Awesome, Elementor Icons, Dashicons, IcoMoon, Ionicons and several others are automatically excluded. They load as separate files exactly as before, so no icons go missing.

Does it work with Elementor, WooCommerce, Gutenberg?

Yes. All three are fully supported. Elementor's per-page CSS, WooCommerce product styles and Gutenberg block styles are merged into one request without breaking layout.

How does per-page cache work?

Each URL gets its own merged file, hashed by the exact CSS it loads. Purging one page does not affect any other page. New pages regenerate on first visit. Content updates auto-purge via WordPress hooks.

Does it work with Jacker OneWebP?

Yes. JCSSMM auto-detects Jacker OneWebP. When active, it rewrites background-image URLs inside merged CSS to point at the .jo.webp files Jacker OneWebP generated. Both plugins work independently and integrate cleanly.

Is this really free?

Yes. GPL-2.0+, no premium version, no API calls, no server requirements. Free forever.

Support open source

If JCSSMM saves you hours, consider keeping the project alive.