{"id":371094,"date":"2026-09-25T11:28:47","date_gmt":"2026-09-25T11:28:47","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/visual-edit-lite-visual-editor-for-block-themes\/"},"modified":"2026-09-25T12:27:36","modified_gmt":"2026-09-25T12:27:36","slug":"visual-edit-lite","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/visual-edit-lite\/","author":23351570,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.31.4","stable_tag":"1.31.4","tested":"7.1.2","requires":"6.6","requires_php":"7.4","requires_plugins":null,"header_name":"Visual Edit Lite \u2013 Visual Editor for Block Themes","header_author":"Filip Dvoran","header_description":"Visual editing for raw-HTML sites and complete native Gutenberg editing for block themes, with responsive controls, movement, forms, SEO and AI-readiness.","assets_banners_color":"7082ff","last_updated":"2026-09-25 12:27:36","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/html2wp.dev\/visualedit\/","header_author_uri":"https:\/\/github.com\/iOSDevSK","rating":0,"author_block_rating":0,"active_installs":0,"downloads":42,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.31.2":{"tag":"1.31.2","author":"webtalkbot","date":"2026-09-25 11:28:34","revision":3712958},"1.31.3":{"tag":"1.31.3","author":"webtalkbot","date":"2026-09-25 11:45:29","revision":3712977},"1.31.4":{"tag":"1.31.4","author":"webtalkbot","date":"2026-09-25 12:27:36","revision":3713030}},"upgrade_notice":{"1.31.0":"<p>Edit history now keeps ten saves per page plus the Original, and lists all of\nthem. A page with a longer history is trimmed to that when its history is next\nopened or the page is saved. The live page and the Original are not affected.<\/p>","1.27.0":"<p>Block themes now edit the way converted themes do: one toolbar, one popup.\nForms are editable blocks, and where a form sends is signed into the page.\nImportant for themes converted from HTML: pages with forms showed a critical\nerror and submissions were discarded \u2014 both fixed. Nothing to migrate.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3712958,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3712958,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3712958,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3712958,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":{"clara-ve\/form":{"name":"clara-ve\/form","title":"Form"},"clara-ve\/field":{"name":"clara-ve\/field","title":"Clara Ve Field"},"clara-ve\/textarea":{"name":"clara-ve\/textarea","title":"Clara Ve Textarea"},"clara-ve\/select":{"name":"clara-ve\/select","title":"Clara Ve Select"},"clara-ve\/checkbox":{"name":"clara-ve\/checkbox","title":"Clara Ve Checkbox"},"clara-ve\/form-group":{"name":"clara-ve\/form-group","title":"Form row"},"clara-ve\/submit":{"name":"clara-ve\/submit","title":"Form send button"}},"tagged_versions":["1.31.2","1.31.3","1.31.4"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3712958,"resolution":"1","location":"assets","locale":"","width":1920,"height":1080},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3712958,"resolution":"2","location":"assets","locale":"","width":1920,"height":1080},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3712958,"resolution":"3","location":"assets","locale":"","width":1920,"height":1080},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3712958,"resolution":"4","location":"assets","locale":"","width":1920,"height":1080},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3712958,"resolution":"5","location":"assets","locale":"","width":1920,"height":1080},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3712958,"resolution":"6","location":"assets","locale":"","width":1920,"height":1080},"screenshot-7.png":{"filename":"screenshot-7.png","revision":3712958,"resolution":"7","location":"assets","locale":"","width":1920,"height":1080}},"screenshots":{"1":"Click any element on the live page to edit it. The panel follows the\nselection: text, links and images on the Content tab, spacing, colour and\ntypography on Style.","2":"Every save is a restore point. History lists the ten most recent saves plus\nthe Original, and any of them can be restored.","3":"A designed form is connected by clicking, never rebuilt. Where it sends, and\nthe spam checks in front of it, live under Form Settings.","4":"SEO &amp; AI Readiness: a read-only report of what the site tells search\nengines and AI assistants, page by page.","5":"SEO &amp; Sharing: the site-wide facts behind structured data, sharing images\nand llms.txt.","6":"Form Settings: where submissions go, anti-spam, email delivery through your\nserver, SMTP or a provider API, and the mailing list.","7":"Import Content: bring in a converted theme's bundled content, or a content\nZIP, reviewed before anything is written."}},"plugin_section":[],"plugin_tags":[11520,18448,244604,250566,2796],"plugin_category":[],"plugin_contributors":[274909],"plugin_business_model":[],"class_list":["post-371094","plugin","type-plugin","status-publish","hentry","plugin_tags-front-end-editor","plugin_tags-html-to-wordpress","plugin_tags-llms-txt","plugin_tags-static-site","plugin_tags-visual-editor","plugin_contributors-webtalkbot","plugin_committers-webtalkbot"],"banners":{"banner":"https:\/\/ps.w.org\/visual-edit-lite\/assets\/banner-772x250.png?rev=3712958","banner_2x":"https:\/\/ps.w.org\/visual-edit-lite\/assets\/banner-1544x500.png?rev=3712958","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/visual-edit-lite\/assets\/icon-128x128.png?rev=3712958","icon_2x":"https:\/\/ps.w.org\/visual-edit-lite\/assets\/icon-256x256.png?rev=3712958","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/visual-edit-lite\/assets\/screenshot-1.png?rev=3712958","caption":"Click any element on the live page to edit it. The panel follows the\nselection: text, links and images on the Content tab, spacing, colour and\ntypography on Style."},{"src":"https:\/\/ps.w.org\/visual-edit-lite\/assets\/screenshot-2.png?rev=3712958","caption":"Every save is a restore point. History lists the ten most recent saves plus\nthe Original, and any of them can be restored."},{"src":"https:\/\/ps.w.org\/visual-edit-lite\/assets\/screenshot-3.png?rev=3712958","caption":"A designed form is connected by clicking, never rebuilt. Where it sends, and\nthe spam checks in front of it, live under Form Settings."},{"src":"https:\/\/ps.w.org\/visual-edit-lite\/assets\/screenshot-4.png?rev=3712958","caption":"SEO &amp; AI Readiness: a read-only report of what the site tells search\nengines and AI assistants, page by page."},{"src":"https:\/\/ps.w.org\/visual-edit-lite\/assets\/screenshot-5.png?rev=3712958","caption":"SEO &amp; Sharing: the site-wide facts behind structured data, sharing images\nand llms.txt."},{"src":"https:\/\/ps.w.org\/visual-edit-lite\/assets\/screenshot-6.png?rev=3712958","caption":"Form Settings: where submissions go, anti-spam, email delivery through your\nserver, SMTP or a provider API, and the mailing list."},{"src":"https:\/\/ps.w.org\/visual-edit-lite\/assets\/screenshot-7.png?rev=3712958","caption":"Import Content: bring in a converted theme's bundled content, or a content\nZIP, reviewed before anything is written."}],"raw_content":"<!--section=description-->\n<p>Visual Edit Lite adds a floating inspector and site tools to the native Gutenberg editor\non a block theme. It is also the editing companion for a WordPress site built\nfrom a static HTML design \u2014 a hand-written site, or one exported from Lovable,\nBolt, v0.dev, aidesigner.ai or a Claude design. A converted theme keeps every\npage's markup byte-for-byte identical to the original and the plugin makes\nthose pages editable by clicking.<\/p>\n\n<p>If you have brought an HTML site into WordPress and want the client to edit it\nwithout touching the markup \u2014 or without the design surviving a page builder \u2014\nthis is the piece that was missing.<\/p>\n\n<p>Nothing here is locked, timed, or waiting for a key. Everything the plugin\ncontains works on every install, offline included.<\/p>\n\n<p>The plugin's home page and documentation:\n<a href=\"https:\/\/html2wp.dev\/visualedit\/\">html2wp.dev\/visualedit<\/a>. Development happens in the open at\nhttps:\/\/github.com\/iOSDevSK\/visual-edit-lite \u2014 the full source, the build\nscript and the translation-template generator are there. The plugin has no\nbuild step: the PHP, CSS and JavaScript shipped in this package are the\nsource, unminified and uncompiled.<\/p>\n\n<ul>\n<li><strong>Point-and-click editing<\/strong> of text, links, images and video, directly on\nthe live page, with a git-like per-page edit history.<\/li>\n<li><strong>Gutenberg workspace on block themes.<\/strong> Visual Edit hosts the native editor\nand adds a floating inspector with typography, Google Fonts and styling.\nNative controls remain available for blocks, patterns, templates, navigation\nand Global Styles.<\/li>\n<li><strong>Repeating content<\/strong> (FAQ lists, service cards, team members, portfolio\ntiles) managed as a list: reorder, edit, add and remove items together.<\/li>\n<li><strong>Forms<\/strong> \u2014 a designed HTML form is connected by clicking, never rebuilt.\nSubmissions are stored and emailed; delivery works through your server,\nSMTP, or the Brevo \/ SendGrid \/ Postmark \/ Mailgun APIs. Anti-spam layers:\nhoneypot, minimum fill time, per-IP rate limit (CDN-aware) and optional\nAkismet.<\/li>\n<li><strong>Mailing list<\/strong> signup with double opt-in, provider integration and a\nsubscriber list in wp-admin.<\/li>\n<li><strong>Blog<\/strong> \u2014 listings driven by a token that repeats the design's own card\nmarkup for real WordPress posts.<\/li>\n<li><strong>Menus<\/strong> \u2014 the design's own navigation markup, managed from Appearance \u2192\nMenus.<\/li>\n<li><strong>SEO<\/strong> \u2014 titles, descriptions, Open Graph, canonicals, robots and\nredirects, carried over from the original site and editable per page;\nintegrates with Yoast SEO \/ Rank Math when present, self-sufficient when\nnot.<\/li>\n<li><strong>AI readiness<\/strong> \u2014 schema.org structured data (including FAQ), llms.txt,\nAI-crawler rules, and a read-only structure audit. This is about being\n<em>readable by<\/em> AI search engines. Lite contains no AI writing or image\ntools and sends nothing to any AI provider.<\/li>\n<li><strong>Import<\/strong> \u2014 bring in a converted theme's content bundle: pages, menus,\nmedia, forms and SEO records, reviewed before anything is written.<\/li>\n<\/ul>\n\n<h4>Editing history<\/h4>\n\n<p>Every Save is a restore point. The plugin keeps the ten most recent saves of\neach page plus the Original \u2014 the design exactly as the theme shipped it \u2014 so\nthere is always a way back, however long ago you started.<\/p>\n\n<p>Ten is how deep the history is, not how much of it you are shown: the panel\nlists every save the plugin holds, and any of them can be restored. When an\neleventh save is made the oldest one is dropped; the Original never is. A page\nwhose log is longer than that \u2014 restored from a backup, or written by an\nearlier version \u2014 is trimmed the same way the next time its history is opened\nor the page is saved. The live page is never touched.<\/p>\n\n<h4>What this plugin needs<\/h4>\n\n<p>A native Gutenberg block theme, or a theme whose pages are raw HTML and which\ndeclares its contract through the <code>clara_ve_theme_contract<\/code> filter. The\ncontract for converted themes is fully documented on GitHub:\nhttps:\/\/github.com\/iOSDevSK\/visual-edit-lite\/blob\/main\/docs\/developer\/theme-requirements.md<\/p>\n\n<p>Forms, email delivery, mailing lists, SEO, redirects and llms.txt do not\ndepend on the theme at all and work anywhere.<\/p>\n\n<h3>Important notes<\/h3>\n\n<ul>\n<li><strong>Raw-HTML editing requires <code>unfiltered_html<\/code><\/strong>, because markup round-trips\nthrough that editor. Native Gutenberg mode uses WordPress's normal\npermissions for the page, template or other entity being edited.<\/li>\n<li><strong>Deactivating<\/strong> the plugin keeps all data and reverts the front page to the\ntheme's shipped design until reactivation; other pages keep their edited\ncontent.<\/li>\n<li><strong>Deleting<\/strong> the plugin always removes stored secrets (SMTP password,\nprovider API keys) and its own transients. Everything else \u2014 submissions,\nsubscribers, edit history, page sources \u2014 is kept unless \"also delete all\nstored data\" is enabled under Visual Edit Lite \u2192 Form Settings \u2192 Uninstall.\nThat option removes the plugin's options, its two database tables and the\nform submissions. It leaves your pages and their content in place, together\nwith a few marker fields the plugin wrote on them and any files it imported\ninto the Media Library or the uploads folder.<\/li>\n<\/ul>\n\n<h3>External services<\/h3>\n\n<p>This plugin does not contact any external service on its own. Every service\nbelow is reached only after you switch it on, or connect a form plugin that\nuses it, and only for the purpose described.<\/p>\n\n<p><strong>Google Fonts<\/strong> \u2014 used only if you open the Google fonts picker in the\neditor. Opening it makes your server request the public font catalogue from\n    fonts.google.com (cached for a week), and your own browser loads a preview\nstylesheet from <code>fonts.googleapis.com<\/code>, and its font files from\n    fonts.gstatic.com, for each family you scroll past. A page that uses a font\nyou kept loads that font's stylesheet and files from the same two hosts, which\nmeans visitors' browsers connect to Google and Google receives their IP\naddress and user agent. A site where no Google font was kept requests nothing\nfrom Google on the front end.\nTerms: https:\/\/policies.google.com\/terms \u2014 Privacy:\nhttps:\/\/policies.google.com\/privacy \u2014 Google Fonts privacy FAQ:\nhttps:\/\/developers.google.com\/fonts\/faq\/privacy<\/p>\n\n<p><strong>Akismet<\/strong> \u2014 used only if the separate Akismet plugin is installed and\nconfigured and you enable Akismet filtering under Form Settings. Each form\nsubmission is then sent to Akismet for a spam verdict: its field values, the\nemail address found among them, the sender's IP address, user agent and\nreferrer, and your site's address.\nTerms: https:\/\/akismet.com\/tos\/ \u2014 Privacy: https:\/\/automattic.com\/privacy\/<\/p>\n\n<p><strong>Email delivery providers<\/strong> \u2014 used only if you select one as the mailer and\nenter its API key. From then on every email WordPress sends from this site,\nnot only form notifications, goes through the provider you chose: recipient,\nsender name and address, reply-to, subject and body.\nBrevo \u2014 https:\/\/www.brevo.com\/legal\/termsofuse\/ ,\nhttps:\/\/www.brevo.com\/legal\/privacypolicy\/ ;\nSendGrid \u2014 https:\/\/www.twilio.com\/en-us\/legal\/tos ,\nhttps:\/\/www.twilio.com\/en-us\/legal\/privacy ;\nPostmark \u2014 https:\/\/postmarkapp.com\/terms-of-service ,\nhttps:\/\/postmarkapp.com\/privacy-policy ;\nMailgun \u2014 https:\/\/www.mailgun.com\/legal\/terms\/ ,\nhttps:\/\/www.mailgun.com\/legal\/privacy-policy\/<\/p>\n\n<p><strong>Brevo (mailing lists)<\/strong> \u2014 used only if you connect Brevo as your mailing-list\nprovider. Opening a form's list picker in the editor asks Brevo for the names\nof your lists. When a visitor subscribes (after confirming, if double opt-in is\non) Brevo receives their email address, the list you chose, the other fields\nthey filled in on that form as contact attributes, and, if you use Brevo's own\ndouble opt-in, the template id and redirect address you set. Same terms and\nprivacy links as above.<\/p>\n\n<p><strong>Your own SMTP server<\/strong> \u2014 used only if you select SMTP as the mailer. The\nmessage is sent to the host you configured.<\/p>\n\n<p><strong>Contact Form 7 and Fluent Forms<\/strong> \u2014 used only if you hand a designed form to\none of those plugins in the editor. The submission is then processed by that\nplugin on your own server: its validation, spam checks, notifications and\nrecords apply, under its own settings. Nothing leaves the site through this\nplugin for that.<\/p>\n\n<p><strong>Google reCAPTCHA<\/strong> \u2014 used only if a form you handed to Contact Form 7 or\nFluent Forms has reCAPTCHA configured in that plugin. The page then loads the\nreCAPTCHA script from <code>www.google.com<\/code> in the visitor's browser, which sends\nGoogle their IP address, user agent and how they interact with the page, and\nGoogle may set cookies. The token it returns is verified by Contact Form 7 or\nFluent Forms with the secret key you entered there; this plugin holds no key.\nTerms: https:\/\/policies.google.com\/terms \u2014 Privacy:\nhttps:\/\/policies.google.com\/privacy<\/p>\n\n<p><strong>hCaptcha<\/strong> \u2014 used only if a form you handed to Fluent Forms uses hCaptcha.\nThe page then loads the hCaptcha script from <code>js.hcaptcha.com<\/code> in the\nvisitor's browser, which receives their IP address, user agent and how they\ninteract with the page. The token is verified by Fluent Forms with your\nhCaptcha secret; this plugin holds no key.\nTerms: https:\/\/www.hcaptcha.com\/terms \u2014 Privacy: https:\/\/www.hcaptcha.com\/privacy<\/p>\n\n<p><strong>Importing a remote image<\/strong> \u2014 when you click \"Import image into this site\" on\na picture hosted elsewhere, the plugin downloads that one URL, which you chose,\nand stores the file in your Media Library.<\/p>\n\n<p><strong>Gravatar<\/strong> \u2014 used only if a listing template you designed includes the\n    {author_image} placeholder. It resolves through WordPress's own\n    get_avatar_url(), so unless another plugin serves avatars locally the\nportrait is fetched by visitors' browsers from <code>gravatar.com<\/code>, which then\nreceives their IP address and user agent. A template without that placeholder\nrequests nothing.\nTerms: https:\/\/automattic.com\/terms\/ \u2014 Privacy: https:\/\/automattic.com\/privacy\/<\/p>\n\n<h3>Privacy<\/h3>\n\n<p>The plugin stores form submissions and mailing-list subscribers in your own\ndatabase. It sets no cookies of its own, runs no analytics, and sends nothing anywhere\nabout you or your site. Secrets you enter (SMTP password, provider API keys)\nare encrypted at rest with your site's own salt and are always removed when\nthe plugin is deleted.<\/p>\n\n<h3>Credits<\/h3>\n\n<p>The click-to-edit layer \u2014 <code>assets\/bridge.js<\/code>, <code>assets\/editor.js<\/code>,\n    assets\/bridge.css and <code>assets\/editor.css<\/code> \u2014 is derived in part from\nOpen Design (https:\/\/github.com\/nexu-io\/open-design), Copyright 2026 Open\nDesign contributors, licensed under the Apache License, Version 2.0\n(https:\/\/www.apache.org\/licenses\/LICENSE-2.0). Those files were ported from\nTypeScript and modified for WordPress, and each carries this notice. The\nApache License 2.0 is compatible with version 3 of the GPL, which this\nplugin's \"GPLv2 or later\" licence allows.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Plugins \u2192 Add New \u2192 search for \"Visual Edit Lite\" \u2192 Install \u2192 Activate.<\/li>\n<li>On a block theme, such as Twenty Twenty-Five, open Visual Edit Lite in the\nadmin menu and pick a page. Nothing else is needed.<\/li>\n<li>On a theme converted from static HTML, activate that theme first, then\nfollow its setup screen to import the site's content and edit any page from\nthe Visual Edit Lite menu.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"is%20anything%20disabled%20until%20i%20pay%3F\"><h3>Is anything disabled until I pay?<\/h3><\/dt>\n<dd><p>No. Visual Edit Lite has no licence key, no trial period and no locked\nbuttons. The features Lite does not have are simply not part of it \u2014 there is\nnothing in the plugin to unlock.<\/p><\/dd>\n<dt id=\"can%20i%20use%20it%20on%20a%20theme%20i%20built%20myself%3F\"><h3>Can I use it on a theme I built myself?<\/h3><\/dt>\n<dd><p>Yes, if the theme's pages are raw HTML and it declares the\n    clara_ve_theme_contract filter. The theme requirements are documented on\nGitHub: https:\/\/github.com\/iOSDevSK\/visual-edit-lite\/tree\/main\/docs<\/p><\/dd>\n<dt id=\"does%20it%20work%20without%20javascript%20on%20the%20front%20end%3F\"><h3>Does it work without JavaScript on the front end?<\/h3><\/dt>\n<dd><p>Forms submit and work without JavaScript. The editor itself is a wp-admin\nscreen and needs JavaScript, like the block editor does.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.31.4<\/h4>\n\n<ul>\n<li>New: A designed form can be handed to Contact Form 7 or Fluent Forms. Pick\nthe form in the FORM panel and check which of its fields each designed field\nfills; that plugin then validates, checks for spam, verifies its captcha,\nsends and records the submission, while the design stays as it is. Without\nJavaScript the page comes back with the errors under the fields.<\/li>\n<li>New: On a block theme, the \u22ef menu of the Visual Edit Lite workspace can\nduplicate the page or post that is open, and move it to the trash. The copy\nis a draft and brings its content, categories and tags, featured image,\nsearch-appearance record and small-screen rules; its canonical address is not\ncopied. The front page and the posts page cannot be removed from here.<\/li>\n<li>Changed: Duplicating works for posts as well as pages, and asks for the right\nto create whichever of the two is being copied.<\/li>\n<li>Fixed: A backslash in page content survives a save. Every write of page\ncontent now goes through wp_slash(), which WordPress expects.<\/li>\n<li>Changed: The readme no longer describes the paid edition, and documents the\ncaptcha providers a connected form plugin may load.<\/li>\n<\/ul>\n\n<h4>1.31.3<\/h4>\n\n<ul>\n<li>Changed: The readme carries captions for the seven screenshots on the\nplugin's directory page.<\/li>\n<li>Changed: The plugin's homepage link points at html2wp.dev; the source stays\non GitHub.<\/li>\n<\/ul>\n\n<h4>1.31.2<\/h4>\n\n<ul>\n<li>Fixed: The SMTP password is stored exactly as it is typed. It was trimmed\nbefore being encrypted, so a password that begins or ends with a space saved\nwithout complaint and then failed to authenticate. Secrets are never put\nthrough a text sanitizer: they are encrypted, and never printed back. A\npasted API key still loses the stray space or newline a paste leaves on it.<\/li>\n<\/ul>\n\n<h4>1.31.1<\/h4>\n\n<ul>\n<li>Security: Each editor route asks for the right to do what it does, on top of\nthe right to edit the page: copying a page asks for the right to create\npages, removing one for the right to delete it, importing an image for the\nright to upload files, and a save, a restore or a search-appearance change\naddressed to one page asks about that page.<\/li>\n<li>Security: The form block's output is filtered through an allowlist of what a\nform may consist of at the moment it is returned, so nothing else can come\nout of it. The honeypot field is hidden by a stylesheet rule as well as its\nown inline one.<\/li>\n<li>Changed: Navigation class names supplied by a theme are escaped as attribute\nvalues when they are written into a menu.<\/li>\n<\/ul>\n\n<h4>1.31.0<\/h4>\n\n<ul>\n<li>Changed: Edit history keeps the ten most recent saves of each page plus the\nOriginal. Every save the plugin holds is listed and can be restored. A page\nwith a longer log is trimmed to that the next time its history is opened or\nthe page is saved.<\/li>\n<li>Changed: Every stylesheet and script the plugin adds now goes through the\nWordPress enqueue API \u2014 the decorative and article styling layers, per-block\nstyles, and the Form Settings and SEO &amp; Sharing screens, whose behaviour\nmoved into assets\/admin-settings.js. Structured data is printed with\nWordPress's own inline script tag function.<\/li>\n<li>Changed: The paid plugin is mentioned in one place: a single plain item,\nVisual Edit Pro, at the end of the Visual Edit Lite menu, opening one screen\nof text with one link. The two Pro-marked items are gone, and nothing is\nadded to any other admin screen.<\/li>\n<li>Removed: The part of the content exporter that could package a theme. Lite\nexports content bundles only; theme export is not in this plugin.<\/li>\n<li>Security: The public \"load more\" route answers only for a published page\nwithout a password, and gives one answer for every refusal. A listing no\nlonger includes password-protected posts.<\/li>\n<li>Security: A form field whose name starts with an underscore is ignored, so a\nvisitor cannot write one of the submission's internal meta keys.<\/li>\n<li>Security: The legacy static import copies only files of a type WordPress\naccepts as an upload, from inside the extracted folder. A double opt-in link\nstops working after fourteen days, and exporting parked content, which can\ninclude submissions and subscribers, requires an administrator.<\/li>\n<li>Added: A Credits section, and a notice in the four editor files that derive\nfrom Open Design (Apache License 2.0).<\/li>\n<\/ul>\n\n<h4>1.30.3<\/h4>\n\n<ul>\n<li>Changed: The package ships the plugin only \u2014 the developer documentation\nlives on GitHub and is linked from this readme.<\/li>\n<\/ul>\n\n<h4>1.30.2<\/h4>\n\n<ul>\n<li>Changed: Contributors names the wordpress.org account that owns the plugin,\nand the 1.27.0 upgrade notice fits the directory's 300-character limit.<\/li>\n<\/ul>\n\n<h4>1.30.1<\/h4>\n\n<ul>\n<li>Changed: The Get Pro item opened the pricing page in a new browser tab.\nReplaced in 1.31.0.<\/li>\n<\/ul>\n\n<h4>1.30.0<\/h4>\n\n<ul>\n<li>New: A screen in the Visual Edit Lite menu that lists what the separate paid\nplugin adds. Nothing is loaded from outside the site and nothing is sent\nanywhere. Reduced to a single menu item in 1.31.0.<\/li>\n<li>Changed: The plugin is listed as \"Visual Edit Lite \u2013 Visual Editor for\nBlock Themes\". The menu, the admin bar and every screen are unchanged.<\/li>\n<\/ul>\n\n<h4>1.29.1<\/h4>\n\n<ul>\n<li>Fixed: The \uff0b Section browser labels its two groups \u2014 Theme sections and Your sections.<\/li>\n<\/ul>\n\n<h4>1.29.0<\/h4>\n\n<ul>\n<li>Save a section and use it on any other page. <strong>Save as a section\u2026<\/strong> on the\nSection tab of a section's popup stores it as one of your site's own\nsections, listed under \uff0b Section as Your sections everywhere. Each copy you\nplace is ordinary blocks you can edit one by one, independent of the page it\ncame from. Saving happens at once rather than as an unsaved change, and a\nsaved section is removed again under Patterns in the WordPress admin. A\nsection holding a synced pattern, a template part or content bound to that\none page cannot be saved, and the form says which it was.<\/li>\n<li><code>ClaraVE.apply()<\/code> can treat a run of neighbouring blocks as one, with three\noperations: <code>group<\/code> wraps them in a single Group, <code>ungroup<\/code> takes a Group\napart again in its place, and <code>move-to<\/code> moves a run of blocks elsewhere on\nthe page, including inside another container. Each is one change the editor\nundoes in one step. Blocks that are not next to each other, or that\nWordPress will not let move, are refused with the reason instead of quietly\ndoing nothing.<\/li>\n<li><code>ClaraVE.saveSection()<\/code> and a <code>save-section<\/code> event for the same, and\nGET \/block-patterns now says which source each section came from.<\/li>\n<\/ul>\n\n<h4>1.28.0<\/h4>\n\n<ul>\n<li>A theme section shipped as one Custom HTML block \u2014 an FAQ of details, a\nlist, a row of buttons \u2014 goes onto the page as native blocks when it is added\nwith \uff0b Section: a Details block per question, headings, lists and buttons,\neach editable in the popup, in one undo step. Markup with no native block (an\nembed, an icon drawn in SVG, inline styles) stays Custom HTML exactly as it\nwas. A Details block's popup edits its question.<\/li>\n<li>Forms from other plugins \u2014 Kadence Form, Contact Form 7, WPForms, Gravity\nForms and others \u2014 are marked green in the block workspace like Visual Edit's\nown, and a Kadence Form can be sent by Visual Edit: choose Form Settings and a\ncontact address or a mailing list in its popup. Kadence's own sending is\nswitched off while connected, so nothing arrives twice.<\/li>\n<li>Form button styles reach a Kadence form in the editor, where Kadence draws\nthe button as an editable box rather than a button.<\/li>\n<li>The HTML editor's popup has a pin: pinned, every element opens it in the same\nplace, and dragging it moves the pin.<\/li>\n<li>History and other side panels no longer open over each other.<\/li>\n<li>On a phone the workspace toolbar keeps Save on screen.<\/li>\n<li>The block gate refuses a static core block written as a self-closing comment\n(), which the editor flags as invalid and the site shows\nas nothing.<\/li>\n<li>For developers: the <code>clara_ve.toolbar.extras<\/code> and <code>clara_ve.popup.top<\/code>\nfilters, the <code>clara-ve-dock-opened<\/code> event, the <code>convert-to-video<\/code> operation,\nKadence images in <code>set-image<\/code>, and <code>POST \/native\/convert-blocks<\/code>.<\/li>\n<\/ul>\n\n<h4>1.27.0<\/h4>\n\n<ul>\n<li>Icons from a theme's or a plugin's own controls are no longer invisible in\nthe dark editing popup. A whole family of icon sets is drawn with strokes\nrather than fills, and the contrast repair only ever looked at fills \u2014 so an\nicon picker full of line icons kept its author's dark grey on a ground the\neditor had just painted dark. They are repaired on the property they are\nactually drawn with, and never by filling them in.<\/li>\n<li>A form whose fields cover it completely \u2014 a one-row signup is an input and a\nbutton, edge to edge \u2014 could not be connected at all: there was no pixel of\nthe form left to click, and what a form does when someone submits it is only\noffered on the form itself. A field now says <strong>Part of a form<\/strong> and offers\nthe way up, opening the form on the tab that holds those settings.<\/li>\n<li><strong>A theme converted from HTML no longer white-screens its visitors.<\/strong> Such a\ntheme carries its own form runtime that asks this plugin about Cloudflare\nTurnstile as soon as it is loaded; this edition has no Turnstile and had no\nanswer, so every page holding a form died with a critical error \u2014 the public\npage, not only the editor. It now answers \"off\", which is the truth.<\/li>\n<li>On a theme converted from HTML, form submissions were being accepted and\nsilently thrown away: the theme and the plugin signed the anti-spam timestamp\nin two different shapes, and the visitor saw a thank-you either way. They are\ndelivered again, and stored.<\/li>\n<li>Where a form sends is signed into the page and checked on the way back, for\nevery form \u2014 including one a converted theme renders and hands over. Until\nthat theme signs the value itself, a per-form <strong>Send to<\/strong> on such a site falls\nback to the address in Form Settings rather than being taken from the request.<\/li>\n<li>A media bundle can no longer place a file in the uploads folder that you\ncould not upload by hand: the extension has to be one this site allows.<\/li>\n<li><strong>Send to<\/strong> and <strong>List<\/strong> on a form block are honoured only on a page whose\nauthor administers the site. Anyone who can publish could otherwise point a\nform at their own address, or at your mailing list. A form in a template part\nis unchanged.<\/li>\n<li>Forms are marked in green \u2014 the whole form, its fields and a <em>Form<\/em> label,\nin both editors and without clicking anything first. Everything else stays\nblue, so it is clear at a glance which part of a page collects answers.<\/li>\n<li>Block themes are now edited the way converted themes are: the page, one dark\ntoolbar and one popup. WordPress's block toolbar, sidebar and breadcrumb bar\nno longer compete with it; <strong>\u22ef \u2192 Show WordPress controls<\/strong> brings them back.\nThe WordPress admin bar and side menu stay available.<\/li>\n<li>A sidebar WordPress remembered from an earlier session no longer opens over\nthe workspace. The Search appearance dialog says when the theme or the\nsite-wide SEO settings keep Visual Edit from printing titles and\ndescriptions on the public site.<\/li>\n<li>Clicking the block that is already selected reopens its popup after Apply\nor Cancel. Undo reverts one popup session at a time, and Reset styles is\nits own undo step. A responsive value can be set again after it was cleared\nand saved. Number fields ignore text that is not a number.<\/li>\n<li>Clicking a photo that sits under a theme's overlay or tint (a hero image\nbehind its heading layer) selects the image, as in the HTML editor, so it\ncan be replaced. Empty decorative groups no longer show WordPress's\n\"Select a layout\" placeholder over the design.<\/li>\n<li>WordPress's own editor UI shown inside Visual Edit (the Advanced tab,\nsidebars opened from \u22ef, dropdowns, colour pickers and native dialogs)\nfollows the popup design: the same type, rounded dark fields, grey labels,\nuppercase section titles, buttons, tabs and menus. Colours are measured after every change, so\nnative controls stay readable while swatches and style previews keep their\nreal colours. Menus, selects and scrollbars in the\ndark UI no longer show dark text, white tracks or double borders.<\/li>\n<li>Clicking a block outlines and labels it and opens the popup beside it, at the\nheight of the click, without covering it. The popup stays put while you\nscroll, can be pinned, and is a bottom sheet on phones.<\/li>\n<li>The popup is organised into Content, Style, Section and Advanced tabs, with a\npath to parent blocks, Duplicate \/ Move \/ Delete, bold, italic and link for\ntext selected on the page, an items list for containers, and \"Add a section\nafter this one\".<\/li>\n<li>Style has a Desktop \/ Tablet \/ Mobile switch that edits the same fields per\nscreen and switches the preview. The separate Responsive section is gone.<\/li>\n<li>Sections locked by WordPress (theme patterns, template parts) offer <strong>Unlock\ndesign<\/strong> \u2014 WordPress's own \"Enable editing all patterns\" setting, per session.<\/li>\n<li><strong>\uff0b Section<\/strong> adds one of the theme's own sections with previews.<\/li>\n<li>History docks beside the page and says when a restored version still needs\nSave.<\/li>\n<li>The toolbar is reduced to page, device, undo\/redo, History, Section, status,\npreview, More and Save.<\/li>\n<li>The converted-theme popup gains the same Content \/ Style \/ Section tabs, opens\nbeside the clicked element, calls its button Apply, and offers RADIUS on every\nelement rather than only boxes that hold a field.<\/li>\n<li>New <code>window.ClaraVE<\/code> editor API shared by both editors, with operations,\nevents, <code>clara_ve.popup.groups<\/code> \/ <code>clara_ve.popup.footer<\/code> \/\n  clara_ve.toolbar.more filters, and the <code>clara_ve_workspace_config<\/code>,\n  clara_ve_workspace_enqueue and <code>clara_ve_native_entity_saved<\/code> PHP hooks.<\/li>\n<li>The front-end block editor writes small-screen values into a block's\n  claraVe attribute when the block already uses it, and shows those values.<\/li>\n<li>The Gutenberg sidebar integration is no longer loaded inside the workspace,\nwhere its panel appeared a second time inside the popup's native settings.<\/li>\n<li>Linking selected text from the popup: Enter applies the link, Esc closes the\naddress field, an address without a scheme gets https:\/\/, an empty address\nsays so instead of doing nothing, and the link still lands on the words\npicked first when the page selection changes while typing. Links inside\nrunning text get a dotted underline in the editor only, since many themes\nstyle them exactly like the text around them.<\/li>\n<li>A link inside the workspace that leads to any other screen (the dashboard, a\nlist, the site) opens in the whole window instead of showing a second admin\nbar and menu inside the workspace.<\/li>\n<li>Document \u25be lists only content that can be opened (Global Styles and menu\nitems no longer appear and fail to load), hides Previous\/Next when there is\none page of results, shows load errors readably in the dark menu, and\nWordPress's own site management opens as a labelled link in the whole\nwindow instead of replacing the workspace inside its frame.<\/li>\n<li>Native colour palettes inside the workspace show their real colours again\n(the dark skin had recoloured every swatch to the text colour), with room\naround the palette and a faint ring so dark theme colours stay visible.<\/li>\n<li>The block inserter shows separate rounded tiles with readable icons; block\nicons were painted near-black on the dark panel.<\/li>\n<li>Style any form from the popup: Form labels, Form fields and Form button\ngroups (colours, fonts, sizes, case, letter spacing, field border shape and\ncolour, border while typing, placeholder colour, button hover, corners).\nThey work on what every form is made of, so a theme's shortcode form,\nContact Form 7, WPForms or a hand-written HTML form all take the same\nsettings, and they are saved on the block like other Visual Edit styling.<\/li>\n<li>Shortcode blocks show what the shortcode puts on the page on the workspace\ncanvas instead of WordPress's text box; the shortcode itself is edited in\nthe popup's Content tab.<\/li>\n<li>More \u203a Site styles opens WordPress's Styles panel again on WordPress 7,\nwhich shows it only while a template is on screen: the page is shown inside\nits template while the panel is open and returns to the page alone after.<\/li>\n<li>Notices in Visual Edit's dark dialogs and menus are coloured by kind\n(error, success, warning), and Esc still closes Search appearance after\nsaving (focus used to fall back to the page).<\/li>\n<li>Editable forms. A new Form block with field, text area, choice list,\ncheckbox, row and send-button blocks: labels, notes, placeholders, choices,\nrequired fields, field names and the button text are edited in the popup\n(or WordPress's sidebar), fields are added from the form's popup and\nreordered or removed under Items. Submissions go to Form Submissions and are\nemailed to the Form Settings address \u2014 a recipient posted with the form is\nignored \u2014 with the spam checks of connected forms; \"Go to page\" and\n\"Message\" set what happens after sending. The form is saved as plain HTML,\nso it stays visible (without sending) if the plugin is switched off.<\/li>\n<li>\"Make this form editable\" on a shortcode or HTML block holding a form turns\nit into form blocks, keeping its class names and so its look, its redirect\nand its thank-you sentence; its form styling carries over. One Undo step.<\/li>\n<li>A form says what it is for \u2014 \"Contact form\" or \"Mailing list\", the same two words in both editors \u2014 with the list picked by name and an optional address for that one form. A signup now reaches the mailing list and the Subscribers screen instead of arriving as an enquiry. What the form was set to is signed into the page, so a visitor cannot retype it into somewhere else; that now covers connected <code>[wp-form]<\/code> forms as well as form blocks, and an unsigned or altered one falls back to the address in Form Settings rather than being refused.<\/li>\n<li>Each form field keeps its own name in submissions: a second Email, a pasted\nor a duplicated field is numbered (email-2) instead of overwriting the first\none's value, and renaming a label later does not move its column.<\/li>\n<\/ul>\n\n<h4>1.26.1<\/h4>\n\n<ul>\n<li>Fixed repeated dropdown arrows and light disabled fields in the dark VE popup\ncaused by WordPress admin select styles.<\/li>\n<li>Content-only editing now exposes permitted text\/media controls instead of\ndisabling the whole panel. Design controls remain restricted by WordPress.<\/li>\n<li>Recheck block editing mode and bindings when asynchronous media choices return.<\/li>\n<li>Added Gutenberg save history, per-document staged restores and native Undo\/Redo.<\/li>\n<li>Fixed Google Fonts preview stylesheet duplication and removal.<\/li>\n<\/ul>\n\n<h4>1.26.0<\/h4>\n\n<ul>\n<li>Gutenberg block themes now open WordPress's complete native Site and Post\nEditors from Visual Edit Lite. This covers every registered block, nested\nediting, Query Loops, navigation, patterns, templates, template parts and\nGlobal Styles through their native WordPress controls.<\/li>\n<li>Added a Visual Edit Lite Gutenberg sidebar with per-page search appearance,\nMedia Library selection for sharing images and shortcuts to site tools.<\/li>\n<li>Added selected-block movement and responsive controls to Gutenberg. Page\nresponsive values share Gutenberg's save state and undo\/redo stack, render\nin the editor preview, and are included in VE history.<\/li>\n<li>Native Gutenberg saves now feed the existing VE page history while core\nkeeps revisions for templates, parts and Global Styles. Autosaves are not\nrecorded as explicit saves.<\/li>\n<\/ul>\n\n<h4>Earlier versions<\/h4>\n\n<p>The entries for 1.25.12 and earlier are kept on GitHub:\nhttps:\/\/github.com\/iOSDevSK\/visual-edit-lite\/blob\/main\/docs\/changelog-archive.md<\/p>","raw_excerpt":"Click-to-edit visual editing for WordPress \u2014 static-HTML themes and Gutenberg block themes alike. Text, images, forms, menus, SEO, 1:1 markup.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/371094","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=371094"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/webtalkbot"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=371094"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=371094"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=371094"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=371094"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=371094"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=371094"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}