EasyFonts · Version history
EasyFonts changelog and version history
- Latest version
- 2.0.4
- Oct 10, 2026 (1 month ago)
- Releases
- 17
- since 2023
- In the last year
- 6
- about one every 36 days
- Tested up to
- WordPress 7.1.4
- PHP 7.4 or later
Releases each year
- 20238 releases
- 20253 releases
- 20266 releases
20266 releases
EasyFonts 2.0.4Latest
- Fixed: browser console warning “…was preloaded using link preload but not used…”. After a settings change, the preloaded fonts and the font stylesheet could point at two different versions of the same font file, so each preloaded font was downloaded twice and the preload was wasted. Every link to a…
- Fixed: on page-cached sites the measurement beacon failed with 403 “Cookie check failed” once a cached page was a day old. WordPress rejected the page’s expired nonce before Easy Fonts could check its cache-safe token, so Smart Preload and per-page font loading stopped learning. The beacon now send…
- Fixed: the beacon and the async font reporter now work on sites with plain permalinks (they returned 404 there).
- Fixed: after Purge, the inlined font stylesheet could keep old font links for up to a day.
- Improved: Smart Preload now preloads the exact weights a page shows above the fold, instead of every weight of the font family. A family with many weights no longer fills the preload slots with weights the page never uses.
- Improved: at most 3 fonts are preloaded per page (was 6), so fonts compete less with your main image. Your “always preload” choices now take their slots first. Filter: easyfonts_preload_cap.
- Improved: Smart Preload picks the character set of your site’s language, for example the Cyrillic file on a Russian site or the Greek file on a Greek site, instead of always the Latin one. Filter: easyfonts_preload_subset.
- Performance: saving settings no longer makes every returning visitor download all fonts again. A font’s URL now changes only when the font file itself changes.
EasyFonts 2.0.3
- Fixed: database error “BIGINT UNSIGNED value is out of range” fired on nearly every render — Smart Preload’s weight matching now uses signed arithmetic, so preloads work again on stock MySQL/MariaDB. Props @harryfear for the excellent report.
- Fixed: beacon throttling and data retention were skewed on sites with a non-UTC timezone; all internal timestamps are now stored and compared in UTC.
- Fixed: a failed external stylesheet fetch is now remembered (negative cache), so an unreachable CSS host can no longer add its full timeout to every page view. New filters: easyfonts_css_timeout, easyfonts_css_fail_ttl.
- Fixed: the measurement beacon now works on page-cached sites — a cache-safe token authorises it, so an expired cached nonce no longer silently stops measurements.
- Improved: a font is scoped off a page only after multiple consistent beacon measurements (filter easyfonts_scope_out_min_measurements, default 2), so a single bad or forged report can’t remove a font.
- Security: beacon routes are normalised to canonical paths, and the decisions table is now hard-capped in weekly cleanup (filter easyfonts_gc_max_decision_rows) so anonymous requests can’t grow it without bound.
- Security: cache-buster bumps from the async-fonts endpoint are rate-limited (filter easyfonts_async_bump_interval).
- Security: the background warm key is rotated on Purge and Repair, and cache path handling is hardened against traversal re-forming.
- Improved: upserts are deprecation-free on MySQL 8.0.20+ (row-alias syntax where supported; VALUES() retained on MariaDB, where it remains the native form).
- Performance: the inlined font stylesheet is minified once and cached; a duplicate-insert race in font registration now falls back to an update; cleanup deletes are replication-safe; new indexes on usage/decision timestamps.
EasyFonts 2.0.2
- New: per-page font scoping. Each page now loads only the fonts it actually uses. Many themes (e.g. Blocksy) enqueue their whole Google-fonts set on every page; Easy Fonts now measures what each page really renders (in a real browser) and leaves the unused families off that page’s stylesheet — while…
- Fixed: a font declared on a page is no longer wrongly dropped from the combined CSS because of a weight/style mismatch (e.g. a single-weight family used at a bold weight). Usage is now matched per family.
- Improved: the combined stylesheet is unique per page font-set and shared when identical. Pages that use the same fonts reuse the same cached file; a page with a different set gets its own. Identical sets are never regenerated, saving CPU and disk.
- Improved: used/unused classification stays current. Beacon measurements now refresh hourly instead of being locked for a week, so a font that starts (or stops) being used is reflected quickly, and “Optimize” forces an immediate fresh measurement of the homepage.
- Fixed: preloads are accurate and page-specific. A font is preloaded on a page only when it actually renders above the fold there (matched per family, so a face the browser shows at a different weight than the hosted file — e.g. a single-weight family shown bold — still preloads correctly). A font a…
- Fixed: page counts and usage are keyed by the page path, so cache-buster and probe parameters (and tracking/builder query strings) can no longer inflate the dashboard with duplicate rows.
- Improved: URL exclusions now match precisely — “/cart” no longer also excludes “/cart-guide”. Patterns match the exact path or a path-segment prefix, and support wildcards (e.g. “/shop/*”).
- Improved: when the master toggle is off, Easy Fonts adds nothing at all to the front end (no measurement or helper scripts).
- Improved: front-end scripts are now served minified.
- Performance: fewer database writes per page render (font registration is batched), usage logging is batched into a single write and rate-limited per page, and a dead database index was retired.
- Security/hardening: strict sanitisation of all values written into the generated @font-face CSS; stylesheet fetching is restricted to public hosts (internal/private addresses are blocked) with parsed-host provider matching; and local stylesheet reads are limited to genuine .css files with path-trav…
- Developer: filters easyfonts_page_scope_fonts (set false to disable per-page scoping), easyfonts_force_families (always-load safelist), easyfonts_preload_cap, and easyfonts_beacon_throttle_hours.
EasyFonts 2.0.1
- Fixed: rare white screen / blank front-end on some hosts (esp. FastCGI/cgi-fcgi). Font binaries are no longer downloaded during a visitor’s page render — they are fetched by a non-blocking background warm request, so a slow or blocked outbound connection can never stall the page.
- Fixed: the output buffer now fails open — if anything goes wrong while optimising a page, the original HTML is always returned instead of a blank page.
- Improved: provider tags are only removed once their fonts are confirmed hosted locally, so the page never loses its fonts while the cache warms.
- Improved: provider stylesheet CSS is cached, so font detection no longer hits the network on every page load.
- Hardened: guard for WordPress’s HTML API, safer regex handling, and PHP 7.4 compatibility shims.
- Note: no settings, styling, or features changed. After activation (or after changing fonts) the first visit serves the original fonts for a moment while the cache warms in the background, then switches to self-hosted automatically. You can also warm immediately from Settings → Optimize.
- Fixed: the real cause of the blank front-end — two regular expressions that scanned the whole page (the inline
- Hardened: every remaining regular expression that rewrites page/CSS content now falls back to the original content if the engine fails, so a pattern can never blank the page. Added a final safety net that discards the processed page if it ever comes out empty.
- Added: a size cap for individual inline
EasyFonts 2.0.0
- New: real-browser usage measurement — see which fonts render and which are above the fold.
- New: smart auto-preload of above-the-fold fonts (capped) for better LCP; your manual choices are always respected.
- New: zero-CLS metric-matched fallback fonts generated from real font metrics.
- New: detect and self-host fonts from inline CSS, theme/plugin CSS, external/CDN stylesheets, and the Web Font Loader (webfont.js).
- New: optional async / JS-injected Google Fonts blocker.
- New: full subset selection (Latin, Cyrillic, Greek, Vietnamese, Arabic, Devanagari, CJK, and more).
- New: CDN support for hosted fonts and the stylesheet.
- New: inline the combined stylesheet as minified CSS (not render-blocking).
- New: per-family and per-weight Load / Preload control, with used vs unused grouping.
- New: settings Import / Export.
- New: Multisite support and WP-CLI commands.
- New: redesigned, faster admin interface.
- Improved: variable font detection and single-file hosting.
- Improved: font-display control across all @font-face declarations.
- Improved: resource-hint cleanup and duplicate @font-face removal.
EasyFonts 1.3
20253 releases
EasyFonts 1.2
EasyFonts 1.1.4
EasyFonts 1.1.3
20238 releases
EasyFonts 1.1.2
EasyFonts 1.1.1
EasyFonts 1.1.0
EasyFonts 1.0.4
EasyFonts 1.0.3
EasyFonts 1.0.2
EasyFonts 1.0.1
EasyFonts 1.0.0
Questions about EasyFonts’s releases
What is the latest version of EasyFonts?
2.0.4, released on Oct 10, 2026 (4 weeks ago). It’s tested up to WordPress 7.1.4 and needs PHP 7.4 or later.
How often is EasyFonts updated?
6 releases in the last year, about one every 36 days. Its first release on WordPress.org dates from January 2023.
Know when your rivals ship
Track your plugin and its rivals: TrackWP sees each new release in the nightly snapshot and alerts you, with what it did to their rank.
Start freeRelease dates come from the day each version’s folder was made in EasyFonts’s WordPress.org SVN repository; the notes from its readme’s changelog, as its authors wrote it.