Releases: cansumasearch-dev/velox
Release list
v4.9.0
Changelog
All notable changes to Velox. This file is the single source of truth — it shows
up both on the GitHub release and in the WordPress "View details" → Changelog tab.
Add a new section at the top for each release.
4.9.0 — Every tool you switched on is actually in the menu
- Four working tools were missing from the sidebar. Google Reviews, Login protection, Site scan and Shop were switched on and running, but never appeared under any menu group — the only way to reach them was the Utilities page. The dashboard grid was missing the same four.
- The cause, rather than the symptom, is fixed. The sidebar and the dashboard each kept their own hand-written list of tools alongside the real one, so adding a tool meant remembering three places, and forgetting was silent. Both now read the one list, so a tool that exists is a tool you can find.
- Security has its own group — Login URL, Login protection and Site scan sit together instead of being scattered through the menu.
- A check now refuses to build Velox at all if a tool would be invisible, because this went unnoticed across four releases.
4.8.1 — The site scan stops crying wolf
- Every folder guard file was reported as malware. Plugins drop an inert
index.phpinto their own upload folders so the folder cannot be listed — WP All Import, WooCommerce and most others do it, several folders deep. The scan reported each one as runnable code, so a perfectly healthy site opened the screen to a wall of serious findings. A file that does nothing is no longer reported, decided by whether it actually runs anything rather than by what it is named. One namedindex.phpthat does contain code is still reported. - A folder protecting itself was reported too. Most
.htaccessfiles in uploads deny access, which is the opposite of a problem. Only one that switches a handler on is now reported — and it is reported as serious, because that is how an uploaded image gets run as code. - The Shop card in Utilities showed a stray
\u2014instead of a dash.
4.8.0 — Site scan
Checks that your WordPress files are the ones WordPress shipped, and that nothing runnable is hiding in your media folder.
- Core files are verified against the checksums WordPress.org publishes for your exact version and site language. Anything altered, missing, or sitting in wp-admin or wp-includes without belonging there is listed with the reason it was flagged.
- The uploads folder is checked for runnable code. That folder is for media; a .php file in it is one of the few signals that is both cheap to check and almost never a false alarm. Files with a hidden second extension, and .htaccess files that change how the folder is served, are listed separately as worth a look rather than as an alarm.
- It does not pattern-match for malware, and the screen says so. Scanning file contents for "known bad" code fails in both directions — ordinary minified code sets it off constantly, and any infection not already on the list walks straight past, which is worse than no scan at all because it reads as an all-clear. A clean result here means your core files match and uploads holds no code, nothing more.
- Plugins, themes and the rest of wp-content are not checked, because there is no published list of what those files should contain. Said plainly on the screen rather than left to be assumed.
- If the checksums cannot be fetched, or the uploads folder is too large to walk to the end, the report says which part was skipped instead of quietly reporting less.
Also fixed
- An expired unlock link from login protection still worked. The email promises the link stops working after 24 hours; it was honoured whatever its age, so an old message in an inbox stayed live. It is now refused once it expires.
4.7.0 — Login protection
Blocks an address after repeated failed sign-ins and keeps it blocked until you let it back in.
- Blocks by address, not by account. Locking an account after failed attempts would let anyone lock you out of your own site simply by typing your username wrong a few times.
- A blocked address is refused before the password is even checked, so the guessing stops rather than merely being recorded.
- You can never be shut out by this. Every block emails you a one-click unlock link, valid once and for 24 hours, alongside the unlock buttons in the admin.
- Blocked addresses are listed with the attempt count and the username that was tried, and can be released one at a time or all at once.
- A successful sign-in clears the counter for that address.
- If the site sits behind a proxy or CDN, say so and the forwarded address is used. It is off by default, because trusting that header on a site without a proxy would let anyone forge it and walk past every block.
4.6.8 — Checking out places the order
- Pressing the order button removed an item from the cart instead. The cart summary on the checkout page carried its own remove buttons, each in a form nested inside the checkout form. Nested forms are invalid HTML and the browser attributed the submission to the wrong one. That summary is now read-only.
4.6.6 — Cart pages are no longer served from cache by the drop-in
- The built-in cookie exclusions never reached the cache drop-in. Because the drop-in serves a page before WordPress loads, it only knew about cookies added by hand in the settings — so a visitor with a WooCommerce, Easy Digital Downloads or Velox cart could still be served someone else'''s cached page. The built-in list is now written into the drop-in'''s own configuration, and both sides read the same source.
4.6.5 — Placing an order shows the confirmation
- After placing an order you were sent to the home page instead of the confirmation with your reference number. The checkout now returns to wherever it was placed, so it works on any page the shortcode is used.
4.6.4 — The cart is never served from the page cache
- A visitor with something in their cart was being shown a cached page, so the cart looked empty however much they added. The cart cookie now excludes a request from the page cache, exactly as the WooCommerce and Easy Digital Downloads cookies already did.
- Cart, checkout and account pages opt out of caching on their own, so one visitor'''s view can never be served to the next.
- Modules can now veto caching for a request they know is personal.
4.6.3 — Product details are readable and writable through the API
- A work'''s price, dimensions and availability were invisible to the REST API, so importing a catalogue programmatically appeared to succeed while saving nothing. The product type now declares the support WordPress requires for that.
4.6.2 — Adding to the cart returns you to where you were
- After adding a work you landed on the home page instead of staying on the catalogue. The form now carries where it came from, and only ever returns to a URL on this site.
4.6.1 — Adding to the cart works on builder-built pages
- Add to cart did nothing on a page built with Velox Builder. The builder renders its own document and stops there, so the shop's form handler — which ran at the same point — never got a turn. It now runs earlier, which is also the last safe moment to set the cart cookie.
4.6.0 — Shop
A small commerce layer for sites that sell individual pieces rather than stock.
- Works get their own area in the admin, each with a price, dimensions, medium, year and an availability state — available, sold, or on commission.
- A cart and checkout that work without JavaScript. Ordering records the order, emails the customer and you, and marks the piece as sold so a one-off cannot be bought twice.
- Orders are listed with customer, total and state, and are never public.
- A customer area showing order history, using ordinary WordPress accounts.
- Four shortcodes place it anywhere: the catalogue, the cart, the checkout and the account area.
Two things it deliberately does not do. No card details are handled or stored — an order is recorded and payment agreed separately, so a payment provider can be added behind a redirect later. And sign-in, registration and password resets are WordPress's own, so there is no second set of credentials to protect.
4.5.0 — A template can carry its own styles, and three dead controls now work
- A template's own CSS and JavaScript are now used. Only the page being rendered was consulted, so anything written against a template was silently discarded and every shell style had to be duplicated into each page. Template assets are emitted first, so a page can still override them.
- Saved reply templates can be removed. Creating them worked; there was no way to delete one.
- The llms.txt editor can preview what auto-generation would produce, without overwriting whatever you have typed.
4.4.1 — Font family is no longer discarded
- Setting a font on an element did nothing: font-family was missing from the properties the builder knows how to write out, so the rule was dropped and the element kept the theme's font. Font-style and white-space were missing for the same reason.
4.4.0 — Shortcodes typed into the builder now run
- A shortcode placed in builder text was printed on the page as literal text. Putting a Velox form, or anything else that uses a shortcode, into a page built with the builder simply did not work. Shortcodes are now run after the text is sanitised, so the content is still filtered but registered shortcodes render as intended.
4.3.2 — Builder images can carry alt text
- Images placed with the builder always output an empty alt attribute, whatever was set, so they were invisible to search engines and unusable for anyone on a screen reader. The element's alt text now reaches the page.
4.3.1 — Element styling was being thrown away on pages without a navigation element
- **Per-element styling only...
v4.8.1
Changelog
All notable changes to Velox. This file is the single source of truth — it shows
up both on the GitHub release and in the WordPress "View details" → Changelog tab.
Add a new section at the top for each release.
4.8.1 — The site scan stops crying wolf
- Every folder guard file was reported as malware. Plugins drop an inert
index.phpinto their own upload folders so the folder cannot be listed — WP All Import, WooCommerce and most others do it, several folders deep. The scan reported each one as runnable code, so a perfectly healthy site opened the screen to a wall of serious findings. A file that does nothing is no longer reported, decided by whether it actually runs anything rather than by what it is named. One namedindex.phpthat does contain code is still reported. - A folder protecting itself was reported too. Most
.htaccessfiles in uploads deny access, which is the opposite of a problem. Only one that switches a handler on is now reported — and it is reported as serious, because that is how an uploaded image gets run as code. - The Shop card in Utilities showed a stray
\u2014instead of a dash.
4.8.0 — Site scan
Checks that your WordPress files are the ones WordPress shipped, and that nothing runnable is hiding in your media folder.
- Core files are verified against the checksums WordPress.org publishes for your exact version and site language. Anything altered, missing, or sitting in wp-admin or wp-includes without belonging there is listed with the reason it was flagged.
- The uploads folder is checked for runnable code. That folder is for media; a .php file in it is one of the few signals that is both cheap to check and almost never a false alarm. Files with a hidden second extension, and .htaccess files that change how the folder is served, are listed separately as worth a look rather than as an alarm.
- It does not pattern-match for malware, and the screen says so. Scanning file contents for "known bad" code fails in both directions — ordinary minified code sets it off constantly, and any infection not already on the list walks straight past, which is worse than no scan at all because it reads as an all-clear. A clean result here means your core files match and uploads holds no code, nothing more.
- Plugins, themes and the rest of wp-content are not checked, because there is no published list of what those files should contain. Said plainly on the screen rather than left to be assumed.
- If the checksums cannot be fetched, or the uploads folder is too large to walk to the end, the report says which part was skipped instead of quietly reporting less.
Also fixed
- An expired unlock link from login protection still worked. The email promises the link stops working after 24 hours; it was honoured whatever its age, so an old message in an inbox stayed live. It is now refused once it expires.
4.7.0 — Login protection
Blocks an address after repeated failed sign-ins and keeps it blocked until you let it back in.
- Blocks by address, not by account. Locking an account after failed attempts would let anyone lock you out of your own site simply by typing your username wrong a few times.
- A blocked address is refused before the password is even checked, so the guessing stops rather than merely being recorded.
- You can never be shut out by this. Every block emails you a one-click unlock link, valid once and for 24 hours, alongside the unlock buttons in the admin.
- Blocked addresses are listed with the attempt count and the username that was tried, and can be released one at a time or all at once.
- A successful sign-in clears the counter for that address.
- If the site sits behind a proxy or CDN, say so and the forwarded address is used. It is off by default, because trusting that header on a site without a proxy would let anyone forge it and walk past every block.
4.6.8 — Checking out places the order
- Pressing the order button removed an item from the cart instead. The cart summary on the checkout page carried its own remove buttons, each in a form nested inside the checkout form. Nested forms are invalid HTML and the browser attributed the submission to the wrong one. That summary is now read-only.
4.6.6 — Cart pages are no longer served from cache by the drop-in
- The built-in cookie exclusions never reached the cache drop-in. Because the drop-in serves a page before WordPress loads, it only knew about cookies added by hand in the settings — so a visitor with a WooCommerce, Easy Digital Downloads or Velox cart could still be served someone else'''s cached page. The built-in list is now written into the drop-in'''s own configuration, and both sides read the same source.
4.6.5 — Placing an order shows the confirmation
- After placing an order you were sent to the home page instead of the confirmation with your reference number. The checkout now returns to wherever it was placed, so it works on any page the shortcode is used.
4.6.4 — The cart is never served from the page cache
- A visitor with something in their cart was being shown a cached page, so the cart looked empty however much they added. The cart cookie now excludes a request from the page cache, exactly as the WooCommerce and Easy Digital Downloads cookies already did.
- Cart, checkout and account pages opt out of caching on their own, so one visitor'''s view can never be served to the next.
- Modules can now veto caching for a request they know is personal.
4.6.3 — Product details are readable and writable through the API
- A work'''s price, dimensions and availability were invisible to the REST API, so importing a catalogue programmatically appeared to succeed while saving nothing. The product type now declares the support WordPress requires for that.
4.6.2 — Adding to the cart returns you to where you were
- After adding a work you landed on the home page instead of staying on the catalogue. The form now carries where it came from, and only ever returns to a URL on this site.
4.6.1 — Adding to the cart works on builder-built pages
- Add to cart did nothing on a page built with Velox Builder. The builder renders its own document and stops there, so the shop's form handler — which ran at the same point — never got a turn. It now runs earlier, which is also the last safe moment to set the cart cookie.
4.6.0 — Shop
A small commerce layer for sites that sell individual pieces rather than stock.
- Works get their own area in the admin, each with a price, dimensions, medium, year and an availability state — available, sold, or on commission.
- A cart and checkout that work without JavaScript. Ordering records the order, emails the customer and you, and marks the piece as sold so a one-off cannot be bought twice.
- Orders are listed with customer, total and state, and are never public.
- A customer area showing order history, using ordinary WordPress accounts.
- Four shortcodes place it anywhere: the catalogue, the cart, the checkout and the account area.
Two things it deliberately does not do. No card details are handled or stored — an order is recorded and payment agreed separately, so a payment provider can be added behind a redirect later. And sign-in, registration and password resets are WordPress's own, so there is no second set of credentials to protect.
4.5.0 — A template can carry its own styles, and three dead controls now work
- A template's own CSS and JavaScript are now used. Only the page being rendered was consulted, so anything written against a template was silently discarded and every shell style had to be duplicated into each page. Template assets are emitted first, so a page can still override them.
- Saved reply templates can be removed. Creating them worked; there was no way to delete one.
- The llms.txt editor can preview what auto-generation would produce, without overwriting whatever you have typed.
4.4.1 — Font family is no longer discarded
- Setting a font on an element did nothing: font-family was missing from the properties the builder knows how to write out, so the rule was dropped and the element kept the theme's font. Font-style and white-space were missing for the same reason.
4.4.0 — Shortcodes typed into the builder now run
- A shortcode placed in builder text was printed on the page as literal text. Putting a Velox form, or anything else that uses a shortcode, into a page built with the builder simply did not work. Shortcodes are now run after the text is sanitised, so the content is still filtered but registered shortcodes render as intended.
4.3.2 — Builder images can carry alt text
- Images placed with the builder always output an empty alt attribute, whatever was set, so they were invisible to search engines and unusable for anyone on a screen reader. The element's alt text now reaches the page.
4.3.1 — Element styling was being thrown away on pages without a navigation element
- Per-element styling only reached the page when the page happened to contain a navigation element. The text effects, the utility presets, the grid layouts, the aspect-ratio box and the Google Reviews styling all write their CSS into the same place, and that place was only ever printed as part of the navigation block. A page without navigation lost every one of them.
- Align-self, justify-self, grid-column, grid-row and text-wrap are now understood, so rules using them are no longer discarded.
4.3.0 — Google Reviews ships with designs, and says how to preview them
The reviews element asked you to pick a design, but no designs existed until you built one yourself — and the only way to see anything at all was to connect Google first.
- Five designs are included: Cards, Slider, Minimal, Compact list and Single spotlight. They are always available, including on a site that has never opened the Reviews screen,...
v4.8.0
Changelog
All notable changes to Velox. This file is the single source of truth — it shows
up both on the GitHub release and in the WordPress "View details" → Changelog tab.
Add a new section at the top for each release.
4.8.0 — Site scan
Checks that your WordPress files are the ones WordPress shipped, and that nothing runnable is hiding in your media folder.
- Core files are verified against the checksums WordPress.org publishes for your exact version and site language. Anything altered, missing, or sitting in wp-admin or wp-includes without belonging there is listed with the reason it was flagged.
- The uploads folder is checked for runnable code. That folder is for media; a .php file in it is one of the few signals that is both cheap to check and almost never a false alarm. Files with a hidden second extension, and .htaccess files that change how the folder is served, are listed separately as worth a look rather than as an alarm.
- It does not pattern-match for malware, and the screen says so. Scanning file contents for "known bad" code fails in both directions — ordinary minified code sets it off constantly, and any infection not already on the list walks straight past, which is worse than no scan at all because it reads as an all-clear. A clean result here means your core files match and uploads holds no code, nothing more.
- Plugins, themes and the rest of wp-content are not checked, because there is no published list of what those files should contain. Said plainly on the screen rather than left to be assumed.
- If the checksums cannot be fetched, or the uploads folder is too large to walk to the end, the report says which part was skipped instead of quietly reporting less.
Also fixed
- An expired unlock link from login protection still worked. The email promises the link stops working after 24 hours; it was honoured whatever its age, so an old message in an inbox stayed live. It is now refused once it expires.
4.7.0 — Login protection
Blocks an address after repeated failed sign-ins and keeps it blocked until you let it back in.
- Blocks by address, not by account. Locking an account after failed attempts would let anyone lock you out of your own site simply by typing your username wrong a few times.
- A blocked address is refused before the password is even checked, so the guessing stops rather than merely being recorded.
- You can never be shut out by this. Every block emails you a one-click unlock link, valid once and for 24 hours, alongside the unlock buttons in the admin.
- Blocked addresses are listed with the attempt count and the username that was tried, and can be released one at a time or all at once.
- A successful sign-in clears the counter for that address.
- If the site sits behind a proxy or CDN, say so and the forwarded address is used. It is off by default, because trusting that header on a site without a proxy would let anyone forge it and walk past every block.
4.6.8 — Checking out places the order
- Pressing the order button removed an item from the cart instead. The cart summary on the checkout page carried its own remove buttons, each in a form nested inside the checkout form. Nested forms are invalid HTML and the browser attributed the submission to the wrong one. That summary is now read-only.
4.6.6 — Cart pages are no longer served from cache by the drop-in
- The built-in cookie exclusions never reached the cache drop-in. Because the drop-in serves a page before WordPress loads, it only knew about cookies added by hand in the settings — so a visitor with a WooCommerce, Easy Digital Downloads or Velox cart could still be served someone else'''s cached page. The built-in list is now written into the drop-in'''s own configuration, and both sides read the same source.
4.6.5 — Placing an order shows the confirmation
- After placing an order you were sent to the home page instead of the confirmation with your reference number. The checkout now returns to wherever it was placed, so it works on any page the shortcode is used.
4.6.4 — The cart is never served from the page cache
- A visitor with something in their cart was being shown a cached page, so the cart looked empty however much they added. The cart cookie now excludes a request from the page cache, exactly as the WooCommerce and Easy Digital Downloads cookies already did.
- Cart, checkout and account pages opt out of caching on their own, so one visitor'''s view can never be served to the next.
- Modules can now veto caching for a request they know is personal.
4.6.3 — Product details are readable and writable through the API
- A work'''s price, dimensions and availability were invisible to the REST API, so importing a catalogue programmatically appeared to succeed while saving nothing. The product type now declares the support WordPress requires for that.
4.6.2 — Adding to the cart returns you to where you were
- After adding a work you landed on the home page instead of staying on the catalogue. The form now carries where it came from, and only ever returns to a URL on this site.
4.6.1 — Adding to the cart works on builder-built pages
- Add to cart did nothing on a page built with Velox Builder. The builder renders its own document and stops there, so the shop's form handler — which ran at the same point — never got a turn. It now runs earlier, which is also the last safe moment to set the cart cookie.
4.6.0 — Shop
A small commerce layer for sites that sell individual pieces rather than stock.
- Works get their own area in the admin, each with a price, dimensions, medium, year and an availability state — available, sold, or on commission.
- A cart and checkout that work without JavaScript. Ordering records the order, emails the customer and you, and marks the piece as sold so a one-off cannot be bought twice.
- Orders are listed with customer, total and state, and are never public.
- A customer area showing order history, using ordinary WordPress accounts.
- Four shortcodes place it anywhere: the catalogue, the cart, the checkout and the account area.
Two things it deliberately does not do. No card details are handled or stored — an order is recorded and payment agreed separately, so a payment provider can be added behind a redirect later. And sign-in, registration and password resets are WordPress's own, so there is no second set of credentials to protect.
4.5.0 — A template can carry its own styles, and three dead controls now work
- A template's own CSS and JavaScript are now used. Only the page being rendered was consulted, so anything written against a template was silently discarded and every shell style had to be duplicated into each page. Template assets are emitted first, so a page can still override them.
- Saved reply templates can be removed. Creating them worked; there was no way to delete one.
- The llms.txt editor can preview what auto-generation would produce, without overwriting whatever you have typed.
4.4.1 — Font family is no longer discarded
- Setting a font on an element did nothing: font-family was missing from the properties the builder knows how to write out, so the rule was dropped and the element kept the theme's font. Font-style and white-space were missing for the same reason.
4.4.0 — Shortcodes typed into the builder now run
- A shortcode placed in builder text was printed on the page as literal text. Putting a Velox form, or anything else that uses a shortcode, into a page built with the builder simply did not work. Shortcodes are now run after the text is sanitised, so the content is still filtered but registered shortcodes render as intended.
4.3.2 — Builder images can carry alt text
- Images placed with the builder always output an empty alt attribute, whatever was set, so they were invisible to search engines and unusable for anyone on a screen reader. The element's alt text now reaches the page.
4.3.1 — Element styling was being thrown away on pages without a navigation element
- Per-element styling only reached the page when the page happened to contain a navigation element. The text effects, the utility presets, the grid layouts, the aspect-ratio box and the Google Reviews styling all write their CSS into the same place, and that place was only ever printed as part of the navigation block. A page without navigation lost every one of them.
- Align-self, justify-self, grid-column, grid-row and text-wrap are now understood, so rules using them are no longer discarded.
4.3.0 — Google Reviews ships with designs, and says how to preview them
The reviews element asked you to pick a design, but no designs existed until you built one yourself — and the only way to see anything at all was to connect Google first.
- Five designs are included: Cards, Slider, Minimal, Compact list and Single spotlight. They are always available, including on a site that has never opened the Reviews screen, and any of them can be duplicated and changed.
- The element now says how to see example reviews instead of only pointing at a connection you may not have yet, and says so on the canvas once they are switched on.
- Your own saved designs always take precedence over an included one of the same name.
4.2.0 — After purging, Velox offers to measure
Clearing the cache used to be a dead end. It now offers the obvious next step: run the built-in PageSpeed check, or test on Google's PageSpeed Insights.
- The offer appears wherever you purge from. It was already written, but the markup it needed only existed on the Performance screen, so purging anywhere else showed nothing.
- Purging from the front-end bar tests the page you are actually on, rather than the home page — that is the one place the exact page is known. Only URLs on this site are ever accepted.
4.1.2 — The character count on the Pages lis...
v3.99.3
Changelog
All notable changes to Velox. This file is the single source of truth — it shows
up both on the GitHub release and in the WordPress "View details" → Changelog tab.
Add a new section at the top for each release.
3.99.3 — Completes the block-editor script fix
- The remaining script error when opening a post from the SEO health list is gone. 3.99.2 fixed one of the blocks in this file; the resize handle sits in a different one and still could not reach the translation helper. There is now a single helper shared by the whole file rather than a copy per block, so no part of it can be missed again.
3.99.2 — Fixes a script error on every block-editor page load
- The SEO sidebar threw a ReferenceError twice on every editor load. The code that adds the drag-to-resize handle sits in its own block and was calling the translation helper defined in a different one. The handle lost its tooltip and two errors were logged each time a post was opened.
3.99.1 — Ten more slider settings
- Card sizing: set a card width outright, or a minimum and maximum width, or force a height — each per screen size. Cards can be made the same height as each other, or left to their own.
- Show a sliver of the next card so it is obvious the row scrolls.
- Snapping can be always, only when a card is already close, or off entirely for free scrolling. Movement can glide or jump.
- Arrows can sit below as before, over the slides, or outside the edges.
3.99.0 — Element settings marked responsive finally are
- Settings marked "can differ per screen size" now actually do. That badge has been shown on slides-shown, spacing, review columns, floating-button offsets and popup width for some time, but the value underneath was stored once and used everywhere — the badge was the only part that was responsive. Element settings now carry a breakpoint the same way styles always have, set at whichever viewport you are editing.
- A slider's slides-shown and spacing now change per breakpoint on the live page. They were previously written into each slide as an inline style, which cannot carry a media query and outranks every stylesheet, so the widest value won everywhere and nothing could override it. They are emitted as ordinary rules now.
- Nothing is migrated. A setting with no per-screen values behaves exactly as before and is still stored the same way.
3.98.1 — Reverts a no-op change from 3.97.2
- Reverts the four inspector controls added in 3.97.2. They were added to a list the Spacing and Size panels never read, so they never appeared and changed nothing. Those panels already offer all four padding and margin sides and both width and height with min and max. A comment now records this so the same mistake isn't repeated.
3.98.0 — Builder breakpoints now match Bootstrap 5
- Six viewports instead of three. The builder had Desktop, Tablet and Mobile; it now has Desktop plus xxl, xl, lg, md and sm, on Bootstrap 5's own boundaries (1400 / 1200 / 992 / 768 / 576, using the same .98 down-mixin edges Bootstrap uses). A Velox layout and a Bootstrap utility on the same page no longer disagree about where a viewport ends.
- Existing pages are not migrated and cannot lose styling. Rules saved under the old Tablet and Mobile keys are read as lg and md and still render at the same widths. They are emitted just before the matching new breakpoint, so if both exist the newer value wins. Nothing is rewritten on disk.
- The small breakpoint is a real breakpoint now. The 'portrait' global width was stored but never actually produced a media query.
3.97.2 — Four builder controls that existed but were never shown
- Margin left and margin right are now editable. Both were already supported everywhere — the model, the editor's CSS generator and the front-end renderer all handled them — but the inspector only ever offered top and bottom, so there was no way to set them.
- Min width and max height are now editable, for the same reason.
3.97.1 — Attribute and translation fixes in the admin
- Fixed: 54 broken
aria-labelandtitleattributes across the admin. An earlier translation pass wrapped these values invxT( … )without escaping out of the surrounding string, so the browser received the literal function call as attribute text instead of a label. Screen readers got nonsense on the media library checkboxes, the mail folder and connection controls, the field-type picker, the image lightbox and the builder size steppers, among others. - The maintenance indexing prompt is now translatable. Its heading, the three choices, the select-all label and the footer note were hardcoded English while the rest of the screen switched to German. Item counts now use proper singular and plural forms rather than being assembled from fragments.
3.97.0 — Reviews gets its own home, and three fixes
- Fixed: the indexing prompt after maintenance mode never appeared. Since maintenance can be switched from the admin bar on any screen, but the prompt lived in a script that only loaded on Velox pages, it was invisible everywhere else. It now loads wherever there is something to decide.
- Fixed: the snippet code box was completely unlabelled. The language badge and placeholder are now written into the page itself instead of being added by a script, so an empty editor always says what it expects.
- Google Reviews is now its own section in the sidebar and has a card on the dashboard, instead of being buried three levels down in Utilities.
- Example reviews in the Reviews tool: switch them on to see how reviews look before connecting Google. Clearly fake, and nothing leaves the screen.
3.96.0 — Accordion, tab and slide items in the outline
- The Structure panel now lists the items inside an accordion, tabs or a slider, each with the container that holds its content. A slider with six slides was previously a single line, so its slides could not be found or selected from the outline.
- Reorder items straight from the outline with the arrows that appear on hover. The content container moves with its item, so nothing ends up on the wrong panel.
- Clicking an item selects its element and opens the Settings tab where that item is edited.
3.95.0 — Icons you can actually pick
- New icon picker. Anywhere an element asks for an icon you now get a searchable, grouped picker with a live preview, instead of typing a name from memory and hoping.
- 70 icons covering contact, interface, trust and commerce, people and places, trades and services, and media and data — chosen for the work rather than shipping a library of thousands.
- Icons are drawn into the page directly. Nothing is fetched from an icon CDN, so no visitor IP addresses are shared with a third party and no icon font is downloaded for the sake of a few symbols.
- Floating buttons and the sticky contact bar now use the icon you choose, with a sensible fallback when you have not chosen one.
3.94.0 — Fixes and clearer settings across the admin
Fixes
- Fixed: saving a mail template made a copy instead of updating it. Saving the same template repeatedly piled up duplicates; it now updates in place.
- Fixed: the setup wizard started again after a reload. It only counted as finished if you explicitly dismissed it. Re-run it any time with ?velox_wizard=1.
- Fixed: SEO title and description counters only updated after a reload. They now count as you type.
- Fixed: risky settings sat flush against the amber line and some fields ran past the edge. The spacing rule was competing with another of equal weight, so whether it applied was down to chance.
Clearer
- Cache lifetime now has one-click presets (1 hour, 6 hours, 12 hours, 1 day, 1 week, 30 days, or until purged) and tells you in plain words what any number means — 36000 seconds reads as "= 10 hours".
- After purging the cache Velox no longer reports "WP Fastest Cache not active" as something skipped; not having it is normal. Instead you get links to check the result, both in Velox and on Google PageSpeed Insights.
- The snippet editor shows which language you are writing, with the wrapper Velox adds for you, so a PHP snippet is not mistaken for plain output.
- Maintenance mode now confirms itself wherever you are in the admin, instead of only inside Velox.
- SEO: import and export moved to the bottom of the page, out of the way of everyday settings.
Google Reviews
- Full styling controls: layout as a grid, list or slider, columns, spacing, card background, rounding, padding, border and shadow, star colour and size, name and text colours and sizes, and switches for the profile picture, date and Google logo.
- Example reviews for designing. Turn them on to style the block before the Google connection exists; they are clearly labelled and never appear once real reviews are in place.
- Filter by minimum rating and shorten long reviews.
3.93.0 — Real content inside accordions, tabs and slides
- Accordion panels, tab panels and slides can now hold anything — buttons, images, grids, any element — instead of plain text only. Each item gets its own container you can drop elements into, and the text fields stay as a shortcut for simple content.
- Adding or removing an item adds or removes its container to match.
- Fixed: the Navigation element ignored the "A WordPress menu" setting entirely. Choosing it produced no links at all; it now reads the menu, including submenus.
- A navigation with no menu found falls back to its typed links rather than rendering nothing.
3.92.0 — Navigation and floating elements
New elements
- Navigation — links from a WordPress menu or typed by hand, submenus, a burger menu with a breakpoint you choose, submenus on hover or click, and optional sticky behaviour that can shrink or hide as you scroll.
- Breadcrumbs — with optional search-engine mar...
v3.97.0
Changelog
All notable changes to Velox. This file is the single source of truth — it shows
up both on the GitHub release and in the WordPress "View details" → Changelog tab.
Add a new section at the top for each release.
3.97.0 — Reviews gets its own home, and three fixes
- Fixed: the indexing prompt after maintenance mode never appeared. Since maintenance can be switched from the admin bar on any screen, but the prompt lived in a script that only loaded on Velox pages, it was invisible everywhere else. It now loads wherever there is something to decide.
- Fixed: the snippet code box was completely unlabelled. The language badge and placeholder are now written into the page itself instead of being added by a script, so an empty editor always says what it expects.
- Google Reviews is now its own section in the sidebar and has a card on the dashboard, instead of being buried three levels down in Utilities.
- Example reviews in the Reviews tool: switch them on to see how reviews look before connecting Google. Clearly fake, and nothing leaves the screen.
3.96.0 — Accordion, tab and slide items in the outline
- The Structure panel now lists the items inside an accordion, tabs or a slider, each with the container that holds its content. A slider with six slides was previously a single line, so its slides could not be found or selected from the outline.
- Reorder items straight from the outline with the arrows that appear on hover. The content container moves with its item, so nothing ends up on the wrong panel.
- Clicking an item selects its element and opens the Settings tab where that item is edited.
3.95.0 — Icons you can actually pick
- New icon picker. Anywhere an element asks for an icon you now get a searchable, grouped picker with a live preview, instead of typing a name from memory and hoping.
- 70 icons covering contact, interface, trust and commerce, people and places, trades and services, and media and data — chosen for the work rather than shipping a library of thousands.
- Icons are drawn into the page directly. Nothing is fetched from an icon CDN, so no visitor IP addresses are shared with a third party and no icon font is downloaded for the sake of a few symbols.
- Floating buttons and the sticky contact bar now use the icon you choose, with a sensible fallback when you have not chosen one.
3.94.0 — Fixes and clearer settings across the admin
Fixes
- Fixed: saving a mail template made a copy instead of updating it. Saving the same template repeatedly piled up duplicates; it now updates in place.
- Fixed: the setup wizard started again after a reload. It only counted as finished if you explicitly dismissed it. Re-run it any time with ?velox_wizard=1.
- Fixed: SEO title and description counters only updated after a reload. They now count as you type.
- Fixed: risky settings sat flush against the amber line and some fields ran past the edge. The spacing rule was competing with another of equal weight, so whether it applied was down to chance.
Clearer
- Cache lifetime now has one-click presets (1 hour, 6 hours, 12 hours, 1 day, 1 week, 30 days, or until purged) and tells you in plain words what any number means — 36000 seconds reads as "= 10 hours".
- After purging the cache Velox no longer reports "WP Fastest Cache not active" as something skipped; not having it is normal. Instead you get links to check the result, both in Velox and on Google PageSpeed Insights.
- The snippet editor shows which language you are writing, with the wrapper Velox adds for you, so a PHP snippet is not mistaken for plain output.
- Maintenance mode now confirms itself wherever you are in the admin, instead of only inside Velox.
- SEO: import and export moved to the bottom of the page, out of the way of everyday settings.
Google Reviews
- Full styling controls: layout as a grid, list or slider, columns, spacing, card background, rounding, padding, border and shadow, star colour and size, name and text colours and sizes, and switches for the profile picture, date and Google logo.
- Example reviews for designing. Turn them on to style the block before the Google connection exists; they are clearly labelled and never appear once real reviews are in place.
- Filter by minimum rating and shorten long reviews.
3.93.0 — Real content inside accordions, tabs and slides
- Accordion panels, tab panels and slides can now hold anything — buttons, images, grids, any element — instead of plain text only. Each item gets its own container you can drop elements into, and the text fields stay as a shortcut for simple content.
- Adding or removing an item adds or removes its container to match.
- Fixed: the Navigation element ignored the "A WordPress menu" setting entirely. Choosing it produced no links at all; it now reads the menu, including submenus.
- A navigation with no menu found falls back to its typed links rather than rendering nothing.
3.92.0 — Navigation and floating elements
New elements
- Navigation — links from a WordPress menu or typed by hand, submenus, a burger menu with a breakpoint you choose, submenus on hover or click, and optional sticky behaviour that can shrink or hide as you scroll.
- Breadcrumbs — with optional search-engine markup.
- Anchor navigation — jump links that highlight the section currently on screen.
- Floating button — nine placements, offsets, and actions for links, phone calls, WhatsApp, email, scroll-to-top or opening a popup. Optional attention animation.
- Back to top, Announcement bar (dismissible, remembers the dismissal), Sticky contact bar (phone-friendly button row) and Reading progress.
How they behave
- Floating elements share one system for when they appear (page load, delay, scroll depth, an element coming into view, inactivity, or leaving the page) and how often (every time, once a visit, once a day, once ever).
- Placement and per-device hiding are written as real CSS, so nothing flashes in the wrong place while the page loads and hidden elements are genuinely hidden.
- On phones, where there is no cursor to detect, the leaving-the-page trigger becomes a scroll trigger instead of never running.
- Navigation uses one set of links for desktop and mobile, so search engines and screen readers see them once.
Fixes
- Fixed: hover never worked on submenus or tabs. The events used for hover do not travel up the page the way the code assumed, so hover mode did nothing at all.
- Fixed: clicking a hover submenu closed it. Hovering opened the menu and the click immediately shut it again, making it impossible to click through.
- Fixed: elements shown by a trigger stayed marked as hidden, so assistive technology was told the opposite of what was on screen.
- Fixed: closing an announcement bar did not stick when it was set to show every time. Closing something is deliberate and now lasts the visit.
3.91.0 — Interactive elements, and the foundation under them
New elements
- Accordion and FAQ — add sections, choose one-at-a-time or several open at once, set the icon side and heading level. Optional FAQ structured data, off by default.
- Tabs — above or beside, click or hover, and an option to become an accordion on mobile using the same content rather than a duplicate copy.
- Slider — slides shown, spacing, looping, autoplay with a play/pause control, arrows, dots and a position counter.
- Offcanvas panel, Popup / modal and Dropdown — edge, size, whether the page is pushed or stays put, backdrop, and how it can be closed.
- 36 layout, typography, content and utility elements: split screen, full-height section, aspect-ratio box, bento grid, auto stack, cluster, content + sidebar, gradient/outlined/highlighted text, drop cap, eyebrow, pull quote, vertical text, icon box, card, stats row, team member, logo strip, callout, badge, avatar group, trust badges, payment icons, case study card, CTA band, notice box, feature grid, skip link, screen-reader text, reading time, last updated, loading skeleton, empty state and anchor target.
Under the hood
- Elements now carry their own settings, so every element gets a properly organised Settings tab with sections, plain-language labels and controls that appear only when they are relevant.
- Interactive elements are keyboard-accessible and screen-reader-correct by default, following the W3C accessibility patterns for accordions, tabs, dialogs and carousels.
- The slider uses no carousel library. Slides are ordinary content in the page, so they are visible to search engines without JavaScript, nothing jumps while the page loads, and the first slide is prioritised for speed.
- Element code is only sent to a page that actually uses it — a page with an accordion does not carry the code for sliders.
- Anything that animates respects the visitor's reduced-motion setting.
Fixes
- Fixed: a setting switched off came back on. Turning any toggle off removed the setting entirely, so it fell back to its default — meaning "off" was impossible to save.
- Fixed: an empty popup could not be closed, because it collapsed to nothing and hid its own close button.
3.90.1 — Nothing shows through a floating panel
- Fixed: the style panel stayed visible behind an unpinned Add panel. The Add panel is narrower than the style panel, so its right edge stuck out and remained readable through the dimming. Dimming is not hiding — the column is now removed while a panel floats over it, and comes back the moment the panel is pinned or closed.
3.90.0 — Panels and shortcuts behave
- Fixed: the Add panel's pin did nothing. It was pinning the right-hand side instead of its own, so clicking it appeared to have no effect at all.
- Fixed: opening a panel closed the one on the other side. Structure and Add can now be open together, as can Settings...
v3.96.0
Changelog
All notable changes to Velox. This file is the single source of truth — it shows
up both on the GitHub release and in the WordPress "View details" → Changelog tab.
Add a new section at the top for each release.
3.96.0 — Accordion, tab and slide items in the outline
- The Structure panel now lists the items inside an accordion, tabs or a slider, each with the container that holds its content. A slider with six slides was previously a single line, so its slides could not be found or selected from the outline.
- Reorder items straight from the outline with the arrows that appear on hover. The content container moves with its item, so nothing ends up on the wrong panel.
- Clicking an item selects its element and opens the Settings tab where that item is edited.
3.95.0 — Icons you can actually pick
- New icon picker. Anywhere an element asks for an icon you now get a searchable, grouped picker with a live preview, instead of typing a name from memory and hoping.
- 70 icons covering contact, interface, trust and commerce, people and places, trades and services, and media and data — chosen for the work rather than shipping a library of thousands.
- Icons are drawn into the page directly. Nothing is fetched from an icon CDN, so no visitor IP addresses are shared with a third party and no icon font is downloaded for the sake of a few symbols.
- Floating buttons and the sticky contact bar now use the icon you choose, with a sensible fallback when you have not chosen one.
3.94.0 — Fixes and clearer settings across the admin
Fixes
- Fixed: saving a mail template made a copy instead of updating it. Saving the same template repeatedly piled up duplicates; it now updates in place.
- Fixed: the setup wizard started again after a reload. It only counted as finished if you explicitly dismissed it. Re-run it any time with ?velox_wizard=1.
- Fixed: SEO title and description counters only updated after a reload. They now count as you type.
- Fixed: risky settings sat flush against the amber line and some fields ran past the edge. The spacing rule was competing with another of equal weight, so whether it applied was down to chance.
Clearer
- Cache lifetime now has one-click presets (1 hour, 6 hours, 12 hours, 1 day, 1 week, 30 days, or until purged) and tells you in plain words what any number means — 36000 seconds reads as "= 10 hours".
- After purging the cache Velox no longer reports "WP Fastest Cache not active" as something skipped; not having it is normal. Instead you get links to check the result, both in Velox and on Google PageSpeed Insights.
- The snippet editor shows which language you are writing, with the wrapper Velox adds for you, so a PHP snippet is not mistaken for plain output.
- Maintenance mode now confirms itself wherever you are in the admin, instead of only inside Velox.
- SEO: import and export moved to the bottom of the page, out of the way of everyday settings.
Google Reviews
- Full styling controls: layout as a grid, list or slider, columns, spacing, card background, rounding, padding, border and shadow, star colour and size, name and text colours and sizes, and switches for the profile picture, date and Google logo.
- Example reviews for designing. Turn them on to style the block before the Google connection exists; they are clearly labelled and never appear once real reviews are in place.
- Filter by minimum rating and shorten long reviews.
3.93.0 — Real content inside accordions, tabs and slides
- Accordion panels, tab panels and slides can now hold anything — buttons, images, grids, any element — instead of plain text only. Each item gets its own container you can drop elements into, and the text fields stay as a shortcut for simple content.
- Adding or removing an item adds or removes its container to match.
- Fixed: the Navigation element ignored the "A WordPress menu" setting entirely. Choosing it produced no links at all; it now reads the menu, including submenus.
- A navigation with no menu found falls back to its typed links rather than rendering nothing.
3.92.0 — Navigation and floating elements
New elements
- Navigation — links from a WordPress menu or typed by hand, submenus, a burger menu with a breakpoint you choose, submenus on hover or click, and optional sticky behaviour that can shrink or hide as you scroll.
- Breadcrumbs — with optional search-engine markup.
- Anchor navigation — jump links that highlight the section currently on screen.
- Floating button — nine placements, offsets, and actions for links, phone calls, WhatsApp, email, scroll-to-top or opening a popup. Optional attention animation.
- Back to top, Announcement bar (dismissible, remembers the dismissal), Sticky contact bar (phone-friendly button row) and Reading progress.
How they behave
- Floating elements share one system for when they appear (page load, delay, scroll depth, an element coming into view, inactivity, or leaving the page) and how often (every time, once a visit, once a day, once ever).
- Placement and per-device hiding are written as real CSS, so nothing flashes in the wrong place while the page loads and hidden elements are genuinely hidden.
- On phones, where there is no cursor to detect, the leaving-the-page trigger becomes a scroll trigger instead of never running.
- Navigation uses one set of links for desktop and mobile, so search engines and screen readers see them once.
Fixes
- Fixed: hover never worked on submenus or tabs. The events used for hover do not travel up the page the way the code assumed, so hover mode did nothing at all.
- Fixed: clicking a hover submenu closed it. Hovering opened the menu and the click immediately shut it again, making it impossible to click through.
- Fixed: elements shown by a trigger stayed marked as hidden, so assistive technology was told the opposite of what was on screen.
- Fixed: closing an announcement bar did not stick when it was set to show every time. Closing something is deliberate and now lasts the visit.
3.91.0 — Interactive elements, and the foundation under them
New elements
- Accordion and FAQ — add sections, choose one-at-a-time or several open at once, set the icon side and heading level. Optional FAQ structured data, off by default.
- Tabs — above or beside, click or hover, and an option to become an accordion on mobile using the same content rather than a duplicate copy.
- Slider — slides shown, spacing, looping, autoplay with a play/pause control, arrows, dots and a position counter.
- Offcanvas panel, Popup / modal and Dropdown — edge, size, whether the page is pushed or stays put, backdrop, and how it can be closed.
- 36 layout, typography, content and utility elements: split screen, full-height section, aspect-ratio box, bento grid, auto stack, cluster, content + sidebar, gradient/outlined/highlighted text, drop cap, eyebrow, pull quote, vertical text, icon box, card, stats row, team member, logo strip, callout, badge, avatar group, trust badges, payment icons, case study card, CTA band, notice box, feature grid, skip link, screen-reader text, reading time, last updated, loading skeleton, empty state and anchor target.
Under the hood
- Elements now carry their own settings, so every element gets a properly organised Settings tab with sections, plain-language labels and controls that appear only when they are relevant.
- Interactive elements are keyboard-accessible and screen-reader-correct by default, following the W3C accessibility patterns for accordions, tabs, dialogs and carousels.
- The slider uses no carousel library. Slides are ordinary content in the page, so they are visible to search engines without JavaScript, nothing jumps while the page loads, and the first slide is prioritised for speed.
- Element code is only sent to a page that actually uses it — a page with an accordion does not carry the code for sliders.
- Anything that animates respects the visitor's reduced-motion setting.
Fixes
- Fixed: a setting switched off came back on. Turning any toggle off removed the setting entirely, so it fell back to its default — meaning "off" was impossible to save.
- Fixed: an empty popup could not be closed, because it collapsed to nothing and hid its own close button.
3.90.1 — Nothing shows through a floating panel
- Fixed: the style panel stayed visible behind an unpinned Add panel. The Add panel is narrower than the style panel, so its right edge stuck out and remained readable through the dimming. Dimming is not hiding — the column is now removed while a panel floats over it, and comes back the moment the panel is pinned or closed.
3.90.0 — Panels and shortcuts behave
- Fixed: the Add panel's pin did nothing. It was pinning the right-hand side instead of its own, so clicking it appeared to have no effect at all.
- Fixed: opening a panel closed the one on the other side. Structure and Add can now be open together, as can Settings and Add. Panels on the same side still replace each other, since they share the space. Pinning decides whether a panel pushes or overlays the canvas — nothing more.
- Fixed: Ctrl/Cmd + S sometimes opened the browser's own save dialog. Two causes: the shortcut only matched a lowercase "s", so Shift or Caps Lock missed it; and it listened after other handlers, any of which could stop it. It now matches regardless of case and runs before anything can swallow it.
- Fixed: canvas event listeners stacked up on every render. A click, double-click or shortcut on the page ran its handler once for every time the canvas had been redrawn since opening the editor — so a single Ctrl+S could fire several saves.
3.89.0 — Colours are editable again
- Fixed a regression: there was no way to edit your colours. Rebuilding the Global styles screen in 3.82.0 ...
v3.94.0
Changelog
All notable changes to Velox. This file is the single source of truth — it shows
up both on the GitHub release and in the WordPress "View details" → Changelog tab.
Add a new section at the top for each release.
3.94.0 — Fixes and clearer settings across the admin
Fixes
- Fixed: saving a mail template made a copy instead of updating it. Saving the same template repeatedly piled up duplicates; it now updates in place.
- Fixed: the setup wizard started again after a reload. It only counted as finished if you explicitly dismissed it. Re-run it any time with ?velox_wizard=1.
- Fixed: SEO title and description counters only updated after a reload. They now count as you type.
- Fixed: risky settings sat flush against the amber line and some fields ran past the edge. The spacing rule was competing with another of equal weight, so whether it applied was down to chance.
Clearer
- Cache lifetime now has one-click presets (1 hour, 6 hours, 12 hours, 1 day, 1 week, 30 days, or until purged) and tells you in plain words what any number means — 36000 seconds reads as "= 10 hours".
- After purging the cache Velox no longer reports "WP Fastest Cache not active" as something skipped; not having it is normal. Instead you get links to check the result, both in Velox and on Google PageSpeed Insights.
- The snippet editor shows which language you are writing, with the wrapper Velox adds for you, so a PHP snippet is not mistaken for plain output.
- Maintenance mode now confirms itself wherever you are in the admin, instead of only inside Velox.
- SEO: import and export moved to the bottom of the page, out of the way of everyday settings.
Google Reviews
- Full styling controls: layout as a grid, list or slider, columns, spacing, card background, rounding, padding, border and shadow, star colour and size, name and text colours and sizes, and switches for the profile picture, date and Google logo.
- Example reviews for designing. Turn them on to style the block before the Google connection exists; they are clearly labelled and never appear once real reviews are in place.
- Filter by minimum rating and shorten long reviews.
3.93.0 — Real content inside accordions, tabs and slides
- Accordion panels, tab panels and slides can now hold anything — buttons, images, grids, any element — instead of plain text only. Each item gets its own container you can drop elements into, and the text fields stay as a shortcut for simple content.
- Adding or removing an item adds or removes its container to match.
- Fixed: the Navigation element ignored the "A WordPress menu" setting entirely. Choosing it produced no links at all; it now reads the menu, including submenus.
- A navigation with no menu found falls back to its typed links rather than rendering nothing.
3.92.0 — Navigation and floating elements
New elements
- Navigation — links from a WordPress menu or typed by hand, submenus, a burger menu with a breakpoint you choose, submenus on hover or click, and optional sticky behaviour that can shrink or hide as you scroll.
- Breadcrumbs — with optional search-engine markup.
- Anchor navigation — jump links that highlight the section currently on screen.
- Floating button — nine placements, offsets, and actions for links, phone calls, WhatsApp, email, scroll-to-top or opening a popup. Optional attention animation.
- Back to top, Announcement bar (dismissible, remembers the dismissal), Sticky contact bar (phone-friendly button row) and Reading progress.
How they behave
- Floating elements share one system for when they appear (page load, delay, scroll depth, an element coming into view, inactivity, or leaving the page) and how often (every time, once a visit, once a day, once ever).
- Placement and per-device hiding are written as real CSS, so nothing flashes in the wrong place while the page loads and hidden elements are genuinely hidden.
- On phones, where there is no cursor to detect, the leaving-the-page trigger becomes a scroll trigger instead of never running.
- Navigation uses one set of links for desktop and mobile, so search engines and screen readers see them once.
Fixes
- Fixed: hover never worked on submenus or tabs. The events used for hover do not travel up the page the way the code assumed, so hover mode did nothing at all.
- Fixed: clicking a hover submenu closed it. Hovering opened the menu and the click immediately shut it again, making it impossible to click through.
- Fixed: elements shown by a trigger stayed marked as hidden, so assistive technology was told the opposite of what was on screen.
- Fixed: closing an announcement bar did not stick when it was set to show every time. Closing something is deliberate and now lasts the visit.
3.91.0 — Interactive elements, and the foundation under them
New elements
- Accordion and FAQ — add sections, choose one-at-a-time or several open at once, set the icon side and heading level. Optional FAQ structured data, off by default.
- Tabs — above or beside, click or hover, and an option to become an accordion on mobile using the same content rather than a duplicate copy.
- Slider — slides shown, spacing, looping, autoplay with a play/pause control, arrows, dots and a position counter.
- Offcanvas panel, Popup / modal and Dropdown — edge, size, whether the page is pushed or stays put, backdrop, and how it can be closed.
- 36 layout, typography, content and utility elements: split screen, full-height section, aspect-ratio box, bento grid, auto stack, cluster, content + sidebar, gradient/outlined/highlighted text, drop cap, eyebrow, pull quote, vertical text, icon box, card, stats row, team member, logo strip, callout, badge, avatar group, trust badges, payment icons, case study card, CTA band, notice box, feature grid, skip link, screen-reader text, reading time, last updated, loading skeleton, empty state and anchor target.
Under the hood
- Elements now carry their own settings, so every element gets a properly organised Settings tab with sections, plain-language labels and controls that appear only when they are relevant.
- Interactive elements are keyboard-accessible and screen-reader-correct by default, following the W3C accessibility patterns for accordions, tabs, dialogs and carousels.
- The slider uses no carousel library. Slides are ordinary content in the page, so they are visible to search engines without JavaScript, nothing jumps while the page loads, and the first slide is prioritised for speed.
- Element code is only sent to a page that actually uses it — a page with an accordion does not carry the code for sliders.
- Anything that animates respects the visitor's reduced-motion setting.
Fixes
- Fixed: a setting switched off came back on. Turning any toggle off removed the setting entirely, so it fell back to its default — meaning "off" was impossible to save.
- Fixed: an empty popup could not be closed, because it collapsed to nothing and hid its own close button.
3.90.1 — Nothing shows through a floating panel
- Fixed: the style panel stayed visible behind an unpinned Add panel. The Add panel is narrower than the style panel, so its right edge stuck out and remained readable through the dimming. Dimming is not hiding — the column is now removed while a panel floats over it, and comes back the moment the panel is pinned or closed.
3.90.0 — Panels and shortcuts behave
- Fixed: the Add panel's pin did nothing. It was pinning the right-hand side instead of its own, so clicking it appeared to have no effect at all.
- Fixed: opening a panel closed the one on the other side. Structure and Add can now be open together, as can Settings and Add. Panels on the same side still replace each other, since they share the space. Pinning decides whether a panel pushes or overlays the canvas — nothing more.
- Fixed: Ctrl/Cmd + S sometimes opened the browser's own save dialog. Two causes: the shortcut only matched a lowercase "s", so Shift or Caps Lock missed it; and it listened after other handlers, any of which could stop it. It now matches regardless of case and runs before anything can swallow it.
- Fixed: canvas event listeners stacked up on every render. A click, double-click or shortcut on the page ran its handler once for every time the canvas had been redrawn since opening the editor — so a single Ctrl+S could fire several saves.
3.89.0 — Colours are editable again
- Fixed a regression: there was no way to edit your colours. Rebuilding the Global styles screen in 3.82.0 dropped the colour and spacing editors, and nothing replaced them — the in-editor Colors page only listed them. Both are now editable in Settings → Global styles, with add, rename, recolour and remove.
- Spacing scale is editable there too, available as var(--space-0), var(--space-1) and so on.
- Unpublish is now reachable. A published page could only be taken off the site by deleting it, even though the ability to unpublish already existed with no button attached. It also clears the cache, which it previously did not — the page would have stayed visible to logged-out visitors.
- Removed the leftover header/footer role endpoint; its interface was retired in 3.80.0.
3.88.0 — The Settings screen now does something
- Fixed: every setting on the Builder Settings screen was ignored. CSS output, Minify CSS and Default container width were all saved to the database and read by nothing — changing them had no effect whatsoever.
- CSS output now works: "Inline" puts the page CSS in the head instead of writing a static file.
- Minify CSS now works: comments and whitespace are stripped from the generated stylesheet.
- Default container width is gone, because page width already lives in Global styles and two controls for one value is worse than one. The Settings scree...
v3.92.0
Changelog
All notable changes to Velox. This file is the single source of truth — it shows
up both on the GitHub release and in the WordPress "View details" → Changelog tab.
Add a new section at the top for each release.
3.92.0 — Navigation and floating elements
New elements
- Navigation — links from a WordPress menu or typed by hand, submenus, a burger menu with a breakpoint you choose, submenus on hover or click, and optional sticky behaviour that can shrink or hide as you scroll.
- Breadcrumbs — with optional search-engine markup.
- Anchor navigation — jump links that highlight the section currently on screen.
- Floating button — nine placements, offsets, and actions for links, phone calls, WhatsApp, email, scroll-to-top or opening a popup. Optional attention animation.
- Back to top, Announcement bar (dismissible, remembers the dismissal), Sticky contact bar (phone-friendly button row) and Reading progress.
How they behave
- Floating elements share one system for when they appear (page load, delay, scroll depth, an element coming into view, inactivity, or leaving the page) and how often (every time, once a visit, once a day, once ever).
- Placement and per-device hiding are written as real CSS, so nothing flashes in the wrong place while the page loads and hidden elements are genuinely hidden.
- On phones, where there is no cursor to detect, the leaving-the-page trigger becomes a scroll trigger instead of never running.
- Navigation uses one set of links for desktop and mobile, so search engines and screen readers see them once.
Fixes
- Fixed: hover never worked on submenus or tabs. The events used for hover do not travel up the page the way the code assumed, so hover mode did nothing at all.
- Fixed: clicking a hover submenu closed it. Hovering opened the menu and the click immediately shut it again, making it impossible to click through.
- Fixed: elements shown by a trigger stayed marked as hidden, so assistive technology was told the opposite of what was on screen.
- Fixed: closing an announcement bar did not stick when it was set to show every time. Closing something is deliberate and now lasts the visit.
3.91.0 — Interactive elements, and the foundation under them
New elements
- Accordion and FAQ — add sections, choose one-at-a-time or several open at once, set the icon side and heading level. Optional FAQ structured data, off by default.
- Tabs — above or beside, click or hover, and an option to become an accordion on mobile using the same content rather than a duplicate copy.
- Slider — slides shown, spacing, looping, autoplay with a play/pause control, arrows, dots and a position counter.
- Offcanvas panel, Popup / modal and Dropdown — edge, size, whether the page is pushed or stays put, backdrop, and how it can be closed.
- 36 layout, typography, content and utility elements: split screen, full-height section, aspect-ratio box, bento grid, auto stack, cluster, content + sidebar, gradient/outlined/highlighted text, drop cap, eyebrow, pull quote, vertical text, icon box, card, stats row, team member, logo strip, callout, badge, avatar group, trust badges, payment icons, case study card, CTA band, notice box, feature grid, skip link, screen-reader text, reading time, last updated, loading skeleton, empty state and anchor target.
Under the hood
- Elements now carry their own settings, so every element gets a properly organised Settings tab with sections, plain-language labels and controls that appear only when they are relevant.
- Interactive elements are keyboard-accessible and screen-reader-correct by default, following the W3C accessibility patterns for accordions, tabs, dialogs and carousels.
- The slider uses no carousel library. Slides are ordinary content in the page, so they are visible to search engines without JavaScript, nothing jumps while the page loads, and the first slide is prioritised for speed.
- Element code is only sent to a page that actually uses it — a page with an accordion does not carry the code for sliders.
- Anything that animates respects the visitor's reduced-motion setting.
Fixes
- Fixed: a setting switched off came back on. Turning any toggle off removed the setting entirely, so it fell back to its default — meaning "off" was impossible to save.
- Fixed: an empty popup could not be closed, because it collapsed to nothing and hid its own close button.
3.90.1 — Nothing shows through a floating panel
- Fixed: the style panel stayed visible behind an unpinned Add panel. The Add panel is narrower than the style panel, so its right edge stuck out and remained readable through the dimming. Dimming is not hiding — the column is now removed while a panel floats over it, and comes back the moment the panel is pinned or closed.
3.90.0 — Panels and shortcuts behave
- Fixed: the Add panel's pin did nothing. It was pinning the right-hand side instead of its own, so clicking it appeared to have no effect at all.
- Fixed: opening a panel closed the one on the other side. Structure and Add can now be open together, as can Settings and Add. Panels on the same side still replace each other, since they share the space. Pinning decides whether a panel pushes or overlays the canvas — nothing more.
- Fixed: Ctrl/Cmd + S sometimes opened the browser's own save dialog. Two causes: the shortcut only matched a lowercase "s", so Shift or Caps Lock missed it; and it listened after other handlers, any of which could stop it. It now matches regardless of case and runs before anything can swallow it.
- Fixed: canvas event listeners stacked up on every render. A click, double-click or shortcut on the page ran its handler once for every time the canvas had been redrawn since opening the editor — so a single Ctrl+S could fire several saves.
3.89.0 — Colours are editable again
- Fixed a regression: there was no way to edit your colours. Rebuilding the Global styles screen in 3.82.0 dropped the colour and spacing editors, and nothing replaced them — the in-editor Colors page only listed them. Both are now editable in Settings → Global styles, with add, rename, recolour and remove.
- Spacing scale is editable there too, available as var(--space-0), var(--space-1) and so on.
- Unpublish is now reachable. A published page could only be taken off the site by deleting it, even though the ability to unpublish already existed with no button attached. It also clears the cache, which it previously did not — the page would have stayed visible to logged-out visitors.
- Removed the leftover header/footer role endpoint; its interface was retired in 3.80.0.
3.88.0 — The Settings screen now does something
- Fixed: every setting on the Builder Settings screen was ignored. CSS output, Minify CSS and Default container width were all saved to the database and read by nothing — changing them had no effect whatsoever.
- CSS output now works: "Inline" puts the page CSS in the head instead of writing a static file.
- Minify CSS now works: comments and whitespace are stripped from the generated stylesheet.
- Default container width is gone, because page width already lives in Global styles and two controls for one value is worse than one. The Settings screen shows the current value and links to it, and any width previously saved here is carried over.
- Saving these settings clears the page cache, so a change to CSS output takes effect immediately.
3.87.0 — Reusables show where they are used
- Each reusable now says how many pages it appears on, and hovering lists them. Templates count too.
- Deleting a reusable that is in use warns you first and says how many pages will lose the block, instead of asking a blank "are you sure".
- Reusables get the same row actions as pages and templates: Edit, Rename, Duplicate, Delete.
- A clearer empty state pointing at "Make re-usable" in the builder's right-click menu, which is how most reusables actually get created.
3.86.0 — Page settings gains real depth
- Page background colour, per page.
- Animate On Scroll per page: override the site-wide animation, its duration and delay — or switch animation off for this page alone. Precedence runs element, then page, then site.
- Scripts per page: CSS and JavaScript that apply to this page only. The CSS is written after everything Velox generates, so it wins; the JavaScript runs in the footer of the published page.
- Both sit behind their own entries under Page settings, matching the rest of the settings navigation.
3.85.0 — Global styles in the editor, and pinning per side
- Global styles now live inside the builder, not on a separate admin screen. Settings → Global styles opens Colors, Fonts, Headings, Body Text, Links, Width & Breakpoints, Sections & Columns and Animate On Scroll, each on its own page. Changes save as you type, through the same store the admin screen uses, so the two can never disagree.
- The pin button is now per side. One pin for both stacks meant you could never dock the inspector while leaving a panel floating. Left and right are remembered separately.
- An unpinned panel now properly hides what is behind it. The dimming was too light, so the inspector stayed legible through it and the two panels read as one.
- Settings navigation rows are all the same width; the longest label used to stretch its own row.
- Clearer icons in the settings navigation.
3.84.0 — Settings inside the builder
- A Settings button in the top bar opens a panel with three areas: Page settings, Editor settings, and a link to Global styles.
- Page settings — page width and overlay header — apply to the document you are editing and are saved with it. Overlay lets the header sit on top of the first section instead of pushing it down, always or only from tablet or desktop up.
- Editor settings — indicate pa...
v3.91.0
Changelog
All notable changes to Velox. This file is the single source of truth — it shows
up both on the GitHub release and in the WordPress "View details" → Changelog tab.
Add a new section at the top for each release.
3.91.0 — Interactive elements, and the foundation under them
New elements
- Accordion and FAQ — add sections, choose one-at-a-time or several open at once, set the icon side and heading level. Optional FAQ structured data, off by default.
- Tabs — above or beside, click or hover, and an option to become an accordion on mobile using the same content rather than a duplicate copy.
- Slider — slides shown, spacing, looping, autoplay with a play/pause control, arrows, dots and a position counter.
- Offcanvas panel, Popup / modal and Dropdown — edge, size, whether the page is pushed or stays put, backdrop, and how it can be closed.
- 36 layout, typography, content and utility elements: split screen, full-height section, aspect-ratio box, bento grid, auto stack, cluster, content + sidebar, gradient/outlined/highlighted text, drop cap, eyebrow, pull quote, vertical text, icon box, card, stats row, team member, logo strip, callout, badge, avatar group, trust badges, payment icons, case study card, CTA band, notice box, feature grid, skip link, screen-reader text, reading time, last updated, loading skeleton, empty state and anchor target.
Under the hood
- Elements now carry their own settings, so every element gets a properly organised Settings tab with sections, plain-language labels and controls that appear only when they are relevant.
- Interactive elements are keyboard-accessible and screen-reader-correct by default, following the W3C accessibility patterns for accordions, tabs, dialogs and carousels.
- The slider uses no carousel library. Slides are ordinary content in the page, so they are visible to search engines without JavaScript, nothing jumps while the page loads, and the first slide is prioritised for speed.
- Element code is only sent to a page that actually uses it — a page with an accordion does not carry the code for sliders.
- Anything that animates respects the visitor's reduced-motion setting.
Fixes
- Fixed: a setting switched off came back on. Turning any toggle off removed the setting entirely, so it fell back to its default — meaning "off" was impossible to save.
- Fixed: an empty popup could not be closed, because it collapsed to nothing and hid its own close button.
3.90.1 — Nothing shows through a floating panel
- Fixed: the style panel stayed visible behind an unpinned Add panel. The Add panel is narrower than the style panel, so its right edge stuck out and remained readable through the dimming. Dimming is not hiding — the column is now removed while a panel floats over it, and comes back the moment the panel is pinned or closed.
3.90.0 — Panels and shortcuts behave
- Fixed: the Add panel's pin did nothing. It was pinning the right-hand side instead of its own, so clicking it appeared to have no effect at all.
- Fixed: opening a panel closed the one on the other side. Structure and Add can now be open together, as can Settings and Add. Panels on the same side still replace each other, since they share the space. Pinning decides whether a panel pushes or overlays the canvas — nothing more.
- Fixed: Ctrl/Cmd + S sometimes opened the browser's own save dialog. Two causes: the shortcut only matched a lowercase "s", so Shift or Caps Lock missed it; and it listened after other handlers, any of which could stop it. It now matches regardless of case and runs before anything can swallow it.
- Fixed: canvas event listeners stacked up on every render. A click, double-click or shortcut on the page ran its handler once for every time the canvas had been redrawn since opening the editor — so a single Ctrl+S could fire several saves.
3.89.0 — Colours are editable again
- Fixed a regression: there was no way to edit your colours. Rebuilding the Global styles screen in 3.82.0 dropped the colour and spacing editors, and nothing replaced them — the in-editor Colors page only listed them. Both are now editable in Settings → Global styles, with add, rename, recolour and remove.
- Spacing scale is editable there too, available as var(--space-0), var(--space-1) and so on.
- Unpublish is now reachable. A published page could only be taken off the site by deleting it, even though the ability to unpublish already existed with no button attached. It also clears the cache, which it previously did not — the page would have stayed visible to logged-out visitors.
- Removed the leftover header/footer role endpoint; its interface was retired in 3.80.0.
3.88.0 — The Settings screen now does something
- Fixed: every setting on the Builder Settings screen was ignored. CSS output, Minify CSS and Default container width were all saved to the database and read by nothing — changing them had no effect whatsoever.
- CSS output now works: "Inline" puts the page CSS in the head instead of writing a static file.
- Minify CSS now works: comments and whitespace are stripped from the generated stylesheet.
- Default container width is gone, because page width already lives in Global styles and two controls for one value is worse than one. The Settings screen shows the current value and links to it, and any width previously saved here is carried over.
- Saving these settings clears the page cache, so a change to CSS output takes effect immediately.
3.87.0 — Reusables show where they are used
- Each reusable now says how many pages it appears on, and hovering lists them. Templates count too.
- Deleting a reusable that is in use warns you first and says how many pages will lose the block, instead of asking a blank "are you sure".
- Reusables get the same row actions as pages and templates: Edit, Rename, Duplicate, Delete.
- A clearer empty state pointing at "Make re-usable" in the builder's right-click menu, which is how most reusables actually get created.
3.86.0 — Page settings gains real depth
- Page background colour, per page.
- Animate On Scroll per page: override the site-wide animation, its duration and delay — or switch animation off for this page alone. Precedence runs element, then page, then site.
- Scripts per page: CSS and JavaScript that apply to this page only. The CSS is written after everything Velox generates, so it wins; the JavaScript runs in the footer of the published page.
- Both sit behind their own entries under Page settings, matching the rest of the settings navigation.
3.85.0 — Global styles in the editor, and pinning per side
- Global styles now live inside the builder, not on a separate admin screen. Settings → Global styles opens Colors, Fonts, Headings, Body Text, Links, Width & Breakpoints, Sections & Columns and Animate On Scroll, each on its own page. Changes save as you type, through the same store the admin screen uses, so the two can never disagree.
- The pin button is now per side. One pin for both stacks meant you could never dock the inspector while leaving a panel floating. Left and right are remembered separately.
- An unpinned panel now properly hides what is behind it. The dimming was too light, so the inspector stayed legible through it and the two panels read as one.
- Settings navigation rows are all the same width; the longest label used to stretch its own row.
- Clearer icons in the settings navigation.
3.84.0 — Settings inside the builder
- A Settings button in the top bar opens a panel with three areas: Page settings, Editor settings, and a link to Global styles.
- Page settings — page width and overlay header — apply to the document you are editing and are saved with it. Overlay lets the header sit on top of the first section instead of pushing it down, always or only from tablet or desktop up.
- Editor settings — indicate parent elements on hover, and the class suggestions limit. These are your own preferences, stored in your browser, and never change the site.
- Global styles stay on their own screen rather than being squeezed into a narrow panel; the entry links straight there.
- The panel pins and collapses like every other panel in the editor.
3.83.0 — Animate on scroll
- Elements can now animate as they scroll into view: fade, fade up/down/left/right, zoom in and zoom out.
- Set a site-wide default in Global styles — animation, duration, easing, trigger offset, delay, play once or every time, and turn it off on mobile or tablet.
- Every element can override it or opt out from the Settings tab in the builder, including its own duration and delay.
- Visitors who ask their system for reduced motion never see animations, whatever is configured.
- The animation code only ships on pages that actually animate something, and browsers without IntersectionObserver simply show everything rather than leaving the page blank.
- Animations do not play inside the editor, so they never fight the builder while you work.
3.82.0 — Global styles
- Body text: font family, size, weight, line height and colour, applied to every built page.
- Headings: a shared heading font plus size, weight, line height and colour for H1 through H6 individually.
- Links: colour, hover colour, underline and weight.
- Width & breakpoints: page width, and the tablet, landscape and portrait breakpoints are now editable.
- Sections & columns: default padding on all four sides.
- Breakpoints were hardcoded in four separate places — the editor, the front-end renderer, and both halves of the class CSS editor. Editing a class could silently drop its responsive rules because the parser matched the old fixed numbers. They now come from one setting everywhere, including the editor's tablet and mobile preview widths.
- Leaving a field empty means inherit: Velox writes no rule at all...
v3.90.0
Changelog
All notable changes to Velox. This file is the single source of truth — it shows
up both on the GitHub release and in the WordPress "View details" → Changelog tab.
Add a new section at the top for each release.
3.90.0 — Panels and shortcuts behave
- Fixed: the Add panel's pin did nothing. It was pinning the right-hand side instead of its own, so clicking it appeared to have no effect at all.
- Fixed: opening a panel closed the one on the other side. Structure and Add can now be open together, as can Settings and Add. Panels on the same side still replace each other, since they share the space. Pinning decides whether a panel pushes or overlays the canvas — nothing more.
- Fixed: Ctrl/Cmd + S sometimes opened the browser's own save dialog. Two causes: the shortcut only matched a lowercase "s", so Shift or Caps Lock missed it; and it listened after other handlers, any of which could stop it. It now matches regardless of case and runs before anything can swallow it.
- Fixed: canvas event listeners stacked up on every render. A click, double-click or shortcut on the page ran its handler once for every time the canvas had been redrawn since opening the editor — so a single Ctrl+S could fire several saves.
3.89.0 — Colours are editable again
- Fixed a regression: there was no way to edit your colours. Rebuilding the Global styles screen in 3.82.0 dropped the colour and spacing editors, and nothing replaced them — the in-editor Colors page only listed them. Both are now editable in Settings → Global styles, with add, rename, recolour and remove.
- Spacing scale is editable there too, available as var(--space-0), var(--space-1) and so on.
- Unpublish is now reachable. A published page could only be taken off the site by deleting it, even though the ability to unpublish already existed with no button attached. It also clears the cache, which it previously did not — the page would have stayed visible to logged-out visitors.
- Removed the leftover header/footer role endpoint; its interface was retired in 3.80.0.
3.88.0 — The Settings screen now does something
- Fixed: every setting on the Builder Settings screen was ignored. CSS output, Minify CSS and Default container width were all saved to the database and read by nothing — changing them had no effect whatsoever.
- CSS output now works: "Inline" puts the page CSS in the head instead of writing a static file.
- Minify CSS now works: comments and whitespace are stripped from the generated stylesheet.
- Default container width is gone, because page width already lives in Global styles and two controls for one value is worse than one. The Settings screen shows the current value and links to it, and any width previously saved here is carried over.
- Saving these settings clears the page cache, so a change to CSS output takes effect immediately.
3.87.0 — Reusables show where they are used
- Each reusable now says how many pages it appears on, and hovering lists them. Templates count too.
- Deleting a reusable that is in use warns you first and says how many pages will lose the block, instead of asking a blank "are you sure".
- Reusables get the same row actions as pages and templates: Edit, Rename, Duplicate, Delete.
- A clearer empty state pointing at "Make re-usable" in the builder's right-click menu, which is how most reusables actually get created.
3.86.0 — Page settings gains real depth
- Page background colour, per page.
- Animate On Scroll per page: override the site-wide animation, its duration and delay — or switch animation off for this page alone. Precedence runs element, then page, then site.
- Scripts per page: CSS and JavaScript that apply to this page only. The CSS is written after everything Velox generates, so it wins; the JavaScript runs in the footer of the published page.
- Both sit behind their own entries under Page settings, matching the rest of the settings navigation.
3.85.0 — Global styles in the editor, and pinning per side
- Global styles now live inside the builder, not on a separate admin screen. Settings → Global styles opens Colors, Fonts, Headings, Body Text, Links, Width & Breakpoints, Sections & Columns and Animate On Scroll, each on its own page. Changes save as you type, through the same store the admin screen uses, so the two can never disagree.
- The pin button is now per side. One pin for both stacks meant you could never dock the inspector while leaving a panel floating. Left and right are remembered separately.
- An unpinned panel now properly hides what is behind it. The dimming was too light, so the inspector stayed legible through it and the two panels read as one.
- Settings navigation rows are all the same width; the longest label used to stretch its own row.
- Clearer icons in the settings navigation.
3.84.0 — Settings inside the builder
- A Settings button in the top bar opens a panel with three areas: Page settings, Editor settings, and a link to Global styles.
- Page settings — page width and overlay header — apply to the document you are editing and are saved with it. Overlay lets the header sit on top of the first section instead of pushing it down, always or only from tablet or desktop up.
- Editor settings — indicate parent elements on hover, and the class suggestions limit. These are your own preferences, stored in your browser, and never change the site.
- Global styles stay on their own screen rather than being squeezed into a narrow panel; the entry links straight there.
- The panel pins and collapses like every other panel in the editor.
3.83.0 — Animate on scroll
- Elements can now animate as they scroll into view: fade, fade up/down/left/right, zoom in and zoom out.
- Set a site-wide default in Global styles — animation, duration, easing, trigger offset, delay, play once or every time, and turn it off on mobile or tablet.
- Every element can override it or opt out from the Settings tab in the builder, including its own duration and delay.
- Visitors who ask their system for reduced motion never see animations, whatever is configured.
- The animation code only ships on pages that actually animate something, and browsers without IntersectionObserver simply show everything rather than leaving the page blank.
- Animations do not play inside the editor, so they never fight the builder while you work.
3.82.0 — Global styles
- Body text: font family, size, weight, line height and colour, applied to every built page.
- Headings: a shared heading font plus size, weight, line height and colour for H1 through H6 individually.
- Links: colour, hover colour, underline and weight.
- Width & breakpoints: page width, and the tablet, landscape and portrait breakpoints are now editable.
- Sections & columns: default padding on all four sides.
- Breakpoints were hardcoded in four separate places — the editor, the front-end renderer, and both halves of the class CSS editor. Editing a class could silently drop its responsive rules because the parser matched the old fixed numbers. They now come from one setting everywhere, including the editor's tablet and mobile preview widths.
- Leaving a field empty means inherit: Velox writes no rule at all rather than forcing a default over your own styling.
3.81.0 — Self-hosted fonts and per-weight preloading
- Preload is now per weight, not per family. Preloading a whole family pulls files the page may never use, which is worse than not preloading at all. Pick the one or two weights your first screen actually needs.
- "While fonts load" is a single site-wide choice instead of being set separately on every family.
- New Local files source. Point Velox at .woff2 files in your media library, one per weight, and it writes the @font-face rules for you. Self-hosted fonts preload the actual font file rather than a stylesheet, which is what preload is for.
- Each family is now a titled card and the weight sections name the font they belong to, so it is always clear which family you are editing.
- Weights you are not loading are dimmed out of the preload and file lists rather than offering choices that do nothing.
3.80.0 — Templates know what they are for
- Every template now has a purpose: Front page, 404, Search, Archives, Posts, Pages, or Catch-all. Set it from a dropdown on the row. When more than one template could apply, the most specific wins — a Front page template beats a Pages template, which beats Catch-all.
- Creating a template asks for a name and a purpose first, instead of dropping you into an untitled document.
- New templates start with an Inner Content element already in place, so a template can show page content from the moment it is created. Not having one was the single most confusing thing about building a template from scratch.
- Templates now have the same row actions as pages: Edit, Rename, Duplicate and Delete.
- The old unexplained "Header" and "Footer" buttons are gone; a template is a whole page frame, and its purpose says where it applies.
3.79.0 — The Velox Builder screens are readable again
- Fixed: headings, numbers and labels were nearly invisible. These screens are dark, but WordPress colours admin text for a light background and nothing overrode it — so section titles, the counters on the overview and most secondary text were dark grey on near-black.
- Fixed: every text field, dropdown and textarea was unstyled — WordPress painted them white with its own borders. All form controls on these screens now share one dark style with proper focus rings.
- The search field is shorter and wider, the type dropdowns read as small chips rather than full-size form controls, and rows no longer run into the edge of the card.
- "Not live" and "No Velox layout" now say something you can act on: "Build this page →", "Draft — publish it →", or "On your s...