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 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 site". The first two are links straight to the fix.
3.78.0 — Text you type on the canvas is no longer lost
- Fixed: text typed directly on the page could vanish when you saved. The canvas is an iframe, and clicking a button in the top bar does not reliably tell the browser you have finished editing — so the text was still only on screen and never reached the saved document. It looked especially bad on templates: the heading saved empty, so the whole template appeared to render nothing on the front end.
- Text is now committed before every save and publish, and whenever you click anywhere outside the canvas.
- Fixed: keyboard shortcuts did nothing while the cursor was on the page. Ctrl/Cmd + S, P, Z, D and \ now work whether you are typing on the canvas or not.
- A document saved without a content, tree or class map no longer breaks editing.
3.77.1 — Cache purging, and a status that cannot lie
- Fixed: publishing never cleared the page cache. Logged-in users bypass the cache, so changes looked fine to you while logged-out visitors kept being served the old page indefinitely. Publishing a page, publishing a template, changing global CSS or JavaScript, and switching the catch-all option now all clear the cache.
- Fixed: the page editor could show two contradictory statuses at once — "No Velox layout is attached" alongside a message saying the template wraps the page. The status now runs the same code the front end runs, so the two cannot disagree.
3.77.0 — Templates can now wrap pages you never built in Velox
- New catch-all option. Turn it on and your default template also wraps pages that have no Velox layout — their normal WordPress content is placed in the template's Inner Content slot. That is how you get one shared navbar and footer across an existing site without rebuilding every page.
- Off by default, deliberately. Switching it on makes Velox render every page on the site, which is not something to do silently — WooCommerce checkout and cart pages included. The switch lives in the Velox Builder box on any page editor.
- Refuses to apply when the template has no Inner Content element, because the page content would have nowhere to go and would vanish. It says so instead.
- Any page can still opt out individually with "No template — this page only".
- Fixed: the page editor contradicted itself, showing "Not live with Velox" and a template selection at the same time with no explanation of why the template was doing nothing.
3.76.1 — Dropdowns on the dark screens
- Fixed: the document-type and font dropdowns rendered as white boxes. WordPress styles every select in the admin with its own light theme, which overrode the dark styling on the Velox Builder screens and stretched the rows.
- Rows on the Pages overview are now a consistent height.
3.76.0 — View as, and a Live column on the overview
- "View as" now lists every page and post on the site, grouped into Velox pages, WordPress pages and Posts — not just Velox-built pages. A plain WordPress page previews with its own content.
- A preview bar now says what you are looking at: "Previewing as [page]", a reminder that the content is not part of the template and is not saved, and a Stop preview button. The dropdown alone was too quiet a signal.
- The View as control is styled properly and grouped, rather than a bare dropdown.
- Every row on the Pages overview now shows Live or Not live, and hovering explains why — no layout attached, still a draft, or saved as a Template/Reusable rather than a Page.
- Fixed: the top bar controls could overlap. The centre cluster was positioned independently of the rest of the bar, so the right-hand buttons slid underneath it as the bar filled up.
3.75.0 — Font loading you control
- Pick exactly which weights load for each font family. Velox previously requested 400, 600, 700 and 800 for every Google font whether you used them or not — four files per family, on every page.
- Italics are now opt-in per family rather than never available.
- font-display is now a choice (swap, optional, fallback, block, auto) instead of always swap, with each option explained in plain language.
- Preload any family to fetch its stylesheet at high priority, with a no-JavaScript fallback.
- Pages using Google Fonts now preconnect to both Google hosts, saving a round trip before text can paint.
- Fonts saved before this release keep working and default to 400 and 700.
3.74.0 — Global JavaScript
- New Global JavaScript manager, alongside the existing Global CSS files. The code button in the builder now has CSS and JavaScript tabs.
- Each script can be named, switched on or off without deleting it, and set to load in the head or the footer, either immediately, after the page loads, or without blocking.
- Scripts run on every Velox-rendered page. They deliberately do not run inside the editor — a global script that rewrites the page would fight the builder — so test them on the published page.
- Only users who are allowed to post unfiltered HTML can save scripts.
3.73.0 — Three long-standing annoyances
- Fixed: style sections closed themselves while you were typing. The style panel rebuilds on every keystroke, and each rebuild reset which sections were open — so a section could collapse under your cursor mid-edit. Your open and closed sections are now remembered.
- Fixed: two navbars when a template and a header/footer template were both set. The older header/footer roles and the newer template system were both wrapping the page. A template now takes precedence; header/footer roles still work on their own when no template applies.
- Fixed: the Insert Data panel opened in the wrong place, offset to a position left over from the old sidebar that was removed in 3.67.0.
3.72.1 — View page opens the homepage for templates
- A template has no URL of its own, so "View page" now opens the site homepage while you are editing one, instead of doing nothing. The same applies to the View and Open frontend entries in the exit menu.
3.72.0 — Template previews, Inner Content rules, and a front-end diagnosis
- The page editor now tells you whether Velox is actually serving the page, and if not, exactly why: no layout attached, still a draft, or the document is saved as a Template/Reusable rather than a Page.
- Front-end lookup made more forgiving: it now also finds the layout through the binding stored on the page itself, resolves revision IDs when previewing, and lets logged-in editors preview an unpublished layout.
- "View as" for templates: pick any built page from the top bar and its content appears inside the template's Inner Content slot, so you can see how a real page sits in the frame. Preview only — nothing is saved.
- Inner Content is now template-only — it no longer appears in the element list for pages or reusables, it can only sit at the top level (never inside a section or div, including by dragging), and a template can only have one.
- Open panels now dim the editor behind them instead of letting it show through. Pinned panels do not dim, since they own their own space. Clicking the dimmed area closes the panel.
- "Go to backend" returns where you came from: the WordPress editor if you opened the page there, the Templates or Reusables list for those, and the Velox overview otherwise.
3.71.0 — Three fixes, including a white-screen crash
- Fixed: a page could return a 500 error. If a document was used as its own template, the Inner Content slot kept inserting the page into itself until PHP ran out of memory. The slot is now filled once and nested repeats are ignored.
- Fixed: typing a unit into a number field produced values like "24%px". Half-typed units are ignored until they are complete, so typing "px" over an existing "%" now lands on 24px instead of garbage.
- Fixed: Backspace sometimes deleted the element you were styling. Every keystroke rebuilt the style panel, which threw away the field you were typing in — the next Backspace then hit the delete-element shortcut. The panel now keeps your field and cursor position, and Backspace no longer deletes elements at all (Delete still does).
- Change a document between Page, Template and Reusable straight from the overview, without opening the editor.
- When no templates exist, the page editor now links straight to creating one and explains that an existing page can simply be converted.
3.70.0 — Inspector rework, drag-to-move, and a real page & class manager
Editor
- Padding and margin now sit side by side in a box layout, each with an All / Individual switch — one field for all four sides, or one per side. Your choice is remembered.
- Width, min-width and max-width share a row; height does the same. The style panel is wider.
- The class area was rebuilt. The active class used to be printed twice — once in a card, once as a chip — and nothing told you that editing a class changes every element using it. Now it says so, and the state picker is its own panel.
- Drag elements anywhere in the page structure: drop above, below, inside a container, or into empty space to pull something back out to page level.
- Elements can no longer be dropped into their own children.
- The "Add element" button is now flat text-and-icon rather than a filled block.
Fixes
- Fixed: dragging in the page structure did nothing. It was still wired to the old sidebar that was removed in 3.67.0.
- Fixed: min-width and max-height were silently thrown away — neither was registered in the style engine, so any value you typed vanished.
- Fixed: choosing a unit before typing a number snapped back to px.
- Fixed: opening the Add panel closed a pinned Structure panel even though they sit on opposite sides.
Pages overview
- Shows every page on the site, including ones never touched by Velox, with a Build button to start one.
- Filter by All / Velox pages / Templates / Reusables / Without Velox, plus search.
- Rename, Duplicate, View, Delete and open in WordPress straight from each row.
- Fixed: the counters at the top always read zero. They were hardcoded.
Classes
- Filter between your own classes and the ones Velox creates for new elements.
- Edit opens the class's full CSS — including :hover states and media queries — as editable text, and you can rename it in the same window.
- Anything unsafe or unrecognised in the CSS is dropped on save rather than stored.
3.69.0 — Units you can pick, and two template/reusable fixes
- Units are now a dropdown. Click the "px" next to any size field and switch to %, em, rem, vh, vw or auto. Typing a unit straight into the number field works too — enter "100%" and the % moves onto the chip by itself.
- Ctrl/Cmd + D duplicates the selected element.
- Fixed: reusables lost their text. Saved reusables only stored the structure and styling, so pasting one gave you correctly-styled empty boxes. They now carry their content, and a reusable you just created is insertable immediately instead of after a reload.
- Fixed: a document could not be turned into a template. The type was only ever set from the URL, so anything started via "New page" was stuck as a page. There is now a Page / Template / Reusable picker beside the title in the builder.
- Publishing a template or reusable no longer creates a stray WordPress page for it.
- Switching a document to "Template" makes it the site default if no default is set yet.
3.68.0 — Templates that actually wrap your pages
- New "Inner Content" element. Drop it into a template to mark where each page's own layout belongs. A template can now be a real navbar + content + footer instead of just a header and footer with a gap between them.
- "Render page using template" now appears on every page and post editor, under the Velox Builder box. Pick a specific template, opt this page out entirely, or leave it following the site default.
- The first template you create becomes the site default automatically — and because the default lives in one setting rather than being copied onto each page, pages you built before that template existed pick it up too.
- If a template has no Inner Content element, the page content is appended after the template rather than disappearing.
- The builder's "Add element" button is now a flat icon-and-text button in the top bar instead of a filled blue block.
3.67.0 — Builder: one left column, richer right-click menu
- The left sidebar is gone. "Add element" is now a button in the top bar, Reusables moved in with the other tool icons, and the duplicate Settings shortcut was dropped (it was already in the logo menu). The editor went from three stacked left columns down to one.
- The style panel only appears when you select something. With nothing selected the canvas gets the full width instead of showing an empty column. Add an element and the panel slides straight in for it.
- Right-click menu rebuilt: Copy, Paste, Duplicate, Delete, Rename, Export, Wrap with div, Hide, Make re-usable — with keyboard shortcuts shown next to each.
- Rename gives an element a friendly name in the page structure without touching its markup or classes.
- Export copies an element and all its styles as JSON to your clipboard.
- Wrap with div puts a container around an element in place.
- Hide keeps an element in the builder — ghosted, still editable — but leaves it off the published page entirely.
- Conditions is listed in the menu but not built yet; it is greyed out and marked SOON rather than quietly missing.
3.66.0 — Pin and collapse the builder panels
- Panels can now be pinned: a pinned Structure, History, Global CSS or Add-element panel pushes the canvas across instead of covering it, so you can style and see your page at the same time. The pin is shared — set it once and every panel opens the same way.
- New Hide left panels and Hide right panel buttons in the top bar slide the side panels off screen to give the canvas the full width. Shortcuts: Ctrl/Cmd + \ for the left stack, Ctrl/Cmd + Shift + \ for the right one.
- The right-hand toggle remembers which panel you last had open and brings that one back.
- Your pin and collapse choices are remembered between sessions.
- Fixed the missing WordPress icon, which showed as a blank square in the Add-element list, the page structure and on WordPress data elements in the canvas.
3.65.0 — Velox Builder: states, spine cleanup, styled inputs (wave F)
- State selector now includes :active out of the box plus a + button to add any custom pseudo-class (:visited, :nth-child(2), etc.); the generated CSS renders whatever states you use.
- Removed the separate Layers list from the left spine — element editing lives in the inspector and the full tree is in the Structure panel (reachable from the spine or the top bar).
- Styled the settings/inputs properly: focus ring, hover states, custom dropdown chevron, and clearer read-only fields. Inspector is wider for more room.
3.64.0 — Velox Builder: exit fix, contrast, duplicate, shortcuts + right-click (wave E)
- Fixed the Exit menu: Open frontend / Go to backend / View page now resolve to real URLs even when you opened the builder by document (they were dead when no post was bound).
- Right-click any element (in the canvas, layer tree or structure) for a context menu: Copy, Paste, Duplicate, Make reusable, Remove.
- Keyboard shortcuts: Ctrl/Cmd+S saves, Ctrl/Cmd+P publishes, Ctrl/Cmd+C copies the selected element, Ctrl/Cmd+V pastes it into the element you right-clicked/selected (inside it if it is a container).
- "Make reusable" saves the selected element (with its classes) as a reusable block.
- Raised the contrast of icons, labels and muted text so they are no longer hard to see against the dark panels.
3.63.0 — Velox Builder: rich text toolbar + Insert Dynamic Data (wave D, #1)
- Text elements now get a formatting toolbar in the left panel: bold, italic, underline, strikethrough, align left/center/right and link. Formatting is kept when you save.
- New "Insert Data" picker with the full dynamic-data list (Post, Featured Image, Author, Current User, Blog Info, Archive, Advanced). Inserting a field drops a token into the text that renders the real WordPress value on the front end (post title/content/excerpt/date, author, site info, custom fields, etc.).
- For safety, the "PHP Function Return value" token is inserted as a placeholder and is not executed on the front end.
3.62.0 — Velox Builder: real element settings (wave D, #5)
- Elements with their own settings now surface them properly. Selecting a Google Reviews element jumps straight to its Settings, showing a prominent Connection + Design preset picker (with a hint to set up a source under Velox → Utilities → Google Reviews if none exist).
- WordPress-data elements get a "Show which field" picker (post title / content / featured image / menu). Links/buttons get a URL field plus an Open-in-same/new-tab choice that is honoured on the front end.
- Element settings are grouped into clear sections instead of being mixed in with style controls.
3.61.0 — Velox Builder: element-specific inspector (wave C)
- The inspector now adapts to the selected element: each element type shows its style groups in an order that fits it, and picks sensible Essentials.
- Text and headings lead with Typography; sections/divs/columns lead with Layout; buttons foreground Typography + Background; images and video lead with Size. No more Display-first on a text element.
3.60.0 — Velox Builder: layout + chrome rework (wave B)
- Moved all working panels to the left: the Add element / Layers spine and the element inspector now sit side by side on the left, with the canvas filling the rest.
- The Structure panel now opens on the right.
- Brightened the whole editor a step and unified every button to one consistent style (no more mixed colours/gradients).
- Reworked the top-bar right side: tool icons, then Publish and View page, then an Exit icon on the far right. The Exit icon opens a menu: Open frontend, Go to backend (WordPress editor), or View page in a new tab.
3.59.0 — Velox Builder: undo/redo + revert fixes, structure panel, delete sync (wave A)
- Fixed the top-bar undo/redo arrows — they now step one change at a time instead of jumping two or doing nothing. Selecting elements no longer pollutes the history.
- Fixed session-history revert: reverting to a point now restores exactly that state instead of wiping the page.
- Added a Structure button in the top bar that opens a collapsible outline of the whole page; click a node to select it, click the caret to collapse/expand.
- Only one panel (add element, CSS, history, structure, page switcher) can be open at a time now — opening one closes the others.
- Overview no longer shows pages whose WordPress post was deleted, and delete now syncs both ways: deleting a page in the Velox overview trashes the bound WordPress page, and trashing/deleting a WordPress page removes its Velox document.
3.58.0 — Velox Builder: session history
- The history (clock) button opens a session history panel: it starts empty when you open a page, lists each edit you make (add, delete, style, class, text…) newest-first, and lets you click any point to revert to it.
- History is in-memory only — it clears when you close the editor, so nothing is stored on the server.
3.57.0 — Velox Builder: global CSS files editor
- The code (</>) button now opens a right-side Global CSS panel where you create named CSS files and write CSS that applies to every Velox page.
- Changes apply live in the editor canvas and save automatically; the concatenated global CSS is output on every built page. Basic sanitising strips any </style> or <script> breakout attempts.
3.56.0 — Velox Builder: entry/exit fixes + Edit-with-Velox meta box
- Opening a page with Velox now inherits that page’s title instead of resetting to “Untitled”, and Exit returns you to that page’s WordPress editor (not the builder home).
- Added an “Edit with Velox” meta box on the page/post editor (like Oxygen’s), showing Build or Edit depending on whether the page already has a Velox layout.
- The page switcher loads the chosen document into the editor and updates the current title.
3.55.0 — Velox Builder: topbar full-width + missing icons
- Fixed the top bar collapsing to a centred cluster — it now spans the full width, with the three zones (logo/title, breakpoints/undo-redo, actions) pushed to left/centre/right as designed.
- Added the search, code (page CSS/JS) and history icons to the top bar right zone (they were in the design but missing from the build). Code toggles the live-CSS panel; search opens the page switcher.
3.54.0 — Velox Builder: Google Reviews + WordPress elements render live (waves 3–4)
- The Google Reviews element now renders your real reviews on published pages, using the connection and preset you pick in the element Settings (via the [velox_reviews] shortcode). In the editor it shows a labelled placeholder.
- WordPress-data elements now pull live data: Post title, Post content, Featured image and Menu/Nav render from the current post on the front end, with labelled placeholders in the editor.
3.53.0 — Velox Builder: inspector tabs (wave)
- The inspector now has Essentials / All styles / Settings tabs: Essentials shows the common controls, All styles shows everything, Settings holds element-level options.
- Class chips can be removed with an × and new classes added with “+ class”.
- Settings tab: pick the heading level (H1–H6), set a link URL for buttons/links, and (for the Google Reviews element) choose a reviews connection and design preset from your Velox Reviews setup.
3.52.0 — Velox Builder: page switcher (wave 2)
- Click the caret next to the page title to open a switcher: search across pages, posts and reusables, filter by All / Pages / Posts / Templates / Reusables, and see your Velox documents with status badges.
- The switcher also lists WordPress pages and posts that aren’t built with Velox yet, each with a "Build →" action to open them in the builder.
3.51.0 — Velox Builder: new add-element panel (wave 1)
- Replaced the old flat add-element list with a searchable, categorized accordion panel that opens on the left: Containers, Text, Links, Media, WordPress and Velox categories, each collapsible with icon element cards.
- Many more elements: Grid, Spacer, Divider, List, Quote, Text link, Video, Icon, plus WordPress-data placeholders (post title/content/featured image/menu) and a Velox “Google Reviews” element.
- Type-to-filter search across all elements. (Note: Video, Icon, WordPress-data and Google Reviews elements insert now; their live rendering lands in the next waves.)
3.50.0 — Velox Builder: editor chrome overhaul (wave 1)
- Rebuilt the editor top bar into three zones: left = Velox logo (with a menu: Builder settings / Back to WordPress) + editable page title; center = breakpoints + undo/redo; right = Exit, View page, and the save/publish actions.
- Save/Publish behaviour: a brand-new page shows a single Publish button; once a page has been published it shows both Save (admin-only draft) and Publish (live for everyone).
- Left panel now has Add element, Reusables and Settings buttons plus a "Find layer" search that filters the layer tree.
- Bigger editor canvas (up to 1200px) with tighter padding.
3.49.1 — Velox Builder: editor full-width fix
- Fixed the editor not filling the screen — the canvas column was collapsing to content width, leaving a large empty area on the right. The three panes (layers, canvas, inspector) now span the full viewport.
3.49.0 — Velox Builder: name your pages
- Added an editable title field in the editor top bar. Pages, templates and reusables can now be named (and renamed) instead of all saving as "Untitled" — the name is stored with the document and shows in every list.
3.48.0 — Velox Builder: reusables & template apply-rules, working
- Reusables now insert into pages. The editor Add menu lists your reusable blocks; pick one and it drops in as a live reference — it renders inline (styled) in the canvas and on the front end. Editing the reusable updates every page that uses it.
- Templates now apply as headers/footers. On the Templates screen, set any template as the site header or footer. Built pages are wrapped with them automatically, and all their CSS is merged into the page's single stylesheet.
- The renderer compiles one only-used stylesheet covering the page, every reusable it references, and the active header/footer templates — so nothing is missing and nothing is duplicated.
3.47.0 — Velox Builder: all admin sections, working
- Restored the full Velox Builder menu — Overview, Templates, Reusables, Classes, Global styles, Fonts & icons, Settings — and built each one for real (no placeholders).
- Classes: a real manager listing every class used across your pages with usage counts; rename or delete a class site-wide (rewrites every page that uses it and regenerates their CSS).
- Templates / Reusables: create, list, open and delete template and reusable documents (stored by kind); the editor now tracks which kind it is building.
- Global styles: define colour tokens and a spacing scale that output as CSS custom properties (:root variables) on every built page.
- Fonts & icons: register font families (Google Fonts by name or a self-hosted CSS URL) that load on every built page.
- Settings: choose static-file vs inline CSS output, toggle minification, set the default container width — all persisted.
3.46.0 — Velox Builder: full-bleed admin, blank canvas, honest menu
- The Velox Builder admin section is now full-bleed: WordPress update nags, other plugins' notices, Velox's own notices and the footer are all hidden on Builder screens, and the panel fills the whole content area.
- New pages open on a blank canvas (no demo content). Empty pages show a clear "Add element" prompt instead of a white void.
- Removed the placeholder Templates / Reusables / Classes / Global styles / Fonts / Settings menu items — these were non-functional stubs and should not have been shown. The menu now surfaces only what works: the Overview (which lists your real built pages) and the editor.
- Overview lists your actual Velox Builder pages with their draft/published status; "New page" and "Edit with Velox" are the ways in.
3.45.1 — Velox Builder: admin layout fix + edit entry points
- Fixed the Velox Builder admin section rendering as a blank white area — the panel was absolutely positioned and collapsed out of the wp-admin layout; it now sits correctly in the content area.
- Added "Edit with Velox" entry points: a row action in the Pages and Posts list tables, and an admin-bar link when viewing or editing a page. Opening one binds (or creates) a builder document for that page so publishing updates the real page.
3.45.0 — Velox Builder: image element
- The Image element is now real. Double-click it on the canvas (or use "Choose image" in the inspector) to open the WordPress media library, pick an image, and it renders in place — stored as its URL and shipped as a plain, lazy-friendly
on the front end.
- The standalone editor now loads the WordPress media library (wp.media) into its own document so the picker works inside the full-screen builder.
- Empty images show a clear placeholder in the editor and simply output nothing on the live page until set.
3.44.0 — Velox Builder: hover & focus states
- Every element can now be styled per interaction state. A Normal / :hover / :focus switcher sits under the class chips; pick a state and any property you set applies only in that state, falling back to Normal otherwise — exactly like a hand-written stylesheet.
- States compose with the class cascade and breakpoints, so you can have (for example) a different button hover colour on mobile. The front-end renderer emits the matching :hover / :focus selectors, so states work identically on the live page — verified byte-for-byte against the editor output.
- Backward compatible: existing documents (which only had normal-state rules) load and render unchanged.
3.43.0 — Velox Builder: full style controls
- The inspector now covers a real styling surface — six sections: Layout (flex/grid, wrap, justify, align, gap, grid columns), Size (width/height, max-width, min-height), Spacing (all paddings & margins), Typography (size, weight, line-height, letter-spacing, align, transform, decoration, colour), Background & effects (background, opacity, box-shadow), and Border (width, style, colour, radius).
- Sections collapse to keep the panel calm; the first three stay open by default.
- Every property runs through the same cascade resolver (blue/orange/pink source dots) and the same static-CSS output, so all of it is class-first, responsive, and ships only-used CSS. The renderer whitelist and value sanitiser were extended to match — only known properties reach the page and values still cannot break out of a rule.
3.42.0 — Velox Builder: canvas text editing & drag-reorder
- Edit text on the canvas: double-click any text element (heading, text, button) to edit it inline, right where it sits. Enter commits, Escape cancels — and it flows straight into the document like any other change (undoable, saved, published).
- Drag to reorder & renest: drag any layer in the Layers panel to move it — drop above/below a sibling to reorder, or onto a container to nest inside it. Drop indicators show exactly where it will land, and a node moves with its whole subtree.
3.41.0 — Velox Builder: publish flow
- Publish now takes a page live end to end. Hitting Publish saves the latest edits, binds the document to a WordPress page (creating one on first publish), flips it to published, and writes the static CSS — so the front-end renderer immediately serves it.
- The editor reflects live state: a green "Published" button and a View page link straight to the live URL. Reopening a published document restores that state.
- Unpublish reverts the page to draft; visitors fall back to the normal theme. The bound page is tagged so Velox-built pages stay identifiable.
3.40.0 — Velox Builder: front-end rendering
- Saved Velox Builder pages now render on the live site. When a page is bound to a published builder document, Velox outputs its own standalone document — clean semantic HTML, no theme wrapper — via template_include.
- Only-used CSS, as a static file: the page CSS is compiled from the document and written to uploads/velox/builder/doc-{id}.css, content-hashed for cache-busting, and rewritten on every save. If the uploads dir is not writable it falls back to a single inline style block. Either way, only the CSS the page actually uses ships — keeping Core Web Vitals green.
- The PHP renderer produces byte-for-byte the same HTML and CSS (including responsive media queries) that the editor shows, so what you build is exactly what visitors get. Only known CSS properties reach the output and all values are sanitised, so the document model can never inject arbitrary CSS.
3.39.0 — Velox Builder: insert & save
- Add elements: the Add button (top bar and layers panel) now opens a picker — Section, Div, Heading, Text, Button, Image, Columns — and inserts into the current container or after the selection. New elements render on the canvas immediately and seed a starter class.
- Duplicate & delete: every selected element has duplicate and delete actions in the inspector header (Delete/Backspace works too); both are fully undoable.
- Save & load: documents persist to the database. Save (button or ⌘S) writes the full document — tree, classes and content — and the editor reopens it on the same route. Save state is shown live in the top bar.
3.38.0 — Velox Builder: the editing engine
- The Velox Builder editor is now live and functional. Opening the editor mounts a real three-pane workspace — layers spine, live canvas, and a class-first inspector — driven by a central store.
- Live styling: changing a value in the inspector regenerates and injects CSS into the canvas instantly (no reload), the way a modern builder should feel.
- Class-first cascade: the inspector computes where each style comes from — set on the active class (blue), inherited from a base/combo/wider breakpoint (orange), or an element-only override (pink) — matching Webflow-style resolution. Switching the active class re-points every indicator live.
- Responsive: per-breakpoint editing (Desktop / Tablet ≤991 / Mobile ≤767) writes real media queries, desktop-first.
- Undo/redo across the whole document. Element insertion, persistence (save/load) and front-end rendering are the next passes.
3.37.0 — Velox Builder (foundation)
- New opt-in module: Velox Builder, a clean class-first visual page builder. This release lays the foundation — enable it under Utilities and a dedicated "Velox Builder" section appears in the menu (Overview, Templates, Reusables, Classes, Global styles, Fonts & icons, Settings), and the full-screen editor opens on its own route with no WordPress chrome.
- The builder renders its own standalone document and is being built to ship only the CSS each page actually uses, keeping Core Web Vitals green. The editing engine and front-end rendering land in the next releases.
3.36.0 — Media Editor: choose how many images to show
- The Media Editor (Alt text & titles) now has a "Show" control: pick 20, 50, 100, or All, or type a custom number. "All" loads every image in the library on one page instead of the old fixed 40-per-page cap.
- Fixed: search on the Media Editor page was sending the wrong parameter name and being ignored — it now filters correctly.
3.35.0 — Google Reviews: Oxygen builder element
- Added a "Velox Reviews" element to the Oxygen builder. Drop it on a page, pick a Connection and a Preset from two dropdowns, and it renders your reviews live in the builder — the same output as the shortcode, so styling stays driven by the preset (one source of truth).
- The integration is defensive: it only loads inside Oxygen, and if the Oxygen element API differs on your version it degrades gracefully rather than breaking the builder — the [velox_reviews] shortcode always remains as a fallback.
3.34.0 — Google Reviews utility
- New utility: Google Reviews. Show your Google reviews on the front end as a styleable slider or static grid.
- Connect via Featurable (free, caches many reviews) or the Google Places API (official, max 5). Every connection must be named before it can be saved.
- Build reusable design presets (slider or static grid) with full control: number of reviews, minimum rating, columns, slides per breakpoint, autoplay + speed, card background/radius/padding/gap/shadow, text/meta/star colours, name/text/avatar sizes, and toggles for avatar, date and stars.
- Embed anywhere with a shortcode: [velox_reviews connection="…" preset="…"]. Reviews are cached for 6 hours so page loads never hit the API.
- Note: an Oxygen editor tab for placing reviews visually is coming in a follow-up; for now use the shortcode.
3.33.0 — Bulk SEO actions in the Posts/Pages lists
- Select any number of posts or pages and apply a Velox SEO change to all of them at once from the native Bulk Actions dropdown: set Noindex / Index, set Nofollow / Follow, and exclude from / include in the sitemap. A confirmation notice reports how many items changed, and the sitemap is rebuilt automatically after a bulk sitemap change.
3.32.0 — Webmaster verification + settings import/export
- New SEO panel: Webmaster verification. Add site-verification tags for Google Search Console, Bing, Baidu, Yandex, Pinterest and Norton Safe Web. Paste either the bare token or the full tag the provider gives you — Velox extracts the token and outputs a clean tag in your on every page.
- New SEO panel: Import / Export settings. Export all your Velox settings to a JSON file and import it on another site to replicate a setup in one go. Imports are whitelisted against known settings and type-checked, so a stale or hand-edited file can’t inject junk.
3.31.0 — Resize fix, risky-row spacing, builder-aware frontend bar, sitemap toggle, full dashboard catalog
- Resizable SEO sidebar: the content inside now stretches to fill the new width instead of staying pinned at ~280px (no more empty gap).
- Performance risky mode: fields and toggles no longer sit flush on the yellow warning line — added proper padding so nothing overlaps it.
- Frontend admin tools now hide while you are editing a page in ANY builder (Oxygen, Bricks, Elementor, Divi, Beaver, Brizy, WPBakery, Cornerstone/Pro, Fusion/Avada, Thrive, Zion, Breakdance) and in the customizer preview.
- Posts/Pages list: the Index column is now "Index, Links & Sitemap" with a third toggle to include/exclude a page from the sitemap right from the list (blue "Included" / red "Excluded"), saved instantly and the sitemap rebuilt on the spot. The separate Sitemap column was merged into this.
- Dashboard "Everything in Velox" catalog now shows every utility — including Error Logger, Frontend Tools and PageSpeed — and displays switched-off utilities dimmed with an "Off" tag instead of hiding them.
3.30.0 — Editable Index & Links column, resizable SEO sidebar, sitemap independent of noindex
- The "Index" column in the Posts/Pages list is now "Index & Links" and is clickable: toggle Index/Noindex and Follow/Nofollow straight from the list, saved instantly, badges update live.
- The Velox SEO panel in the page editor is now horizontally resizable — drag its left edge to make it wider or narrower; the width is remembered per browser.
- Sitemap inclusion is now controlled ONLY by the "Exclude from sitemap" toggle. noindex / nofollow no longer affect whether a page is in the sitemap — a noindex page stays in the sitemap unless explicitly excluded. The sitemap column reflects this (a noindex page shows "In sitemap").
3.29.0 — More SEO columns in the Posts/Pages lists
- Added three columns and a length indicator to the Posts/Pages list (all shown only when the SEO module is on, toggled from Screen Options like the others):
- Focus keyword — shows each page’s focus keyword (or "— none —").
- Index — an Index / Noindex badge so you can spot pages accidentally hidden from search at a glance.
- Sitemap — In sitemap / Excluded / Not listed (honest: a noindex page shows "Not listed" since it never reaches the sitemap).
- Length badges on the SEO Title and Description columns: a colour-coded character count (green = good length, orange = short/long, red = way off) so bad-length meta stands out. Titles target 30–60 chars, descriptions 120–160.
- The three new columns are display-only; the SEO Title and Description remain click-to-edit inline.
3.28.1 — Sitemap updates instantly when you exclude/include a page
- Ticking "Exclude from sitemap" on a page now removes it from the sitemap immediately on save, and unticking adds it back — no manual Regenerate click needed. The bug: the sitemap was being rebuilt at the same moment the exclude value was written (same save_post priority), so it used the old value and lagged one save behind. The rebuild now runs late (priority 99), after every panel has saved its meta, so it always reflects the final state.
- Removed a now-redundant early sitemap rebuild that regenerated with stale values.
3.28.0 — "Force-include all pages" sitemap repair
- New button in SEO → XML sitemap: "Force-include all pages". If your sitemap only shows the homepage, this clears any leftover sitemap_exclude / noindex flags from every published page and post (including stuck maintenance-mode markers), switches the sitemap post types on, and regenerates. It reports how many hidden flags it cleared and how many URLs ended up in the sitemap.
- Hardened the sitemap query with suppress_filters + ignore_sticky_posts so another plugin's query filters can no longer accidentally empty it.
3.27.0 — "Exclude from sitemap" moved to the Velox page panel + maintenance safety
- The "Exclude this page from the sitemap" checkbox now lives in the Velox panel in the page editor (with the per-page optimization overrides), and has been removed from the SEO panel so there is only one control writing the flag — no more conflicting saves. The SEO panel still shows an "In sitemap / Not in sitemap" status indicator.
- Fixed the root cause of "sitemap only contains the homepage": Velox maintenance mode noindexes all pages while the site is under construction, and toggling maintenance off from the frontend quick-panel did not release them, leaving pages stuck noindexed and out of the sitemap. Turning maintenance off from the quick-panel now automatically releases every page it had hidden. (The Maintenance page still offers the deliberate keep/release choice.)
3.26.0 — SEO title & description columns in Posts/Pages lists
- The Posts and Pages list tables now show "SEO Title" and "SEO Description" columns (only when the SEO module is on). Toggle them from Screen Options ("Ansicht anpassen") like any column. Empty values show a clear "— add —" placeholder so you can see at a glance what still needs writing.
- Edit them two ways without opening each page: WordPress Quick Edit (the SEO fields are added there and pre-filled), or click a cell to edit it inline and save instantly (Enter to save, Esc to cancel; Ctrl/Cmd+Enter for the description).
- Also folds in the frontend admin bar fixes: the panel now renders reliably regardless of script load order, and the admin-bar toggle reloads so the page correctly reclaims/re-adds the reserved space and re-activates cleanly.
3.25.0 — Frontend admin tools (quick panel)
- New utility: a small arrow pinned to the bottom-left of the FRONT END, visible to admins only. Click it to open a quick-action panel and click again (or Esc / click away) to hide it.
- Panel actions: toggle the WP admin bar on/off (remembered per admin), purge the Velox cache, toggle maintenance mode, edit this page, open the Oxygen editor and Oxygen settings (shown only when Oxygen is active), open WordPress settings, and "View as visitor" which opens the current page rendered as a logged-out guest in a new tab (a signed guest render — it never touches your real login session).
- It is its own on/off utility (Utilities → Frontend admin tools), off by default.
3.24.4 — Fix "meta value could not be updated" when saving an unchanged SEO flag
- Publishing a page (typically a freshly-duplicated noindex/nofollow one) failed with the _velox_seo_noindex database error on the FIRST save when the flag was left as-is. Cause: when the value the editor sends already equals what is stored, WordPress's update_metadata() returns false (nothing changed), and the REST layer reports that as a database error. Toggling the flag made it a real change, which is why switching to index/follow and back "fixed" it. Two fixes: (1) duplicated pages now store the SEO flags in canonical boolean form, and (2) an update_post_metadata guard treats an unchanged flag save as success so the publish always goes through.
3.24.3 — Fix Duplicate not copying page-builder content
- Duplicating a page built with Elementor, Oxygen, Bricks, WPBakery or similar produced a blank copy. The meta-copy step ran maybe_unserialize() on each value before add_post_meta(), which stripped the escaped slashes out of builder JSON blobs (e.g. Elementor's _elementor_data) and corrupted them. Meta values are now copied raw with correct slashing, so PHP-serialized arrays AND builder JSON round-trip byte-for-byte. Gutenberg/classic pages were unaffected (their content lives in post_content, which was always copied correctly).
3.24.2 — Properly fix SEO flag save error (boolean meta)
- The 3.24.1 string-coercion approach did not fully fix the "Der Metawert von _velox_seo_noindex konnte in der Datenbank nicht aktualisiert werden" publish error. Root cause: the noindex / nofollow / sitemap-exclude toggles were registered as string meta, but the block editor and duplicate plugins send real booleans, and WordPress's REST round-trip comparison mismatched string vs boolean. These three flags are now registered as proper boolean meta (the standard Gutenberg toggle pattern) and the editor sends/reads real booleans. Existing '1'/'0' values still read correctly, so no data migration is needed.
3.24.1 — Fix "meta value could not be updated" on SEO flags
- Publishing a page (often a duplicated one) could fail with "Der Metawert von _velox_seo_noindex konnte in der Datenbank nicht aktualisiert werden." The noindex / nofollow / sitemap-exclude flags are registered as string meta, but a duplicate plugin or REST client can send a real boolean, which the strict schema rejected. Their sanitize now coerces any value (boolean, int, '1'/'0', 'true'/'false', 'on'/'yes') to a clean '1'/'0', so the save always succeeds. No data migration needed — existing values keep working.
3.24.0 — Import All-in-One WP Migration (.wpress) backups
- Backup & Restore now accepts All-in-One WP Migration .wpress files alongside Velox’s own .sql/.zip. Velox unpacks the .wpress container, extracts the database and wp-content files, and — the important part — rewrites the old site’s URL to this domain in a serialization-safe way (PHP-serialized option/widget values keep their correct byte lengths, so nothing corrupts). The result registers as a normal Velox backup and restores through the same path, with a safety backup taken first.
- Large files are streamed in chunks during unpack, so memory stays flat.
3.23.0 — AI crawler control & llms.txt (SEO)
- New AI crawlers panel in SEO: allow or block AI bots by what they do — training crawlers (GPTBot, ClaudeBot, CCBot, Google-Extended…), AI-search crawlers (OAI-SearchBot, PerplexityBot…) and on-demand fetchers (ChatGPT-User, Perplexity-User…). Your choices are added to robots.txt automatically, per group, with no hand-editing. Nothing is added when everything is allowed, so robots.txt stays clean.
- New llms.txt: an optional virtual /llms.txt, auto-generated from your pages (title, tagline, key pages and posts as Markdown links) and fully editable. It is served like the virtual robots.txt. Note: Google has said it ignores llms.txt, so this is for the AI systems that do read it, not a Google-ranking boost.
3.22.0 — Email log now captures every email, plus failure alerts
- The Mail & forms send log now records EVERY email your site sends — password resets, new-user notices, WooCommerce receipts and anything other plugins send — not just Velox contact-form and test emails. If an email goes missing, you can finally see whether it was even attempted and whether it failed.
- New "Alert me when a send fails" switch: emails the site admin when an outgoing email fails (rate-limited to once per hour so a burst can’t flood your inbox). The alert itself is never logged or looped.
3.21.1 — Error Logger in the sidebar & off-canvas
- The Error Logger now shows in the Velox sidebar and off-canvas menu under System once switched on, matching every other utility — it was reachable only from the Utilities hub before.
3.21.0 — Error Logger, and SEO moves into Utilities
- New Error Logger utility: catches every PHP error, fatal and failed API/HTTP request as it happens, grouped into clean accordions by type (fatal / PHP warnings / API & HTTP). Each error shows where it happened, how often, and — in plain English — what it means and how to fix it, from a built-in knowledge base of common WordPress issues. Switch it on under Utilities; clear all or dismiss errors one at a time. Appears in the Velox sidebar and off-canvas menu under System when switched on.
- PageSpeed is now a switch under Utilities like every other tool — turn it on or off whenever you want, and it appears in the sidebar under Essentials only when enabled. Its page is unchanged.
3.20.0 — Full German coverage across the entire plugin (PHP + JavaScript)
- Completed German translation of everything the user sees. Every PHP admin string (1035) and every JavaScript-rendered string (723) now has a German entry — 1727 total.
- Wrapped all the JavaScript UI that a PHP filter can never reach: toasts, the Custom Fields editor and field types, the Mail/SMTP setup, the block-editor SEO panel, the media picker, the snippets manager, and the dashboard. Each admin script now shares one translation dictionary through a small helper.
- Added bin/check-i18n.php, a regression guard that scans all PHP and JS for any translatable string missing a German entry, so future features can be checked before shipping.
- Fixed two translation-wrapping bugs found during the sweep: a local variable that shadowed the translate helper, and a value used in a comparison that must not be translated.
3.19.4 — Translate the "Everything in Velox" cards
- The catalog grid tiles on the dashboard (Custom Fields / Field groups, Media Editor / Alt text & files, etc.) were rendered from a hardcoded array with plain escaping, so both the names and descriptions stayed English. Both are now wrapped and translated.
3.19.3 — Translate the sidebar, dashboard stats and action messages
- The sidebar navigation labels and section headings (Utilities, Media Editor, Essentials, etc.) were rendered from hardcoded arrays and never translated — now wrapped and translated.
- Dashboard stat lines (grade, "N views", "vs last week", "updated X ago", "N of M optimizations on", "/ N pages", the intro subtitle) were bare English literals — now wrapped and translated.
- Added a JavaScript translation bridge (VELOX.i18n + a t() helper) and routed the action/confirmation toast messages through it, so those now appear in German too.
3.19.2 — Language actually applies everywhere + clearer switcher
- Fixed the translation only partially applying (most of the UI stayed English). The gettext filter was caching an early "no translation" decision made before the admin language setting was readable, which locked the whole page into English. It now resolves the chosen language only once it is actually available, so the entire admin UI switches to German.
- Removed the confusing "Follow WordPress" option — the switcher is now simply English / Deutsch.
3.19.1 — Restore clean pill look on the switcher
- Removed the visible chevron from the language switcher button so it keeps the clean globe + label pill look. The menu still opens on click, with the checkmark on the active language.
3.19.0 — Working English/German switcher, full German translation
- Rebuilt language switching from scratch. Instead of WordPress .mo files + locale (which never reliably applied because of just-in-time loading and caching), Velox now swaps strings directly through the gettext filter using a shipped PHP dictionary. This actually works, is scoped to Velox only (never touches the rest of wp-admin), and applies instantly on reload.
- Added German back with a complete dictionary covering every translatable string in the plugin admin UI — 1031 entries, nothing left out.
- New custom dropdown switcher (globe + current language + chevron, with a checkmark menu) that replaces the native select, so WordPress admin styling can no longer break its appearance.
3.18.3 — Language indicator is now a clean static pill
- Removed the dropdown entirely (it only had English anyway, and WordPress kept rendering its own select box + arrow inside the pill). The top-right indicator is now a simple static pill: globe icon + "English". The picker returns properly when more languages are re-added.
3.18.2 — Fix double-chevron on language switcher
- The switcher was showing two dropdown arrows (the custom chevron plus WordPress’s native select arrow) and splitting into two chunks. Forced appearance:none and removed the native background arrow so it renders as one clean pill.
3.18.1 — Reset to English + modern language switcher
- Removed all translation files and trimmed the switcher to English only, as a clean baseline while the language-switching mechanism is reworked.
- Redesigned the language switcher as a modern pill button that matches the Velox theme: white surface, hairline border, accent globe icon, custom chevron, and a subtle hover lift.
3.18.0 — Fixed 100+ untranslated strings across the whole admin
- The original translation pass missed ~103 hardcoded English strings (buttons, card titles, panel headings, tooltips, the cookie-banner builder, PageSpeed labels) — so things like "Purge caches", "Edit", "Recommendations", "Mobile/Desktop" stayed English in every language. Every one of those is now wrapped and translated.
- Regenerated the translation template with xgettext (canonical extraction) and rebuilt all 8 completed languages (German, Spanish, French, Italian, Portuguese, Dutch, Polish, Japanese) to 100% coverage of the human-readable admin UI.
- Turkish remains an English-fallback scaffold and will be completed next.
3.17.3 — Language switcher actually applies now
- Fixed the chosen language never taking effect (UI stayed English). WordPress 6.5+ loads translations just-in-time using the site locale, which bypassed the plugin_locale filter. Velox now explicitly unloads and force-loads the selected .mo up front in wp-admin, so the picked language is what renders.
3.17.2 — Language switcher background fix
- Removed the full-width white bar behind the language switcher. It was caused by reusing an existing .velox-topbar class that had its own background; renamed to .velox-langbar so the switcher now sits transparently in the top-right with no bar behind it.
3.17.1 — Language switcher scope + style fix
- Fixed the switcher changing ALL of WordPress admin instead of just Velox. Removed the determine_locale filter (which has no text domain and affected the whole admin); the language is now applied only through the domain-scoped plugin_locale filter, so it changes Velox screens and nothing else.
- Made the top-bar language switcher smaller and removed its background and border.
3.17.0 — Language switcher fix + moved to top bar
- Fixed the admin language never changing: translations now load on the init hook and the chosen language is applied via the determine_locale filter (which WordPress 6.x consults first in wp-admin), so picking a language now actually switches the UI instead of staying English.
- Moved the language switcher out of Settings. It now lives in a compact top bar, pinned to the top-right of every Velox page next to the header, with a globe icon. Changing it saves and reloads immediately.
3.16.9 — Japanese complete
- Japanese (ja) now covers 100% of the human-readable admin UI — every label, button, message, hint and long description, including all reconstructed sentences with placeholders. Uses WordPress-JP terminology (ダッシュボード, 投稿, 外観, 固定ページ) and consistent polite keigo (です/ます). Only literal code tokens stay untranslated.
3.16.8 — Polish complete
- Polish (pl_PL) now covers 100% of the human-readable admin UI — every label, button, message, hint and long description, including all reconstructed sentences with placeholders. Uses WordPress-PL terminology (Kokpit, Wpisy, Wygląd) and the correct 3-form plural rule. Only literal code tokens stay untranslated.
3.16.7 — Dutch complete
- Dutch (nl_NL, formal "u") now covers 100% of the human-readable admin UI — every label, button, message, hint and long description, including all reconstructed sentences with placeholders. Only literal code tokens stay untranslated.
3.16.6 — Brazilian Portuguese complete
- Brazilian Portuguese (pt_BR) now covers 100% of the human-readable admin UI — every label, button, message, hint and long description, including all reconstructed sentences with placeholders. Only literal code tokens stay untranslated.
3.16.5 — Italian complete
- Italian (formal "Lei") now covers 100% of the human-readable admin UI — every label, button, message, hint and long description, including all reconstructed sentences with placeholders. Only literal code tokens stay untranslated.
3.16.4 — French complete
- French (formal "vous") now covers 100% of the human-readable admin UI — every label, button, message, hint and long description, including all reconstructed sentences with placeholders. Only literal code tokens stay untranslated.
3.16.3 — Spanish complete
- Spanish (formal "usted") now covers 100% of the human-readable admin UI — every label, button, message, hint and long description, including all reconstructed sentences with placeholders. Only literal code tokens (robots.txt, type:post, etc.) stay untranslated.
3.16.2 — German 100% + sentence reconstruction
- Reconstructed 70 split sentence-fragments across all admin views into whole translatable strings (printf with placeholders for inline code/links), so long help text no longer mixes languages.
- German (formal "Sie") now covers 100% of the human-readable admin UI — every label, button, message, hint and long description. Only literal code tokens (dashicons, type:post, .htaccess, etc.) remain untranslated, as they must.
3.16.1 — German translation expanded
- German (formal "Sie") now covers 96% of the admin UI, including all the longer descriptions and hints. The remaining few are short sentence-fragments that will be completed in a later pass.
3.16.0 — Velox speaks your language
- New Language switcher in Settings: choose which language Velox's own admin screens are shown in, independent of your WordPress site language. WordPress and your other plugins are unaffected.
- English and German (formal "Sie") ship complete. Spanish, French, Italian, Portuguese (BR), Dutch, Polish, Japanese and Turkish are scaffolded and fall back to English until their translations are filled in.
- The entire admin UI — every screen, panel, label, button and hint — is now translatable, wired through the standard WordPress translation system.
3.15.2 — Snippets never silently deactivate themselves
- Velox no longer switches a PHP snippet off on its own. Previously a snippet could quietly flip to inactive after a runtime error, a leftover "execution breadcrumb" from an earlier request, or a shutdown-time fatal — often with nothing written to the error log, so it looked like the snippet "deactivated itself" for no reason. All three of those paths now log a clear
[Velox]line (naming the snippet, the message, and the file/line) and leave the snippet active. You stay in control of what's on. - Fixed the crash guard referencing an undefined
E_COMPILEconstant, which made the guard itself fatal instead of doing its job. - Snippet syntax-checking now uses a proper tokenizer pass instead of an
if (false) { … }eval wrapper, so validating a snippet can never collide with or redeclare the live copy.
3.15.1 — Maintenance now really does hide everything
- 3.15.0 put the hide-from-search behaviour behind its own switch that defaulted to off, so turning maintenance on did nothing. The switch is gone: maintenance mode hides everything from search, full stop.
- Pages now report noindex, nofollow the moment maintenance goes on, rather than only once the background pass had finished writing to every post — and it no longer depends on the SEO module being switched on.
- The "what should happen now?" question is worked out from the pages themselves instead of from a flag set at the moment you flipped the switch. If it was ever missed there was no way back to it; now it keeps asking until you answer, and closing it snoozes it only until the next time maintenance is touched.
3.15.0 — Maintenance mode can hide everything from search
- New switch on the Maintenance page: Hide all content from search engines. Turn it on with maintenance and every page, post and product is set to noindex, nofollow.
- Anything you create or duplicate while the window is open starts hidden too, so work done during a rebuild cannot go live in search before you have looked at it.
- Pages that were already set to noindex before you switched this on are left completely alone. Velox only records the ones it hid itself, so nobody's existing setting gets trampled and there is nothing to restore afterwards.
- Switching maintenance back off asks what should happen: make everything visible again, keep it all hidden, or pick page by page — anything left unticked stays hidden. The question appears wherever you switched maintenance off, including the admin-bar shortcut.
- Both jobs run in batches, so a site with thousands of posts will not time out.
3.14.1 — HTML lang switcher now appears in the navigation
- The new HTML lang switcher was reachable only from the Utilities hub. It now sits in the Velox side navigation under "Site & visitors" and in the dashboard shortcut grid, like every other tool.
- File Manager had the same problem and was missing from both lists since it shipped. It is now in the navigation under "System" and in the shortcut grid.
3.14.0 — HTML lang switcher
- New utility: HTML lang switcher. Sets the
langattribute on the<html>tag for sites where a theme or builder hard-codes it and the WordPress site language never reaches the page. Screen readers and search engines both read that attribute to decide what language a page is in, so a German site servinglang="en-US"is worth fixing. - The page reads your live front page in the browser and shows the attribute that is actually being served, rather than assuming the setting worked — which is the whole reason the tool exists. A coloured dot flags whether it matches what WordPress thinks it should be.
- Pick a language from the dropdown, or type your own tag. A before/after line shows exactly what the
<html>tag will look like once you save. - Switches on and off from Utilities like every other tool, and does nothing at all while it is off.
- Fixed:
--vx-monowas used in eight places across the admin stylesheet but never defined, so code chips, file paths and URL rows had been falling back to the normal interface font instead of monospace.
3.13.5 — SEO sidebar rebuilt to the approved design
- The score ring and the long checklist are gone. Status now reads as a row of pills — Indexed, In sitemap, No description — so the state of the page is one glance instead of seven lines.
- A Desktop / Mobile switch sits at the top and the search preview follows it, including the shorter description Google shows on phones.
- Sections are titled and separated properly, the field labels read as sentences with the character count on the same line, and the inputs got a proper reset so WordPress admin styling stops overriding them.
- Social preview and Advanced are collapsed rows with a summary of what is inside, and the focus keyword moved to Advanced next to the canonical URL.
- The sitemap control is now "Include in sitemap" and reads on when the page is included, instead of an inverted "exclude" toggle.
3.13.4 — The sidebar content actually widens now
- Dragging the sidebar moved its edge but the fields stayed narrow. WordPress re-applies its own width to one of the wrappers after Velox sets it, so the value Velox wrote was overwritten on the next render and the content snapped back to 280px.
- The width is now applied from a stylesheet rather than written onto the elements, which WordPress cannot overwrite. The preview and the fields fill whatever width you drag out, and stay there while you type.
3.13.3 — Dragging the sidebar wider now widens the content too
- Resizing the sidebar moved its edge but left the fields at their old width. WordPress puts wrappers between the sidebar and the panel that carry their own fixed width, and only one of them was being cleared. All of them are now, so the preview and the fields fill the space you drag out.
- The widths are re-applied if the editor re-renders and swaps those wrappers out, which previously snapped the content back to its original width mid-edit.
3.13.2 — Resizable SEO sidebar, and the counter bar stops crossing out the count
- The editor sidebar can now be dragged wider. WordPress fixes it at 280px with no way to change that, so Velox adds a handle on its left edge — drag to resize, double-click to go back to normal. The width is remembered, and only applies while the Velox SEO panel is open.
- A long search title used to push the whole panel sideways and leave a horizontal scrollbar under it. Long words now wrap instead.
- The character-count bar sat on top of the count itself and struck it through. The count has moved up next to the field label, where it reads as "48 / 60", and the bar sits under the input.
- The search preview shows the domain and a breadcrumb on separate lines, the way Google renders it, instead of one long URL broken mid-word.
- Search title and meta description gained placeholders showing what happens if you leave them empty.
3.13.1 — Field group header no longer goes dark on hover
- Hovering a Velox field group in the post editor turned its header near-black. Oxygen's admin stylesheet paints every meta box header with its dark colour on hover, and its selector outranked ours, so our styling never applied.
- The field group header now shows a light grey hover instead, with the title and the collapse arrow kept legible.
- The per-page "Velox" optimizations box was one selector away from the same problem and got the same guard.
3.13.0 — Velox SEO panel rebuilt
- The SEO sidebar now tells you how the page is doing instead of only holding fields. A score and a checklist sit at the top, in the same spirit as the SEO health screen but for the page you are editing.
- Each check names the consequence rather than the rule — "No meta description, Google writes its own" — and covers the search title, description, focus keyword, indexing, sitemap, whether the page has an H1, and whether its images have alt text.
- Missing title and missing description are now reported separately. Previously only the description was flagged, so a page with neither showed a single vague warning.
- Focus keyword moved up next to the fields it judges, and now reports whether it actually appears in the title and description.
- Character counts gained a bar under each field that turns amber near the limit and red past it, and the preview shows a proper empty state instead of instructions.
- Search engines, Social and Advanced are collapsed by default, so the checklist and preview are what you see first.
- Checks that need the page content (H1, image alt text) are skipped rather than failed on builder-made pages, which have no blocks to read.
3.12.4 — Actually beat Oxygen’s meta box styling
- The previous fix did not work. Oxygen ships "#editor .postbox > .postbox-header:hover { background: var(--oxy-dark) !important }", and since both rules were marked important the more specific selector won — which was Oxygen’s. Velox now matches that structure with two ids so its own box keeps normal colours on hover. Verified in a browser against the real rule; other meta boxes on the screen are left exactly as they were.
3.12.3 — Fix the Velox meta box turning dark
- The Velox box in the page editor changed colour on hover, with the header going black and the title becoming unreadable. That comes from other editor styling on that screen — Oxygen renders its own meta boxes dark, and it bleeds into every box on the page. Velox now pins its own box to normal WordPress colours so it stays readable whatever else is loaded, scoped to that box alone so nothing else on the screen is touched.
3.12.2 — Edit SEO opens the panel for you
- Clicking Edit SEO in the health list now opens that page in the editor with the Velox SEO sidebar already open, and puts the cursor in the first field that is still empty — so you land on the thing you came to fix instead of hunting for the panel.
- Works with both the current and older editor sidebar APIs, and retries briefly while the editor mounts rather than firing once and missing.
3.12.1 — SEO health: pages with no SEO at all
- Added two checks that were missing: pages with no search title, and pages with no SEO set at all — neither a title nor a description, where Google is guessing both. The summary now counts pages with SEO set against pages with none.
- Made the drill-down visible. Expanding an issue was a faint grey chevron that did not look clickable; it is now a proper "View pages" button that flips to "Hide" when open.
- Expanding is handled by one delegated listener on the list rather than re-binding every row on each render, so it cannot silently stop working.
3.12.0 — SEO health
- Added an SEO health panel to the SEO screen. It checks every published page and shows the counts at a glance: pages checked, indexable, set to noindex, with a description, and missing one.
- Below that, the issues worth fixing — pages with no meta description, images with no alt text, titles over 60 characters, duplicate titles competing for the same search, and anything set to noindex. Checks that come back clean are shown as Clear rather than hidden, so you can see they were actually run.
- Click any issue to see exactly which pages are affected, each with a link to edit its SEO and to open the page itself. Alt text links through to the Media Editor, which is where that gets fixed.
- The scan reads the database directly, so it is immediate and needs no crawling.
3.11.2 — Fix: resize controls missing from the media modal
- The resize controls added in 3.11.1 never appeared in WordPress’s Attachment details panel. The media modal builds that panel over AJAX, and the filter that adds the controls was deliberately skipped on AJAX requests — so the field was never generated. It is now registered for those requests too.
3.11.1 — Resize from the WordPress media library too
- The resize controls now also appear in WordPress’s own Attachment details panel, so you can resize straight from the media library or the picker in any editor, not only from Velox’s Media Editor.
- Same behaviour there: type a width and the height follows the original proportions, the link button unlocks it, quick presets from 50% to 200%, and the thumbnail refreshes in place once it is done.
- Only shown for images (never SVGs) and only to users who can manage options, since that is what the resize endpoint requires.
3.11.0 — Resize images from the Media editor
- Click any image in the Media editor to resize it. Enter a width and the height follows automatically from the original proportions (and the other way round); the link button turns that off if you want to stretch it deliberately.
- Quick presets for 50%, 75%, original, 150% and 200%, and hovering a thumbnail now shows its current dimensions.
- Images can be scaled up as well as down. WordPress refuses to enlarge through its normal resize call, so this scales through a full-frame crop instead.
- The file is replaced in place and its thumbnails and srcset are rebuilt, so the filename and every existing link to the image keep working. SVGs are refused, since vectors scale on their own.
3.10.6 — Two groups, working sizes, readable provenance
- Dropped the Possibly used group. Anything merely mentioned in the database but never rendered on a page now sits in Not in use, where it belongs — with a note saying where it was mentioned, so you can still see why it turned up.
- Renamed Not found to Not in use.
- Fixed the size total always reading 0 KB. The rewritten scanner returned a pre-formatted size string while the view still expected raw bytes, so every total added up to nothing. It sends real byte counts again.
- Fixed the "Seen on" line being cut off. It was locked to a single line with an ellipsis, so anything longer than the card was unreadable; it now wraps to two lines.
3.10.5 — Possibly-used cleaned up, archives crawled
- Builder templates are now excluded from the database passes as well, not just the crawl. Their stored layout data was still producing a database "mention", which pushed template demo images into Possibly used even though they appear nowhere on the site.
- The crawl now also reads archive pages: custom post type archives, the blog page, and category and tag listings. Images that only ever appear on a listing page — never on an individual permalink — were being missed and reported as unused.
3.10.4 — Stop crawling builder templates
- The crawl was walking page-builder template posts. Oxygen (and Elementor, Bricks, Divi, Beaver, WPBakery and block themes) register their templates and design libraries as public post types, so the crawler was opening each template on its own and marking whatever demo content it contained as "in use" — which is why artwork that appears nowhere on the site kept showing up as used, credited to a /?ct_template= URL.
- Builder template and library post types are now excluded, and any permalink that is a builder preview URL is skipped. Templates that are genuinely in use are still covered, because they render as part of the pages that use them.
3.10.3 — "In use" now means proven, not guessed
- Reworked how a verdict is reached. A string found somewhere in the database can no longer mark an image as in use — only real evidence can: the crawl actually rendering it on a page, or WordPress structurally pointing at it (featured image, product gallery, site logo or icon). Everything else that is merely mentioned somewhere is now "Possibly used".
- This is why wrong files kept appearing under Used: a mention in a draft, an old theme setting, or a stale builder CSS cache file was enough to promote an image to "in use".
- Stopped scanning page-builder CSS caches. Builders keep generated stylesheets for pages that no longer exist, so images from deleted pages looked used forever. The crawl reads the stylesheets pages genuinely load instead, which is both accurate and current.
- The media view now has three real groups — Not found, Possibly used, In use — and only Not found can be selected for deletion.
3.10.2 — The media scan now reads your actual pages
- Added a real crawl. The scan now reads every published page, post and custom post type, plus the homepage, and records which images are genuinely rendered — rather than inferring usage from database strings. Because it reads finished markup, it works the same for Oxygen, Elementor, Bricks, Divi, Beaver and anything else: by the time a page is output, it is all just img tags and url().
- The crawl runs from your browser rather than the server, so it is unaffected by hosts that block loopback requests — which is why the old front-end pass silently did nothing on some setups.
- Linked stylesheets are fetched and read too, so CSS background images are caught. That was the single biggest blind spot: a background defined in a stylesheet is mentioned nowhere in the database.
- Anything the crawl actually rendered is marked used outright and says which page it appeared on, overriding weaker database guesses.
- The summary now reports crawl coverage (for example "read 47 of 52 pages"), so "no reference found" is a statement about pages actually checked instead of an assumption.
3.10.1 — Media scan: stop images vouching for themselves
- Fixed the big one: every attachment stores its own file path in its own postmeta (_wp_attached_file, and every generated size in _wp_attachment_metadata). The scan read all postmeta, so every image referenced itself and the entire library came back "used". Attachment-owned meta is now excluded, along with revisions and trashed posts.
- A bare number in a custom field is no longer treated as an image reference. Prices, counts, order numbers and timestamps all look like attachment ids; it now only counts when ACF has registered a matching image field alongside it.
- An "id" in builder or block JSON only counts when it sits next to an uploads URL, so navigation items, form fields and settings no longer mark random images as used.
- The scanner no longer reads its own saved results, blueprints or transients back as evidence of usage.
3.10.0 — Unused media rebuilt
- Replaced the media scanner. It used to ask "for each image, does it appear anywhere?", which meant building huge content blobs, capping the work at 400 images and 20 pages, and guessing. It now walks every place a reference can live once, indexes what it finds, and checks attachments against that index — in resumable batches with a progress bar, so a large library cannot time out.
- Removed the dependency on loopback HTTP requests. The old front-end pass fetched pages over HTTP and silently skipped everything when the host blocked loopback (common on IONOS and similar), so on those sites it contributed nothing at all.
- Much wider coverage: posts and pages, custom fields and page-builder data, the options table (theme mods, widgets, customizer, Oxygen settings), category and user meta, theme and child-theme files, builder CSS caches, and Additional CSS. Featured images, product galleries and the site logo and icon are recognised as hard references.
- Fixed images being wrongly reported as unused. Resized, scaled and WebP-converted variants now normalise to the same key as the original, so an optimiser rewriting hero.jpg to hero.webp no longer makes the original look unused. JSON-escaped URLs and relative ../uploads/ paths in stylesheets are matched too.
- Fixed images being wrongly reported as used. Post revisions are no longer scanned, so an image removed from a page is no longer kept alive forever by an old revision.
- Results now say where a file was found, and separate "possibly used" (a weak match, such as a bare ID in a custom field) from "no reference found", so only genuinely unreferenced files are offered for deletion.
3.09.79 — Style panel controls stop fighting WordPress
- Fixed the number fields and dropdowns in the Style editor rendering wrong. WordPress’s own admin stylesheet puts a border, padding, line-height and a 30px minimum height on every input and select, and its selectors were outranking ours — so the input drew its own box inside the field and pushed the unit outside it, and dropdowns came out taller than everything else.
- All controls in the panel now carry a scoped reset that WordPress cannot override, so a control is always exactly one 32px box: value, stepper and unit inside a single border, and dropdowns matching the number fields. The folder manager’s name field uses the same reset.
3.09.78 — Gradient fixes and quieter number fields
- The gradient preview bar is now live. It was only redrawn when the whole panel re-rendered, so it kept showing the default blue-to-purple while your actual colours were something else entirely. It now follows the From, To, Type and Angle controls as you change them.
- Choosing Gradient seeds the From and To colours instead of leaving them on Inherit, so the bar and the form always agree.
- Fixed the Angle field showing px. A number field now defaults to the first unit it actually allows, so Angle shows deg and line height shows no unit at all.
- Fixed a stored angle like "135deg" being written into the preview as "135degdeg", which silently broke the gradient in the live preview.
- Toned down the unit chip in number fields. It had a grey pill background that made every field look like two separate boxes; it is now quiet text that only lifts on hover, so the value, stepper and unit read as one control. Non-px units still tint so they stand out.
3.09.77 — Folders: default names and a cleaner manager
- Folders left without a name are no longer silently discarded when you save. They get a sensible default (Folder 1, Folder 2 and so on) instead of vanishing.
- Rebuilt the folder manager to match the style editor: a proper header with a subtitle, colour swatches that show the chosen colour directly rather than a raw colour input, slim 32px name fields, an icon delete button that turns red on hover, a dashed Add folder button, an empty state, and a footer with Cancel next to Save.
3.09.76 — Deleted view fixed, and counts stop lying
- Fixed the Deleted button in the new rail doing nothing. The rail buttons were missing the class the filter handler looks for, and the handler was bound to the top bar only, so clicks in the rail never reached it. Inbox and Deleted in the rail both work now.
- Entry counts no longer include deleted submissions. A form showing "4 entries" with an empty list was counting four entries sitting in Deleted; totals, the per-form count and the last-7-days figure now count only live entries.
- Added a separate Deleted box beside the other stats, and the per-form entries page shows how many of that form’s entries are in Deleted.
3.09.75 — Inbox folder rail
- Folders and Deleted moved out of the top filter bar into a left rail, so they read as places you go rather than chips squeezed in beside the filters.
- The rail lists Inbox with a total count, then your folders as full rows with their colour dot, name and a count of what is in them, then New folder, with Deleted pinned to the bottom behind a divider. Deleted turns red when active.
- The top bar now carries only the status filters — All, Unread, Pinned and Done — each with an icon and count.
- On screens under 1180px the rail collapses to icons only so the reading pane keeps its room.
3.09.74 — Style fields rebuilt, icon actions, copyable shortcode
- Fixed the number fields in the Style editor. The stepper buttons had their own grey background, so every field read as three separate boxes instead of one control. The stepper is now transparent and only fades in on hover or focus, and the value, stepper and unit all sit inside a single bordered field.
- Dropdowns (Weight, Type, Position and the rest) now render without native browser chrome, so they are exactly the same 32px height as every other control. Verified across all nine controls in the panel.
- Deleted submissions use icon buttons with tooltips instead of full-width Restore and Delete forever buttons, and the "No submissions yet" panel no longer shows while viewing Deleted.
- Form rows use icon buttons for entries, edit and delete instead of three text buttons.
- The shortcode in the forms list is now click-to-copy, the same as in the editor, and flashes green when copied.
3.09.73 — Style editor: full control set, and custom styles win again
- FIXED: custom form styles were being overridden by the plugin’s own base stylesheet. The base input rule used a chain of :not() selectors, and each one adds specificity, so it outscored the per-form rules and silently killed them. The exclusions now sit inside :where(), which adds none, and per-form styles are printed after the base sheet instead of before. Anything you set in the Style editor now actually applies.
- Every target now has the full set of controls: background (solid colour, linear or radial gradient with angle and both stops, or an image with size, position and repeat), size (width, height, min height, max width), text (size, weight, line height, letter spacing, colour), shape (corner, border, border colour), spacing (padding and margin on all four sides) and shadow.
- Shadow keeps the None / Soft / Med / Strong presets and adds Custom, with X, Y, blur, spread, colour and inset, plus a live preview of the result.
- Colour rows are now laid out with the label on the left and the swatch, hex and reset pinned right, so the value no longer sits underneath the label text.
- Every control in the panel is the same slim 32px height — number fields, dropdowns and colour inputs all match, and one spacing scale is used throughout.
- Number fields gained stepper arrows and keyboard support: click the arrows or use up and down (hold shift for steps of ten).
3.09.72 — Mail & forms: live updates, inbox actions, delete fix
- Fixed entries not deleting. Deleting an entry soft-deletes it, but the entries list never filtered deleted rows out, so everything reappeared on reload. It now excludes them, and the confirmation says the entry moves to Deleted (restorable from the inbox) rather than claiming to delete permanently.
- The inbox and the per-form entries list now update on their own — new submissions appear and removed ones disappear without reloading the page.
- The inbox always shows its full interface. An empty inbox now shows a small message inside the list instead of replacing the filters, folders and reading pane with a paragraph.
- Inbox rows gained hover actions: pin, mark done, mark read/unread and delete. Folder assignment stays inside the opened message.
- The Deleted tab is now a proper outlined tab with a trash icon, and turns red when active, instead of blending into the filter bar.
- Fixed row hover using the same colour as the page background, which made rows look like holes in the panel. Added a dedicated hover token used by the forms table and entries list.
3.09.71 — Style editor rebuilt
- Replaced the tall list of style targets with a compact icon strip (Form, Title, Labels, Inputs, Button). The header is now about a quarter of its old height, leaving the panel to the controls.
- Added an "Applies to" dropdown for Labels and Inputs: style all of them, or pick one specific field. "All" stays selected by default so it is always clear whether an edit is global or per-field.
- The strip and the "Applies to" row are sticky, so you can switch target or field at any scroll position. They pick up a soft shadow once the controls scroll underneath.
- Controls are now collapsible groups (Colour, Text, Shape open; Spacing and Shadow folded) with paired values side by side instead of one long stack.
- Number fields have a clickable unit: switch any size, corner, border or spacing value between px, rem, em, % (and auto where it applies). Non-px units are highlighted so they stand out at a glance.
- Inherited values now read as inherited — a dashed empty swatch and grey "Inherit" text instead of a blue swatch labelled INHERIT. Anything you have overridden gets a revert button to put it back.
3.09.70 — Front end now matches the style preview
- The form’s front-end base styling now mirrors the Style editor preview exactly, so anything left on "inherit" looks the same in both places. Previously the preview had its own card look (white background, 18px corners, 40/56/44 padding, soft shadow, 48px inputs with 11px corners, stacked radios, centred pill button) while the front end fell back to a plain, much flatter default — which is why the two never matched and the default styling appeared to do nothing.
- Aligned: form card background, corner radius, padding and shadow; field and label spacing; label size/weight; input and textarea height, padding, border width, radius and font size; radio and checkbox layout (now stacked) and control size; help text; submit button size, radius, shadow and centring; and the form title.
- Submit alignment is now applied to the button itself (align-self) instead of the whole form, so Left/Center/Right/Full behave the same as in the preview.
- Added a "Show form title" toggle under Settings. The preview and the front end both respect it, so the heading no longer appears in one and not the other. It is off by default, so existing forms do not suddenly gain a heading.
3.09.69 — FIX: form styles never saved (empty-array bug)
- Fixed the real cause of form styles not persisting. An unstyled form was loaded with its style as a JSON array ([]) rather than an object. The Style editor set properties on that array, which worked for the live preview but were silently dropped by JSON.stringify on save (it ignores non-index array properties), so the database always received an empty style. The style is now coerced to a plain object on load, so edits actually save and reach the front end. Removed the 3.09.68 diagnostics.
3.09.68 — Diagnostic build for the style-persistence issue
- Temporary logging: the Style editor logs the style it sends on save, and the server returns the style it actually persisted, so we can pin down whether the style is lost in the browser payload or in storage. No functional change; to be removed once diagnosed.
3.09.67 — Fix: form styles stripped by Oxygen
- Form styles now print in the page footer instead of inline inside the shortcode output. Oxygen (and some other builders) strip inline <style> tags from shortcode/element content, which is why custom form styling never appeared on the front end even though it saved and previewed correctly. The styles are now emitted via wp_footer, which builders do not sanitize, so they reliably reach the page. Works together with the 3.09.66 cache purge.
3.09.66 — Fix: form styles not showing on a cached front end
- Saving a form now purges the page cache. Form styling is rendered inline into the page HTML, so a stale full-page cache (WP Fastest Cache, etc.) kept serving the old, unstyled version even though the styles were saved correctly. Velox_Cache::purge_all() now runs on every form save so the front end picks up style changes immediately.
3.09.65 — Settings panel grouped
- Organised the form Settings panel into clear labelled sections — After submitting, Spam protection, Embed — instead of one flat card, matching the grouped inspector and settings elsewhere. Added a hint under the shortcode.
3.09.64 — File upload field
- Added a File upload field. In the inspector you can set the allowed types (Images, PDF, Documents, or a mix) and a max size in MB. Uploads are validated server-side: size cap, an extension + real-content MIME whitelist (blocks disguised executables via wp_check_filetype_and_ext), is_uploaded_file check, and storage through WordPress’s own wp_handle_upload. The submission stores the file URL, which shows in notifications and the entries table. Front-end also checks size before sending. Every PHP file was verified with a real php -l linter before shipping.
3.09.63 — HOTFIX: fatal error from the new fields
- Fixed a fatal PHP error introduced in 3.09.61. Adding the Address field accidentally removed the "if multiselect" line in the submission handler, which closed the method early and crashed the plugin site-wide. Restored it and verified every PHP file with a real linter. Sorry again.
3.09.62 — Polish the new field styles
- Cleaned up the front-end styling of the new fields: bulletproof star-button reset (no more browser button chrome on the rating stars), tighter heading hierarchy, tidier address grid, and a clearer slider value badge. They inherit the form’s normal field spacing and whatever you set in the Style editor.
3.09.61 — Five new field types
- Added five genuinely useful field types (the ones listed earlier but never built): Time (time picker), Slider (range with min/max/step and a live value readout), Star rating (click-to-rate, configurable number of stars via the max setting), Address (street, city, ZIP, country in one field, combined on submission), and Section heading (a titled divider with optional description to organise long forms — the useful version of a page break, not raw HTML).
- Each is fully wired: palette, canvas preview, front-end render, required validation, and entry storage. File upload is intentionally not included yet — it needs its own pass for upload handling and security.
3.09.60 — Fix the form toolbar
- Removed the "FORM NAME" label above the name field; it is now a normal-sized input with a "Form name" placeholder inside, matching every other input in the plugin.
- Fixed the toolbar layout: no more giant gap before Build/Style/Preview and no more Notifications button wrapping onto a second row. One clean line — form context on the left, mode switcher next to it, actions on the right.
3.09.59 — Build density: crush the gaps, grid the palette
- Fixed the huge gaps in the field inspector. Every field had a 20px bottom margin stacking on top of the panel’s 14px flex gap (~34px between fields); removed the margin so fields sit ~11px apart. Tightened labels, hints, checkboxes and section headers to match.
- Turned the field palette from a stranded single-column list into a 2-column card grid, so you see far more field types at once and it fills the column instead of floating at the top with dead space below.
3.09.58 — Build inspector (2/5): grouped sections
- Grouped the field inspector (right panel in Build) into clear sections — Basics, Validation, Advanced, Conditional logic — instead of one flat list, matching the cleaner style-editor layout. Width and CSS class moved under Advanced so the common fields stay up top.
3.09.57 — Style editor: per-field styling back (cleanly)
- Brought back styling a single specific field, which the last version removed. The five clear global targets stay at the top; individual fields now live in a separate "Style one specific field" section below them, each labelled with the field name and type. You get per-field control without the overwhelming wall of items.
3.09.56 — Style editor: clear targets, less clutter
- Replaced the confusing element list (which showed every single field: Single line, Email, Phone...) with five plain-language targets, each with a description of what it edits: Whole form (background, padding & corners), Title (the heading), Labels (text above each field), Input boxes (every box people type into), Button (the submit button).
- Removed the All/Inputs/Text/Button tab bar — pointless now that there are only five clear targets. Bigger rows with real breathing room so it is not cramped or overwhelming.
3.09.55 — Style editor rebuild (1/5): single pick-and-style column
- Rebuilt the style-editor layout. The element picker (Elements list + All/Inputs/Text/Button tabs) moved from the far right into the left column, sitting directly above the controls for the selected element. You now pick and style in one place instead of bouncing between the right edge and left edge of the screen; the live preview fills the rest. First of a full Mail & Forms editor rebuild (build, preview, notifications, settings to follow).
3.09.54 — Form fixes: required validation, removed 3 fields, tighter canvas
- Removed Custom HTML, Page break and Calculation from the field palette.
- Required fields now actually block submission. Two fixes: (1) inspector changes (including the Required toggle) now auto-save, so "required" persists instead of only sticking if you manually hit Save; (2) the front-end form now validates before sending and shows "Please fill in the required fields before sending." with the empty fields highlighted, instead of submitting anyway.
- Tightened the vertical gap between field cards in the builder canvas (16px to 8px).
3.09.53 — Shortcode shown in the editor toolbar
- Dropped the separate embed bar. The form shortcode now shows as a small chip in the toolbar itself (in the empty space next to On/Off), and appears in all three modes — Build, Style and Preview. Click it to copy.
3.09.52 — Fix cramped form toolbar + roomy embed bar
- Fixed the cramped builder toolbar: the shortcode chip I had jammed into the top row was overflowing it. Moved the shortcode to its own full-width "Embed this form" bar directly under the toolbar (label + shortcode + Copy button + hint), with real breathing room. The toolbar now also wraps gracefully instead of overlapping on narrower screens.
3.09.51 — Form editor: shortcode chip + save-stays-in-style
- Added a click-to-copy shortcode chip ([velox_form id="X"]) right in the builder and style toolbars, so you can grab the embed code without leaving the editor.
- In Style mode, the button is now "Save styles" and it saves without kicking you back to the forms list — you stay in the style editor. (Styles also still auto-save on every change.)
3.09.50 — Fix: form styles not applying on the front end
- Fixed form Style-editor changes not showing on the front end. The style controls updated the live preview but never saved, so the front end kept rendering the unstyled version. Style edits now auto-save (debounced) the moment you make them, exactly like the Notifications toggles — so what you see in the editor is what ships. (Re-open a form and nudge any style control once to persist styles set before this fix.)
3.09.49 — HOTFIX: fatal error
- Fixed a fatal PHP error introduced in 3.09.46 (File Manager). The File Manager catalog description had a double-escaped apostrophe that closed the PHP string early, crashing the whole plugin (and the site). Removed the apostrophe. Sorry about that.
3.09.48 — File Manager matches the plugin
- Rebuilt the File Manager to match the rest of Velox: one flush 18px-radius panel with an internal divider (same construction as the mail inbox two-pane) instead of two small boxes, bigger 14px rows with 18px icons, real design tokens throughout, taller editor. No more mismatched look.
3.09.47 — File Manager redesign
- Reworked the File Manager UI to the Velox design system: replaced the emoji folder/file icons with real Lucide icons, muted neutral palette, tighter 8px spacing, cleaner rows with hover, breadcrumb navigation with chevron separators, and a proper monospace editor with a focus accent and an icon empty state.
3.09.46 — File Manager (dangerous tool)
- New File Manager utility: browse and edit your site files from the dashboard like SFTP/Plesk (admin-only, every path clamped inside the site root, 2 MB text-file limit, binary files blocked).
- Because it is risky, its card has a red background + warning text, and the first time you enable it you must confirm a modal explaining the risks (edit the wrong file and the site can go down, no undo). Cancel leaves it off; confirm enables it. After that first confirmation the modal never shows again — only the red card + warning remain.
- Did NOT build the "staging clone" request: a true safe replica is a whole separate product (separate DB + files + URL) and a half-built one could let edits hit the live site. Plesk WordPress Toolkit (Clone/Staging) or WP Staging does this safely at the host level.
3.09.45 — SMTP setup guide
- Added a "Setup guide" button next to "+ Add connection". It opens step-by-step instructions for getting the username/password/From right for whichever provider you use (Gmail app password, GMX/web.de IMAP toggle, IONOS, SendGrid, Mailgun, SES, Brevo, Postmark, Zoho, or a custom host). It opens on the provider of your first connection and has a dropdown to view any other.
3.09.44 — SMTP presets: GMX + web.de
- Added GMX (mail.gmx.net) and web.de (smtp.web.de) SMTP presets with hints (both need POP3/IMAP enabled in the webmail settings first, then your normal address + password). Note: personal Outlook.com no longer supports plain SMTP (Microsoft retired basic auth), and Gmail needs an App Password.
3.09.43 — Fix: SMTP toggle now saves + credential hints
- Fixed the "Send through SMTP" toggle (and the sender-identity / CAPTCHA settings on the Mail page) not persisting — they now auto-save on change like everything else. This regressed when settings auto-save was added, because those toggles live on the Mail page, not Settings.
- Each SMTP connection now shows a provider-specific credential hint (e.g. for IONOS: username = your full mailbox address, password = its password; SendGrid: username = "apikey"), so it is clear you still enter a username, password and From address after picking a provider.
3.09.42 — Mail inbox: colored folders
- Added folders to the inbox. Click "+ Folders" to create, rename, recolor or remove folders (each with its own color). Open a submission and use the folder dropdown to file it; folder chips appear in the filter bar (with color dots) to show just that folder. Completes the inbox overhaul (soft-delete + Deleted tab, bulk actions, pinned-to-top, and now folders).
3.09.41 — Mail inbox: bulk actions
- Each submission now has a selection checkbox. Select any (or use select-all) and a bulk bar appears to Mark read, Mark done, or Delete them all at once. Wired to the bulk backend from the previous version.
3.09.40 — Mail inbox: soft-delete + Deleted tab + restore
- Deleting a submission now moves it to a new Deleted tab instead of erasing it, and the inbox list count drops immediately. The Deleted tab lists everything you removed with Restore (send it back to the inbox) and Delete forever (permanent). Backs a new soft-delete column with a DB migration. (Bulk actions and colored folders are the next steps.)
3.09.39 — SMTP provider presets
- Added provider presets to each SMTP connection (IONOS, Gmail/Workspace, Outlook/Office 365, SendGrid, Mailgun, Amazon SES, Brevo, Postmark, Zoho, or Custom). Pick one and the host, port and encryption fill in automatically — you just add your username, password and From address. The connection already existing is detected and shown. This is on top of the existing multi-connection routing, fallback, real-handshake "Test connection" and "Send test" tools under Mail & Forms → Settings → SMTP connections.
3.09.38 — Real icons + Find & replace clarity
- Replaced all of the hand-drawn admin icons with the real Lucide icon set (MIT-licensed) — consistent, professional icons across the sidebar, cards and headers. Names stayed the same so nothing else changed.
- Renamed the confusing "Bulk rename" button on Images to "Find & replace names" and gave it an active state, so it is clear it opens the find/replace bar (which fills the rename boxes to review before applying).
3.09.37 — Auto-save settings + robots.txt quick-add
- Settings now save automatically the moment you change a toggle or field — the "Save settings" button is gone, replaced by a subtle "Saved" flash so you can see it took. (Deliberate actions like renaming images or writing robots.txt still have their own buttons.)
- The robots.txt editor has quick-add chips (Sitemap line, Protect wp-admin, Block AI crawlers, Allow everything) that append ready-made blocks — fills the empty space with something actually useful.
3.09.36 — Oxygen: unused-media false positives + Google Font detection
- Unused Media now reads your builder’s CSS cache (Oxygen/Bricks/Elementor, searched recursively) so images used only as section/hero backgrounds are correctly counted as USED instead of showing up as unused. This was flagging template/background images across every page.
- Font detection now pulls font-family names out of your builder CSS and fetches each from Google directly, so Google Fonts used in Oxygen are detected even when the host blocks loopback and they load via a front-end link. Custom @font-face detection is also more robust (recursive cache search).
3.09.35 — Module toggles moved to Utilities; risky alignment; convert reload
- Moved the Performance/SEO/Images module toggles out of Settings and into the Utilities tab as a "Core areas" section (with the same card + toggle style as the utilities).
- Fixed risky-mode fields: the divider lines now align with the rest of the panel content instead of bleeding into the left padding; the risky content keeps its indent + accent bar.
- The single-image Convert button now reloads the library grid so the image immediately shows as WebP — no manual refresh.
3.09.34 — Font-display strategy dropdown
- Replaced the single "font-display: swap" on/off switch with a proper strategy dropdown: Off, Swap (recommended), Fallback, Optional, and Block. The chosen mode is applied to your Google Fonts (via display=) and to locally-hosted fonts, so you can tune exactly how text behaves while fonts load.
3.09.33 — Clearer Font manager
- The detected-fonts list now has a legend explaining Preload vs Block, and every preload toggle has a visible "Preload" label instead of an unlabelled switch. Rewrote the Font manager description so it is obvious what each control does (and that local/builder fonts can be preloaded but not blocked).
3.09.32 — font-display: swap now actually applies
- The font-display swap toggle previously only did anything when hosting fonts locally. Now, when it is on, Velox appends display=swap to your enqueued Google Fonts (both the tag and the registered src) so they render with font-display:swap and stop tripping the PageSpeed warning. Note: fonts loaded via a hard-coded (not enqueued) or your own local @font-face files are not rewritten this way.
3.09.31 — Fonts: detect Oxygen fonts + fix left-wall text
- Font detection now reads your page builder’s compiled CSS cache from disk (Oxygen/Bricks/Elementor) and fetches any referenced Google Fonts, so it works even when the host blocks loopback (IONOS/Plesk). Previously it just said "could not read the front page" and found nothing.
- Fixed the detect-list message sitting flush against the left border (it now has proper padding), and updated its wording to reflect builder-CSS scanning.
3.09.30 — Utility cards redesigned
- Reworked the utility cards into a cleaner vertical layout: icon and toggle on a top row, name and description below, and an animated "Open →" link. Consistent card heights, a subtle hover lift, and clearer on/off/planned states.
3.09.29 — Performance / SEO / Images are now toggleable modules
- Added a Modules panel in Settings with on/off switches for Performance, SEO and Images (like the utilities). Switching one off hides it (and PageSpeed, under Performance) from the sidebar and stops it running; the toggles live in Settings — always reachable via the gear — so you can never lock yourself out. Empty sidebar groups are hidden automatically.
3.09.28 — Single-image convert in the WP Media Library
- The attachment details panel (Media Library grid and the editor media modal) now shows a "Convert to WebP" button for jpg/png images, or a "✓ Optimized with Velox" note if already done. It uses the same convert endpoint and your saved quality, and reports the KB saved. Only loads on media/editor screens.
3.09.27 — Single-image convert button (Velox Images grid)
- Each non-WebP image in the Images grid now has a "Convert to WebP" button that converts just that one image using your current WebP quality (same engine as bulk). The card updates to the WebP badge, shows the bytes saved, and the library stats refresh live. (Media Library tab button is next.)
3.09.26 — Remove the double separator on Performance panels
- Fixed the back-to-back double line in the Performance panels: a settings field already draws a bottom border, and the tool block right below it drew a top border too. The tool block no longer draws its own top border when it directly follows a field, so it is a single divider now.
3.09.25 — Image stats no longer reset to 0/0
- The optimizer library stats (optimized / pending / saved / %) now read the persistent optimization meta instead of only counting jpg/png. Previously, replace-mode turned images into .webp, which dropped them out of the "convertible" query, so after re-login everything showed 0/0 optimized and 0 B saved. The real numbers now persist.
3.09.24 — Undo the oversized header gap
- Reverted the global header-to-content gap from 48px back to 28px — it was far too large and applied between the header and everything on every page. The intended small gap for action buttons under the header is handled by the header row layout instead.
3.09.23 — Header spacing + unused-media box height
- PageSpeed header buttons now sit beside the title instead of crammed under the description (missing --row layout class); header-to-content gap increased to 48px across all pages.
- Unused Media panel is now compact — the empty box dropped from ~100px to ~74px, no more dead white space before scanning.
3.09.22 — Cookie preview width + sidebar deactivation (real fixes)
- Cookie banner live preview is now a 620px column (was 400) so it is actually wide — previously only its height had been changed.
- Switched-off utilities now really disappear from the custom sidebar (the sidebar loop never checked enabled state before); groups that become empty are hidden too.
3.09.21 — Images: lightbox click, single WebP badge; settings spacing
- The image zoom-click now actually opens the lightbox (it was opening but staying invisible due to a CSS conflict — it now toggles the is-open class the stylesheet expects).
- Removed the duplicate badge on WebP images — you no longer get a dark "WEBP" type badge plus a blue "WebP" badge; one blue badge for WebP, the format badge for others.
- Added a gap between the Import/Export buttons and the JSON box.
3.09.20 — Cookie-consent migrations (CookieYes, Complianz, Borlabs)
- Added importers for CookieYes, Complianz and Borlabs Cookie that bring over the banner heading, body text and button labels where they are stored plainly. Cookie categories, script-blocking and appearance use a different model and are not carried over — the importer says so. Every recognised plugin in the Migrate list now has a real importer.
3.09.19 — Redirection, Code Snippets & WPCode migrations
- Redirection importer: brings your URL redirects (source, target, 301/302/307/410, regex/exact, enabled state) into Velox Redirects & 404s; non-URL rules are skipped and counted.
- Code Snippets and WPCode importers: bring PHP/CSS/JS/HTML snippets into Velox Code Snippets, mapped to the right type. Everything is imported INACTIVE so no third-party code runs until you review and activate it.
3.09.18 — W3 Total Cache + WP Super Cache (last migrations)
- Added honest importers for W3 Total Cache and WP Super Cache: each brings over its cache lifespan (the only setting that maps to Velox) and clearly states that its page-cache and server/.htaccess rules are not part of Velox. The Performance-category migrations are now all real. Still on the way: Redirection, Code Snippets/WPCode, and the cookie-consent plugins (CookieYes, Complianz, Borlabs).
3.09.17 — Perfmatters + FlyingPress migrations
- Perfmatters importer: defer/delay JS, iframe lazy-load, JS exc