Changelog
Every release, in one place.
Track what has changed across all SparkCore plugins. Filter by product to see only what's relevant to you.
All updates
Media Optimizer
Spark Speed
Spark Multilingual
Power Filters
Spark Search
Cookie Consent
Media OptimizerNew
Media Optimizer 1.3.4
Internal names now use the longer sparkmo_ prefix. Settings, image records, backups and scheduled tasks move automatically on the first page load after updating; restoring originals keeps working byte for byte.
Much less load: no more continuous polling of the optimization API while a job waits, and no extra database work on normal page views.
Privacy: location and camera data are removed also on servers without Imagick, and backup preview links are no longer shown to other users.
Safer: an optimized original only replaces the source after a size and content check; the cleanup command only touches files Spark Media Optimizer created and runs as a dry run unless --delete is given.
Updates are verified with a new signing key.
Media OptimizerNew
Media Optimizer 1.3.2
Security: updates are now verified with a new signing key that is kept offline. Update to this version to keep receiving updates.
Much lighter on your server: while a job is waiting, status checks back off instead of polling continuously, and visitors no longer trigger database writes.
Privacy: location data (GPS) and other metadata are removed on your own server before an image is sent, also without Imagick. Only the license activation hash is needed.
Safer: an optimized image only replaces the original when it is verifiably the same picture; backups of originals are no longer linked in the page.
The cleanup command only removes files Spark Media Optimizer created itself and shows a list first.
Internal names now use a longer prefix; your data moves automatically on the first page load after updating.
Media OptimizerNew
Media Optimizer 1.2.2
Fixed: deleting the plugin after deactivating it could fail and leave tables, settings and the backup folder behind.
Fixed: new installs showed a red health warning, and uploads made before finishing the setup wizard kept the queue paused.
Fixed: the queue could pause by mistake when two requests scheduled the next run at the same time, and the status stream no longer exceeds the PHP time limit.
Fixed: PHP warnings on the log screen.
The welcome notice can be dismissed.
Media OptimizerNew
Media Optimizer 1.2.1
Translations: English source texts with a bundled Dutch translation. License, update and image tool messages and the operation log labels are now translatable.
Cleaner wording in the admin screens.
Media OptimizerNew
Media Optimizer 1.2.0
New: a separate free edition for wordpress.org that converts to WebP and AVIF on your own server. This premium edition keeps the SparkCore API (smart compression, PDF and PowerPoint) and now falls back to the local engine automatically when the API is unavailable, not registered or out of quota.
New: Server capabilities panel showing which image libraries your host supports (GD, Imagick, libvips and command line tools).
Fixed: images could be wrapped in a double picture element on block themes.
Fixed: some Dutch admin texts were duplicated.
The Spark Media Optimizer icon now shows on the WordPress updates screen.
Media OptimizerBeta
Media Optimizer 1.1.2.2-beta
Dev QA / smoke: more reliable PHP syntax and fewer false warnings; deactivation checked; additional checks (audit table, uploads, variants, DB version); WP-CLI script bin/smo-test-deactivate-invariants.php in dev-zip.
Audit trail: database table for AJAX and settings; visible under Logs and Dev QA.
Settings: warning on unsaved changes when switching tabs; "Adjust quality" works directly through returned effective_presets.
Media OptimizerBeta
Media Optimizer 1.1.2.1-beta
Settings (Optimization): after Save or Reset in the "Adjust Quality" modal, the Flowbite backdrop remained on the page making nothing clickable until a hard refresh - fixed by calling the correct Modal.hide() via FlowbiteInstances.
Dev-zip only: Dev QA tab with merged smoke report (static + live API/runtime) and bar chart; refresh reruns all checks.
Smoke logic centralized in includes/class-spark-media-optimizer-smoke-runner.php (CLI + dev-tab).
The public zip does not include this runner, the dev-diagnostics-template, or bin/ (only *-dev.zip + repository).
Media OptimizerBeta
Media Optimizer 1.0.2.4-beta
License: FluentCart frequently uses license_status; activation and checks now correctly recognize that (fewer false "License not found" messages). Product ID can be customized via spark_media_optimizer_fluentcart_item_id filter.
Media OptimizerBeta
Media Optimizer 1.0.2.3-beta
Unsaved settings: wider modal, readable names, On/Off; restore works in the diff list; save and switch tabs without duplicate "leave site" warning.
Dashboard: scan results as cards with toggles.
Dev QA: revision table per save (old -> new, secrets masked); more detailed audit text; additional smoke checks for MIME and revision table.
Media OptimizerBeta
Media Optimizer 1.0.2-beta
Distribution: the public zip no longer includes the bin/ folder (smoke/test scripts and internal build helpers). These remain in the Git repository and in the internal *-dev.zip.
QA: from a checkout you can run offline composer smoke:static (writes build/smoke-report.json). Full PHPUnit still requires WP_TESTS_DIR; see tests/README.md.
Media OptimizerBeta
Media Optimizer 1.0.1-beta
License: FluentCart status aliases (like active) recognized as valid; hardening on activation AJAX and updater license callback; empty settings_key falls back safely.
License tab: access notice visible when license/EULA is missing; embedded FluentCart UI no longer removes global admin body notices.
Dev-zip: spark-media-optimizer-*-dev.zip sets SPARK_MEDIA_OPTIMIZER_DEV_UNLOCK to true for internal sites (not for production).
Spark SpeedFix
Spark Speed 0.74.7
Fixed: on some themes (for example Elementor) Spark Speed could preload a lower image and take the priority away from the real hero image that WordPress had marked, which made the largest contentful paint slower. The WordPress hint now counts again.
Fixed: wp spark-speed warm --wait now really waits until the queue is empty (new --timeout option) instead of stopping early.
Spark SpeedFix
Spark Speed 0.74.6
Fixed: the cache warmer could drop URLs that another plugin (for example a translation plugin) had just added to the warm queue, so those pages stayed cold after a purge.
Spark SpeedFix
Spark Speed 0.74.5
Fixed: after a full cache purge started by another plugin or a script, the cache warmer now refills the whole site. Before, most pages could stay cold while the status said up to date.
Fixed: an old failed resume check no longer shows as the current state or lengthens the next pause.
Spark SpeedFix
Spark Speed 0.74.4
Security: updates are now verified with a new signing key that is kept offline. Update to this version to keep receiving updates.
Removed outdated download hosts from the update check.
Spark SpeedNew
Spark Speed 0.74.3
Diagnostics, verification and error messages now have English source texts with a full Dutch translation.
WP-CLI commands have English names (cart, customer-cache, load-plan, warm-resume, critical-path); the old Dutch names keep working.
The OPcache advice starts a fresh measurement after updating.
Spark SpeedNew
Spark Speed 0.74.2
Fixed: turning the page cache on and off no longer leaves empty lines in wp-config.php, and removing the WP_CACHE line can never touch another setting on the same line.
Deactivating now removes every scheduled task and the load plan; activating restores an active load plan.
Uninstall also removes the render profile folder.
Admin styles and scripts load through the standard WordPress queues.
Spark SpeedNew
Spark Speed 0.74.1
Translations: all admin texts are now English by default with a complete Dutch translation (nl_NL and nl_BE). Other languages fall back to English instead of Dutch.
About 200 more texts are translatable, including the optimizer page, admin bar, memory, license and Lighthouse cards and the reasons why a page is not cached.
Spark SpeedNew
Spark Speed 0.74.0
New: a separate free edition for wordpress.org. Premium features (object cache, AI optimization via MCP, Lighthouse measurements, diagnostics export) stay in this premium edition; nothing changes for you.
The Spark Speed icon now shows on the WordPress updates screen.
Security hardening: all request input is sanitized and every admin action checks its nonce and capability.
Spark SpeedNew
Spark Speed 0.73.2
Start the native optimizer from an authenticated Pro MCP connection with explicit confirmation, then read its progress with the new status tool.
Continue browser measurements and verification in the Spark Speed dashboard. Repeated start requests reuse an active run.
Prevent overlapping starts across workers on one host or a shared filesystem with reliable POSIX locking. Independent filesystems on separate web nodes require external coordination.
Show clearer dashboard start errors and keep internal exception details out of the new MCP responses.
Spark SpeedNew
Spark Speed 0.73.1
Starting and resuming the optimizer without duplicate runs.
Spark SpeedNew
Spark Speed 0.73.0
Connect Claude Code, Claude Desktop, Claude.ai or ChatGPT to your own WordPress site using eleven bounded MCP tools. Requires Spark Speed Pro and a WordPress administrator.
Web connectors use a site-local OAuth authorization-code flow with PKCE S256, exact registered redirects, explicit consent, one-hour access tokens and rotating refresh tokens. Reusing a refresh token revokes the connection. Secrets are stored only as hashes.
Review and revoke web connections from the Optimization tab. Existing header keys and WordPress application passwords remain supported.
Apply configuration proposals and manage MCP keys through WP-CLI using the same configuration safety gate and change log. Pipe newly created keys directly to your secret store.
Request an optional PageSpeed measurement through check_page when a PSI key is configured. Register the same tools with WordPress Abilities when available.
Limit authenticated clients to 120 requests per minute and record bounded authentication failures without credentials or IP addresses.
Exclude MCP runtime code and its admin integration from the wordpress.org build stage.
Spark SpeedNew
Spark Speed 0.72.2
Detect background hero images selected by a CSS id, including Oxygen sections, when background-first LCP preloading is enabled.
Preload the visible hero instead of a product image below the fold.
Preserve existing class-selector behavior and reject pseudo, grouped, unknown and below-fold selectors.
Spark SpeedNew
Spark Speed 0.72.1
Includes the 0.71.4 LCP choice: no menu images, expected display size, at most one high-priority image.
LiteSpeed servers now get the same browser-cache (Expires) rules as Apache.
Oxygen's Google Fonts loader (webfont.js) is replaced by local fonts once they are downloaded.
WooCommerce category pages are no longer wrongly rejected by the safe-build check (the sorting form echoed our own probe parameter).
The cart-cache proof recognises blocks that change on every render (such as random related products) and ignores them as noise.
Spark SpeedNew
Spark Speed 0.72.0
Measured faster: on a copy of sparkcore.io, mobile LCP improved from an average of 2.46 to 1.54 s (Lighthouse, 5 pages, 5 runs per page); PageSpeed score 97 to 99.8.
No more guesswork on font preloading: text fonts are only preloaded when a measurement (FontHints) shows it helps. The guess cost 0.3 to 0.85 s LCP.
Used-CSS now also removes rules that only set a variable for elements not on the page; a rule with only variables (tokenset) always remains.
Iframes below the fold, like a Google Maps map, only load when the visitor scrolls nearby (with noscript fallback).
Pruned CSS up to 300 KB inline; the fetchpriority hint from WordPress counts as LCP candidate up to 128 KB after body.
Spark SpeedFix
Spark Speed 0.71.3
The cart notice only prevents caching after a request that changes the cart; a notice from a regular page view no longer does.
Spark SpeedFix
Spark Speed 0.71.2
After 'add to cart', a pending WooCommerce notice prevents caching for at most two minutes, even on themes that don't display notices anywhere.
Spark SpeedFix
Spark Speed 0.71.1
The cart test and load plan now also recognize noise without numbers (a letter code that changes per render, like Oxy Ninja's slider) and no longer report it as a difference.
Spark SpeedNew
Spark Speed 0.71.0
Shopping cart cache: visitors with items in their cart receive the shared, cached page; enabled after a trial, off by default (0.70.0).
Customer cache: individual copy per login session for customer roles, never for administrators; off by default (0.70.0).
The shopping cart trial detects differences per plugin with recommendations, warns about cart counters that don't refresh as fragments, and also tests the shop page and a second category (0.71.0).
A cached copy with a WordPress nonce is valid for a maximum of 10 hours (0.70.1).
Hero background from the header receives LCP preload (0.70.2).
Render profile in Diagnostics, OPcache measured, economical mode and loading plan for the frontend (0.69.x).
Smarter automatic deferral; scripts from the same plugin stay together (0.68.x).
Lessons from three real Lighthouse reports (0.67.0).
Spark MultilingualFix
Spark Multilingual 0.41.2
Fixed: the alt mode of the Breakdance image element (from media library, custom, decorative) was registered as text and translated. A translated mode ("benutzerdefiniert", "dekorativ") is not recognised by Breakdance, so the image showed the alt text of the source language, and decorative images got an alt text. Such choice values are no longer registered and are never replaced at render time, also when a translation is already stored.
Fixed: a social title or description (SEOPress, Yoast, Rank Math) was never shown translated: reading the source value went through the new fallback for optional fields, which returned an empty value, so the translation lookup gave up. The source value is now read with the swap suspended.
Spark MultilingualNew
Spark Multilingual 0.41.1
Fixed: on translated pages the SEO plugin still printed Dutch in several tags: the description of the start page, the Open Graph and X (Twitter) titles and descriptions, and descriptions built from a custom field template such as %%_cf_hero_tekst%%. The social title and description fields of SEOPress, Yoast SEO and Rank Math, and their breadcrumb titles, are now translated like the SEO title and description. A social or breadcrumb field without a translation no longer shows the source text on a translated page; the SEO plugin falls back to its translated default. These fields do not hold back publishing a page.
Fixed: a custom field used in an SEO title or description template (%%_cf_name%% in SEOPress, %%cf_name%% in Yoast, %customfield(name)% in Rank Math) now follows the ACF translation of that field.
Fixed: an SEOPress description built from %%post_excerpt%% or %%post_content%% without a manual excerpt used the Dutch post content. It now uses the translated text.
Fixed: Rank Math variables with an argument, such as %customfield(name)%, were cut into pieces before translation. They are now kept whole.
New: global SEO texts. The title and description of the start page and the title and description templates of SEOPress (post types, archives, taxonomies, author, date, search, 404) are registered as site-wide texts by "wp bdml sync --all" and when the SEOPress settings are saved. Translate them under Overview > Site-wide texts; they show on the translated site.
Fixed: saving any post registered its title, excerpt and content for translation, whatever the post type. ACF field definitions (the field name in the excerpt, the serialized settings in the content), ACF field groups, form submissions and SEOPress schemas were sent to the translation engine. That cost money, sent visitor form data to a third party and stored translated field names and broken serialized data. A post is now only registered when it is real content: a builder document, a post, page or reusable block, a product, or a custom post type with an admin screen. Technical types (acf-*, seopress_*, shop_*, wp_* except reusable blocks, form submissions) are never registered.
The background clean-up round now removes strings of those technical types on existing sites. `wp bdml sweep-technical --dry-run` shows the counts per post type; without --dry-run it removes them at once.
Fixed: the site-wide text scanner registered sentence fragments. A paragraph with a link or bold word was split into pieces ("You can try the app", "for free") that were translated separately and could only be pasted back piece by piece. A paragraph, heading, list item or table cell that contains inline tags is now registered as one text, including its tags, and swapped as a whole.
Fixed: the scanner also registered text that already belonged to another layer (a paragraph of a builder rich text, an ACF wysiwyg field, the content of a page) because only an exact match counted as covered. On one site 303 of 375 longer site-wide texts were such duplicates, each translated again at cost. A text that is contained in a registered source is now skipped.
Fixed: field names and keys (faq_1_antwoord, hero-label) and words padded with a non-breaking space (" you ") were still registered as site-wide text.
`wp bdml site-strings-prune --dry-run` shows which existing site-wide texts no longer qualify (fragments, keys, duplicates of another layer); without --dry-run it removes them. Texts with a manually edited or approved translation are kept unless --include-edited.
Fixed: an outdated machine translation silently fell back to the source language on the live page, and the site-wide text layer then replaced loose fragments around inline tags, producing garbled sentences. An outdated translation now keeps showing its previous text until a new one exists; the dashboard counts it as outdated and warns when automatic retranslation is off.
Fixed: a manual correction in the Studio now applies everywhere the exact same source text occurs in that language, unless that place already has its own edited or approved translation.
Fixed: "Retranslate outdated" in the Studio retranslated every text on the page, including manual edits. It now retranslates outdated texts only; the "all" scope (WP-CLI and AJAX) no longer touches edited translations unless --include-approved is given.
Fixed: a Breakdance Deploy import no longer overwrites edited or approved translations on the live site with machine translations from the artifact; the report counts them as kept.
Fixed: a source that is only a dynamic builder token () is never replaced by a translation at render time, and such tokens are no longer registered as translatable text.
Fixed: a lone "<" in a translation no longer loses the rest of the text when it is saved.
Fixed: the language switcher showed the source language as a bare code ("NL") next to translated names ("German", "French"). It now shows the translatable language name in the page language.
Fixed: an aria-label, alt, title or placeholder was skipped by the site-wide text scanner when the same words were already registered as normal text elsewhere (a footer heading "Topics" next to a navigation aria-label "Topics"). That other text never translates the attribute, so it stayed in the source language. An attribute now only counts as covered by another layer that translates the same attribute.
Spark MultilingualNew
Spark Multilingual 0.41.0
New: nightly synchronisation (Settings, Automation and Claude; off by default). Every night at a time you choose (03:00 site time by default) the plugin checks which pages, posts and templates changed in the source language since the previous run, reads them again and queues the new and changed segments for the selected engine with the site's own API key. It also catches changes that never passed through a builder save, such as imports and edits made in code. Only changed segments are translated, with a maximum per night that is shared fairly across the languages; the daily budget under Cost control still applies. Without an API key nothing is translated and changed segments are only marked as outdated. Manually edited or approved translations are never overwritten: they stay outdated until you review them. Each run writes one line to a log on the settings screen. The first run only counts changes made after you turn it on. WP-CLI: wp bdml nightly-sync [--dry-run].
New: Claude via MCP (Settings, Automation and Claude; off by default). With WordPress 6.9 or newer the plugin offers its translations as abilities in the WordPress Abilities API, which an MCP server such as the MCP Adapter (included with Breakdance 3: wp mcp-adapter serve) turns into tools for Claude: an overview of languages and status, translatable documents, segments with their source and translation (missing, outdated, needs review), saving and approving translations, picking up source changes, and queuing a job for the configured engine. Translations Claude supplies do not use a translation API. Only administrators can use the tools. They follow the same rules as the Studio: a translation a person edited or approved is only replaced on explicit request, and the previous text is kept. DeepL and Claude via your own API key keep working as before.
Spark MultilingualNew
Spark Multilingual 0.40.1
Fixed: the 0.40.0 package contained stray copies of nine files (names ending in " 2", created by cloud sync). Installing it stopped the site with "Cannot declare class BDML\Engines\ClaudeEngine". The copies are gone.
The plugin now loads its engines, admin screens, elements and integrations from a fixed list of file names, so a stray copy in the plugin folder can never be loaded again.
The build now stops when such a copy is present.
Spark MultilingualNew
Spark Multilingual 0.40.0
New: custom languages. Under Settings, Add language you can now define a language that is not in any list, such as a regional dialect (for example Brabants with the code nl-brabant). Give it a base language and free-text instructions for the AI translator about wording, spelling and tone. Nothing about the language is built into the plugin; it is your own configuration.
Only the Claude engine can write a custom language: it receives a clear language name and your instructions. DeepL and the local model skip a custom language with a clear message instead of quietly producing the standard language.
The language check measures a custom language against its base language. A dialect of the source language is no longer rejected for looking like the source.
hreflang: every language code is printed only once. A dialect that shares its code with the source language (nl) is left out of the hreflang set, because a duplicate code makes the whole set invalid for search engines.
Fixed: a language code longer than 10 characters was accepted and then cut off in the database, so its translations never came back. Codes are now limited to 10 characters.
Spark MultilingualFix
Spark Multilingual 0.39.11
Fixed: text fields inside an ACF repeater, group or flexible content field were shown in the source language on translated pages, even though their translation was ready and the overview showed 100%. Only top-level fields were swapped. Found on a live blog where the hero text was translated but the section titles, the article text and the FAQ stayed Dutch. Both forms in which ACF hands over these rows are now recognised.
Fixed: the site-wide text layer replaced short loose words across the whole translated page, including text other layers had already translated correctly. A Dutch word that also exists in the target language was swapped inside sentences, for example "check-in" became "check-at" in English, "in der Nacht" became "ein der Nacht" in German and "en el suelo" became "e el suelo" in Spanish. A single word is now only replaced when the whole text block or attribute is exactly that word (a button or a column title), loose words shorter than four characters are never used, and the scanner no longer registers them.
Fixed: the word boundary check of the site-wide text layer could treat an accented letter as a boundary, so a source could be replaced inside a word (Spanish "telefonica" became "alefonica").
Spark MultilingualNew
Spark Multilingual 0.39.10
SEO: a language URL without a published translation (it shows the source text under /de/, /fr/ and so on) now sends noindex, follow and a canonical to the source-language page, also when SEOPress, Yoast or Rank Math prints the robots tag. Such URLs already stayed out of that language's sitemap and the hreflang set.
Speed: after a full Spark Speed cache purge, all published language variants are queued for warming again, not only the default addresses; with a target language on the main URL this includes the source language under its own prefix. Unpublished variants are no longer warmed.
Spark MultilingualFix
Spark Multilingual 0.39.9
Security: updates are now verified with a new signing key that is kept offline. Update to this version to keep receiving updates.
Spark MultilingualNew
Spark Multilingual 0.39.8
Translations: all admin texts are now English by default, with complete Dutch (nl_NL and nl_BE) and the existing German, French, Spanish, Italian and Polish translations kept. Missing strings fall back to English instead of Dutch.
License notices, SEO labels and the deploy import/rollback messages are now translatable.
Spark MultilingualNew
Spark Multilingual 0.39.7
The Spark Multilingual icon now shows on the WordPress updates screen.
Spark MultilingualFix
Spark Multilingual 0.39.6
Fixed: with an active licence and WooCommerce, every visit could keep loading forever. A nested home_url call while the language is being resolved now leaves the URL untouched.
Fixed: automatic updates from the SparkCore shop failed with "No valid signed update manifest". The plugin now checks the key the shop signs with. Sites on 0.39.5 or older update manually once (upload the zip); after that updates are automatic again.
Spark MultilingualFix
Spark Multilingual 0.38.1
Fixed: with Yoast SEO active, every translated page carried a canonical URL pointing to the source-language page, telling search engines to index the source instead of the translation and undermining the hreflang setup. Each language variant now gets a self-referencing canonical, exactly like og:url already did. The same protection covers Rank Math and SEOPress.
Fixed: on a target language without its WordPress language pack installed, Yoast kept og:locale on the installation locale. Yoast's og:locale now follows the active language.
Spark MultilingualNew
Spark Multilingual 0.38.0
New: hreflang tags and the html lang attribute now target the language (en, de, nl) instead of language plus country (en-US, de-DE). A code like en-US tells search engines the page is meant for the United States only, excluding the UK, Ireland, India and Australia. Plain language codes reach everyone searching in that language, regardless of country. Sites that really serve different content per country can switch back under Settings, Languages, "Search engine targeting (hreflang)"; that restores the old behaviour exactly.
og:locale for Facebook and LinkedIn deliberately keeps the full format (nl_NL); only the search engine targeting is simplified.
New filter bdml_hreflang_code to override the final code per language, for example en-GB for a site that deliberately targets the United Kingdom.
Spark MultilingualFix
Spark Multilingual 0.37.3
Fixed: a Breakdance-built page could show a translation of its old, detached page content instead of the Breakdance layout in a translated language. The detached content is now skipped whenever Breakdance is active and the page has a real layout.
Spark MultilingualFix
Spark Multilingual 0.37.2
Fixed: clicking an element in the Studio preview of an Elementor page did nothing. The preview bridge now recognises Elementor elements for click, hover and keyboard, identical to Breakdance.
Spark MultilingualFix
Spark Multilingual 0.37.1
Maintenance release: changelog text cleanup only, no changes to the plugin code.
Spark MultilingualNew
Spark Multilingual 0.37.0
New: full Elementor support, exactly like Breakdance. Texts are extracted from the layout (headings, text blocks, buttons, lists, tabs, accordions, testimonials, counters and more, including repeated items), swapped when a translated page renders, and re-synced on every save in the Elementor editor. Images, alt texts and button links per language work as with Breakdance; internal links get the language prefix automatically. The layout itself is never modified.
New: the language switcher is also available as an Elementor widget, with the same views as the shortcode and the Breakdance element.
Fixed: Elementor caches the rendered page for 24 hours without distinguishing languages, so visitors could see the wrong language. That cache is now bypassed on translated pages; the source language keeps it.
Widgets from Elementor Pro and third parties follow a careful allowlist: known text fields participate, technical settings never do.
Spark MultilingualNew
Spark Multilingual 0.36.0
New: in the full-screen editor you can now replace the image itself per language, with the same options as in the Studio: pick from the media library, paste a URL, or revert to the source. The replaced image refreshes in the page immediately.
Fixed: the Studio preview now renders at a real device width (1440 px desktop, 768 tablet, 390 mobile) and is scaled to fit, instead of showing the mobile layout under a "Desktop" label.
Spark MultilingualNew
Spark Multilingual 0.35.0
Fixed: clicking an image in the preview did nothing for elements with digits in their names, such as Breakdance's standard image2 element. Images, videos, SVG icons and the language bar are all selectable now.
New: approve every translation on a page at once, and collect edits to save them in one go.
The strings list got a big readability pass: image thumbnails, visible filter states, colour-coded statuses, 50 rows per page, and one-click translation from the edit window.
Spark MultilingualNew
Spark Multilingual 0.34.0
New: an "Image and video" filter above the strings list, so all media rows are grouped together for faster per-language image assignment.
Fixed: the strings list now scrolls within a fixed height instead of pushing the preview far below the fold.
Spark MultilingualNew
Spark Multilingual 0.33.1
Maintenance release, identical to 0.33.0, so sites already on 0.33.0 can update through the normal channel.
Spark MultilingualNew
Spark Multilingual 0.33.0
Fixed: a replaced image per language often still showed the original on the live site, because the responsive srcset kept pointing at the source file. Replacements are now rebuilt completely: src, all sizes, srcset and dimensions.
New: section and div background images per language now really work on the live site, and many more Breakdance elements support image-per-language: galleries, sliders, logo lists, image comparison, testimonials and more.
Fixed: video-per-language was broken by a too-narrow database column; affected rows are repaired automatically on update.
Spark MultilingualNew
Spark Multilingual 0.32.0
New: clicking an image in the preview opens the same edit window as texts, links and buttons.
New: choose whether you edit in a window or in the side panel; your choice is remembered.
The Studio has a new layout: the strings list as a full-width strip on top, the preview taking two thirds, and a collapsible side panel.
Power FiltersNew
Power Filters 0.36.7
Restores existing Divi scope links after the prefix migration, so product grids and filter counts use the same selection.
The full Divi layout render path uses the same product selection and pagination as AJAX results.
A price module without an explicit product choice now uses the current loop product during AJAX instead of the most recently created product.
WooCommerce sorting choices are kept while filtering and in the URL. Sorted results keep their order.
Restores product images when sorting and filtering by taking Divi's static and inline CSS into account. Fragment styles are updated per scope.
Power FiltersFix
Power Filters 0.36.2
Security: updates are now verified with a new signing key that is kept offline. Update to this version to keep receiving updates.
Removed outdated download hosts from the update check.
Power FiltersNew
Power Filters 0.36.1
Internal names now use the longer sparkpf_ prefix. Settings, filters, the index and scheduled tasks move automatically on the first page load after updating; existing shortcodes, Breakdance and Divi pages keep working.
Fixed on Divi 5: after filtering, clicking a product card with a column link opened nothing.
Divi results no longer include inline style or script tags; styling is identical.
Stricter output escaping and request handling.
Power FiltersNew
Power Filters 0.35.2
Fixed: on Breakdance 3.x every AJAX filter refresh emptied the product grid. Both Breakdance 2 and 3 are supported now.
Uninstall with "Delete all data" now also removes filter sets, filter placements, swatch values and scheduled index events.
Safer request handling and readable sources for the Divi 5 builder script.
Power FiltersNew
Power Filters 0.35.1
Translations: all texts are now English by default with a complete Dutch translation (nl_NL and nl_BE), including the Breakdance elements and Divi 5 modules. Other languages fall back to English.
The WPGB migration report and the shortcode and SEO examples are now translatable.
Power FiltersNew
Power Filters 0.35.0
New: a separate free edition for wordpress.org (filters for Breakdance, works with Divi). SEO paths, per-state SEO titles, landings, swatches and the Spark Speed cache contract stay in this premium edition.
Fixed: a filtered page or post had two canonical tags; there is now exactly one (also with SEOPress, Yoast and Rank Math).
The Spark Power Filters icon now shows on the WordPress updates screen.
Security hardening of all admin input and output.
Power FiltersBeta
Power Filters 0.34.3-beta
Fixed: wp spf index (status, rebuild, sync) crashed under WP-CLI with "Too few arguments to Cli::__construct()".
Power FiltersBeta
Power Filters 0.34.2-beta
Connected to the Spark Power Filters product in the SparkCore shop, so the licence screen can activate a key and updates arrive through the shop. No feature is locked: an install without a licence keeps working exactly as before.
Spark SearchNew
Spark Search 1.13.3
Statistics: the "Popular searches" table now only lists search terms that return results. Terms without results stay in their own table with the one-click fixes, so a term no longer appears in both tables.
Statistics: the tables always fit next to the live preview. The action buttons wrap instead of running under the preview, and on narrow screens the table scrolls on its own.
Spark SearchFix
Spark Search 1.13.2
Security: updates are now verified with a new signing key that is kept offline. Update to this version to keep receiving updates.
Removed outdated download hosts from the update check.
Spark SearchNew
Spark Search 1.13.1
Styling no longer uses !important; the search box, dropdown and results look exactly the same and no longer fight other plugins' styles.
The upgrade to the new internal names is now also safe when the database cannot rename tables.
Spark SearchNew
Spark Search 1.13.0
Internal names now use the longer spksearch_ prefix. Your index, settings, statistics, widgets and scheduled tasks are moved automatically on the first page load after updating; old filter names keep working.
Fixed: "(Re)index now" always ran as a background task.
The "index is empty" notice only shows on the Plugins screen and can be dismissed.
Cleaner uninstall and styling of the live preview.
Spark SearchNew
Spark Search 1.12.1
Translations: all texts are now English by default with a complete Dutch translation (nl_NL and nl_BE). German, French and other languages fall back to English.
Admin and block texts are fully translatable.
Spark SearchNew
Spark Search 1.12.0
New: a separate free edition for wordpress.org. Synonyms, help rules, pinned products, search statistics and variant SKU/GTIN search stay in this premium edition; nothing changes for you.
The Spark Search icon now shows on the WordPress updates screen.
All database queries are prepared; search results are unchanged.
Spark SearchNew
Spark Search 1.11.0
Licence and automatic updates through the SparkCore shop. New "Licence" tab in the settings to activate, deactivate and check a key. No feature is locked: without a licence Spark Search keeps working exactly as before.
Updates are only installed when the package provably comes from SparkCore: every release is signed (Ed25519) and the file's sha256 is checked after download.
Spark Cookie ConsentFix
Spark Cookie Consent 1.23.5
Fixed: the Help, Documentation and upgrade links in the settings now open the Spark Cookie Consent product page instead of a page that no longer exists.
Spark Cookie ConsentFix
Spark Cookie Consent 1.23.4
Security: updates are now verified with a new signing key that is kept offline. Update to this version to keep receiving updates.
Removed outdated download hosts from the update check.
Spark Cookie ConsentNew
Spark Cookie Consent 1.23.3
Fixed: a "translations loaded too early" notice on sites in another language than English.
Inline scripts are now printed through the WordPress script functions; the Consent Mode default still loads first.
Deleting consent records asks for confirmation without inline JavaScript.
Uninstall with "Delete all data" removes every setting; clearer privacy note for the optional Claude copy assistant.
Spark Cookie ConsentNew
Spark Cookie Consent 1.23.1
Translations: all texts are now English by default with a complete Dutch translation (nl_NL and nl_BE), including the admin scripts. Other languages fall back to English.
The default banner texts now follow the site language on new installs; texts you already customized are never changed.
Cookie expiry times and table headings in the banner now follow the banner language.
Spark Cookie ConsentNew
Spark Cookie Consent 1.23.0
New: a separate free edition for wordpress.org. The scanner with automatic blocking, regional rulesets and the accountability report stay in this premium edition; nothing changes for you.
The Spark Cookie Consent icon now shows on the WordPress updates screen.
Security hardening of all admin input and output; the banner output is unchanged.
Spark Cookie ConsentNew
Spark Cookie Consent 1.22.2
Security: a visitor's consent choice no longer appears in the HTML that a page cache stores. Previously, a visitor's choice to accept (or a spoofed cookie) could be shown to other visitors through the cache, with Consent Mode set to granted and trackers loaded before they made their choice. The browser now releases it per visitor.
Security: a visitor's Global Privacy Control signal no longer appears in cached pages, and GPC now only applies in a US context.
Consent log also works behind a CDN or proxy (trusted proxies can be configured) and is better protected against flooding.
After an update, missing texts fill in the language of your site (including Dutch); your own texts remain unchanged.
New since 1.13.3: regions (UK, Canada, Quebec and more, off by default), accountability tab, blocking of tracking pixels and embeds until consent, and GPP signals.
Updates will now be checked with the signing key from the SparkCore shop, so automatic updates work again.