Kadence vs Elementor vs GenerateBlocks vs Greenshift vs Spectra vs Unblock: I Built One Homepage Six Times

I rebuilt one real client homepage pixel perfect on six WordPress builders and measured code, speed, AI build time, lock in and price. Here is the ranking.

Disclosure: the Unblock links on this page are affiliate links, so I earn a commission if you buy through them, at no extra cost to you. Kadence, Elementor, GenerateBlocks, Greenshift and Spectra are linked plainly, with nothing attached. None of the six companies saw this post before it went live.

GenerateBlocks is the best WordPress page builder for most people in November 2026. I rebuilt the same real client homepage, pixel for pixel, on six builders, and GenerateBlocks came out with the best balance of everything I measured: the third lightest page, native navigation and forms, a design system of tokens and reusable classes, a free version, and a page that keeps most of its content if you ever switch the plugin off. Kadence is the safest choice when a client edits the site alone, Greenshift is the cheapest and lightest, and Unblock is the best tool for developers and for anyone who builds with AI agents. Elementor and Spectra both got the page right, and both shipped far more code than it needed.

The homepage belongs to Wrapaholic Breda, a Dutch car wrapping studio, so the copy in every screenshot is Dutch. It has a sticky header with a full screen mobile menu, a video hero with a rotating circular badge, eight service tiles, an about block with stats and pillars, a draggable project strip, a contact section with a quote form, a footer with a giant outlined word, and a fixed contact bar on phones. I built it on six identical local installs of WordPress 7.1.4 with PHP 8.5, each builder on its own theme, set up the way its vendor recommends for maximum speed. All six finished under 0.3% pixel difference from the hand coded original at 1440, 768 and 390 pixels wide, so every difference in this post comes from how each builder gets there, and what it ships when it does.

This is the hub of a series. Each builder also has a full head to head with Unblock: Unblock vs Kadence Blocks, Unblock vs Elementor, Unblock vs GenerateBlocks, Unblock vs Greenshift and Unblock vs Spectra. Those go deeper on each pair. This post puts all six side by side, section by section, number by number.

My recommendation

  • Best for most people: GenerateBlocks. 120 KB shipped, native navigation and forms, Global Styles and Design Tokens, a free version, and $149 a year for 10 sites.
  • Best for developers and AI agent builds: Unblock. One block is one HTML element, 27 KB of code before fonts, the fastest AI build of the six, $499 once for 1,000 sites. Total lock in.
  • Best when the client edits alone: Kadence. Native components, the best Lighthouse scores and a styled page with the plugin off. By far the most expensive, $350 a year for one site.
  • Best for a WooCommerce store: Kadence. Shop Kit gives it a designed product template and named swatches, and its product page had the best mobile score of the six (81) with almost no layout shift.
  • Cheapest and lightest: Greenshift. 104 KB shipped, 8 KB more than the hand coded original, lifetime licences on every pack, and 99.6% of the text survives. The editor is the hardest of the six to read.
  • Only if you are already invested: Elementor or Spectra. Elementor V4 is a big step forward and keeps your words if you leave, but it shipped 257 KB of JavaScript. Spectra suits Astra shops, but wrote a 536 KB HTML document and has no form block.

All Six Builders at a Glance

Here is the whole test on one table. Scroll sideways on a phone. Every price was checked on the vendor’s own pricing page, every rating comes from the WordPress.org API, and every measurement comes from my six builds.

UnblockKadenceElementorGenerateBlocksGreenshiftSpectra
OwnerThemeone (Loïc Blascos)Liquid Web (StellarWP)Elementor Ltd.EDGE22 Studios (Tom Usborne)WpsoulBrainstorm Force
Version tested1.0.0Blocks 3.9.1, Pro 2.9.14.4.0, Pro 4.4.0 (V4)2.5.1, Pro 2.8.013.2.3Blocks 1.0.15, Pro 1.0.6
Theme usedUnblock Theme 1.0.0Kadence 1.6.0 + ProHello Elementor 3.5.2GeneratePress 3.6.1 + GP PremiumGreenshift theme 2.6.6Astra 4.14.2 + Astra Pro
Free versionNoYesYesYesYesYes
WordPress.org installs, ratingNot listed600,000+, 9610 million+, 90200,000+, 9870,000+, 9670,000+, 92
Cheapest paid plan$69/yr, 1 site$350/yr, 1 site$60/yr, 1 site$99/yr, 1 site$39.99/yr, 1 site$69/yr, 3 sites
Lifetime$499, 1,000 sitesNoNo$596, 100 sitesEvery pack, from $79.99From $319, 3 sites
Header and footerTemplate partsCustomizer + Pro ElementPro Theme BuilderGP ElementsTemplate partsAstra Customizer
Quote formNative, server handledAdvanced FormPro atomic FormPro FormsContact Form presetNone (raw HTML)
Code shipped390 KB (27 KB without fonts)151 KB398 KB120 KB104 KB254 KB
JavaScript8.2 KB15.8 KB257 KB12.9 KB5.6 KB76 KB
HTML document89 KB315 KB137 KB88 KB95 KB536 KB
DOM nodes477658558520465688
Requests182248241642
Lighthouse mobile / desktop70 / 9684 / 9974 / 9377 / 9876 / 9776 / 96
Accessibility9610096969696
Text left, builder off0%91%, styled99.6%, unstyled65%99.6%, unstyled11%
AI build: tokens, runs, minutes352K, 2, 19479K, 6, 36457K, 3, 34450K, 4, 26408K, 3, 20518K, 7, 35
WooCommerce product page code467 KB (363 KB fonts)288 KB497 KB249 KB248 KB385 KB
WooCommerce mobile Lighthouse / CLS76 / 081 / 0.0357 / 0.4967 / 0.4780 / 0.0854 / 0.49
My score4.04.53.54.54.53.5
Best forDevelopers, AI buildsClient edited sitesElementor teamsMost block buildersLow cost, low weightAstra shops
Prices from each vendor’s pricing page, WordPress.org data from its plugins API, all checked 12 November 2026. Measurements are compressed transfer from my six builds, hero video excluded. Hand coded original: 96 KB shipped, 2.9 KB of JavaScript, 449 DOM nodes. WooCommerce rows: the variable product page (hand coded: 104 KB, 95 mobile, CLS 0).

How I Ran the Test

The rules were simple and the same for all six. One real client homepage, designed and hand coded first, so there was a fixed target. Six fresh local WordPress 7.1.4 installs on PHP 8.5, identical apart from the builder and its theme. Each builder ran on the theme its vendor pairs it with, with the vendor’s own Pro add ons active, set up the way its documentation recommends for speed: local fonts, external or inlined CSS as recommended, caches and optimised loading on. No page cache, no CDN and no optimisation plugin on any site, because I wanted to measure the builder and nothing else.

Every build had to reproduce the original pixel for pixel at three widths, 1440, 768 and 390 pixels, with the same page height. That rule matters more than it sounds. It means no builder could drop the glass effects, the clamp based type sizes or the badge to save itself work, so every custom CSS rule and every line of JavaScript in this post was needed to reach the same result. A build passed when the screenshot difference against the original was under 1% at all three widths with an identical height. All six landed far below that line.

The hand coded original and six builder rebuilds of the Wrapaholic homepage side by side at 1440 pixels
The pixel check: the hand coded original and all six rebuilds at 1440 pixels. Every one is within 0.3% of the original at all three widths.

I logged every native setting, every custom CSS rule and script and why it was needed, and every bug, then measured each finished homepage logged out: transfer by type, requests, DOM size, unused code, axe checks, and Lighthouse three times per device. Finally I switched each builder off and measured what was left. Because Unblock sells itself on AI building, I also had an AI agent build each version from the same written brief; those numbers get their own section.

How Each Builder Thinks

Before the sections, it helps to know what each builder believes a page is, because that decides where your time goes.

Unblock believes a block is one HTML element. You choose its tag and attributes, give it classes, and style those classes as global selectors, either with visual Layout, Sizing, Spacing, Borders, Typography, Background and Effects panels or in a CSS editor docked under the canvas. Both write the same rule, in both directions, so it is CSS first with visual panels on top, not code only. Each block can carry its own JavaScript, and Twig works inside text.

Kadence believes in purpose built blocks (Row Layout, Section, Advanced Text, Advanced Form) with a value per device, a Global Palette, and the header in the Customizer. Elementor lives in its own editor; version 4 styles atomic elements through Global Classes and Variables, with headers and footers from the Pro Theme Builder.

GenerateBlocks 2 gives you four generic blocks plus Pro blocks for header, navigation and forms, styled in a visual Styles builder whose reusable output is Global Styles (real classes) and Design Tokens (CSS variables). Greenshift builds everything from one Element block and keeps the CSS in Style Manager blocks, one per page and template part; I built it through its bundled HTML converter, as the vendor recommends. Spectra Blocks 1.0, the new plugin and not Spectra Legacy, is one Container block that renders as any tag, styled per block, with Astra supplying the header, footer and hooks.

UnblockKadenceElementorGenerateBlocksGreenshiftSpectra
EditorBlock editorBlock editor + CustomizerOwn editorBlock editorBlock editorBlock editor + Customizer
Basic unit1 element blockPurpose built blocksAtomic elementsElement, Text, Media, Shape1 Element blockContainer, Content
Styling lives inGlobal selectorsBlock settings + Additional CSSGlobal ClassesGlobal Styles + local stylesStyle Manager blocksBlock settings + Block CSS
Any HTML tag per blockYesLimitedSome (no ul, dl, figure)YesYesYes
Blocks for the homepage364213340291370222
Block and element counts include the header, footer, mobile bar and form, counted from the saved content of each build. Customizer header elements are not blocks and are not counted.

Two things stand out in that table. Four of the six let you pick any HTML tag for a generic container, so semantic markup is no longer a question of which builder, only of whether you use it. And the block count says little about effort. Kadence and Spectra have the lowest counts because their headers and footers are Customizer settings, not blocks. Unblock and Greenshift have the highest because every span and every SVG is its own block.

The editors also differ in how honest they are. Unblock’s canvas shows the finished design. Kadence’s editor does not load the Customizer Additional CSS, so the badge was a white disc and the project strip a tall stack of cards until I opened the front end. GenerateBlocks’ canvas does not paint GeneratePress’s dark page background, so light text sits on grey. Greenshift’s token and class names are near invisible in its dark panels. Elementor drops its class styling from the canvas when you open Site Settings, and opened an AI promo modal over the canvas in its template editors. Spectra’s List View says Container on almost every row. None of these breaks a build, but you live with them every day.

Header and Full Screen Mobile Menu

The design needed a logo, a pill shaped menu with a blurred glass background, WhatsApp and quote buttons, a header that turns solid after 12 pixels of scrolling and hides on scroll down, and below 1080 pixels a full screen menu with nine numbered services, a clip path reveal, Escape to close and scroll lock. It is the section where builders with a native menu component should win, and mostly they did.

Unblock and Greenshift have no header or menu component, so both built it by hand in a template part: 57 and 55 blocks, with 1,355 and 1,664 bytes of script for the scroll states, toggle, Escape, scroll lock and aria-current.

Kadence and Spectra put the header in the Customizer, which gave both a keyboard friendly drawer and real WordPress menus for free, at the cost of the most CSS in the section (6,602 and 7,605 bytes) for the pill and glass. Astra also fixes the mobile breakpoint at 921 pixels, so between 922 and 1080 pixels the Spectra page still shows the desktop menu.

Elementor built the bar from 49 atomic elements in a Theme Builder template, but the main nav is the Pro Nav Menu widget, the only V3 widget on the site. That one widget pulls jQuery, jQuery Migrate and SmartMenus onto every page.

GenerateBlocks did it best. The header is a GP Premium Element holding the Pro Site Header and Navigation blocks: 18 blocks. The Navigation block takes the design’s 1080 pixel breakpoint as a setting and gives you the overlay menu, Escape, aria-expanded and a focus trap natively, wired to real WordPress menus. Only the scroll behaviour and the toggle label needed script, 717 bytes.

BuilderBlocks (depth)Custom CSSCustom JSNative or code
Unblock57 (6)5,205 B1,355 BAll hand built
KadenceCustomizer settings6,602 B688 BNative drawer and menu
Elementor49 (5)2,934 B1,299 BAtomic + V3 Nav Menu (jQuery)
GenerateBlocks18 (7)5,267 B local + 750 B global717 BNative nav, 1080px breakpoint
Greenshift55 (5)5,358 B1,664 BAll hand built
SpectraCustomizer + 1 hook7,605 B1,538 BNative popup, 921px breakpoint
Custom CSS for Unblock, Greenshift and GenerateBlocks is their whole styling layer; for the others it sits on top of settings.

Winner for this section: GenerateBlocks. A third of the blocks, half the JavaScript of the hand built headers, and an accessible menu at the breakpoint the design asked for. Kadence is a close second.

Video Hero with the Rotating Badge

The hero is a full screen muted looping video with a WebM and an MP4 source and a poster, a dark gradient, a badge with text running around a circle, the headline, two pill buttons, and a pause button that respects reduced motion and pauses when you scroll past.

Three builders have a native video background, and none fully fit. Kadence’s has a poster but English only button labels and no reduced motion handling, so it still took 1,121 bytes of script. Elementor’s atomic Background Video is the nicest, with play and pause as real elements, but takes one source and no poster. Spectra’s serves MP4 only with no poster. Kadence and Spectra both needed a Custom HTML block for the text ring.

GenerateBlocks uses the core Video block, which WordPress shows as its GIF variation once autoplay, muted and loop are on. One source, no aria-hidden setting, and the badge rotation’s keyframes had to go into the Customizer because the Styles builder cannot write @keyframes. Greenshift has a Video element that takes every attribute, but its sidebar shows nothing except “Video tag”, so you check the settings in code view.

Unblock has no video setting at all, and that turned out to be the advantage. The video is a real video element with two source children and a poster, every attribute typed in, readable in the HTML editor. It is what a developer would write by hand, with 756 bytes of script for the toggle, the smallest of the six.

BuilderBlocks (depth)Custom CSSCustom JSNative or code
Unblock22 (7)2,136 B756 BVideo element, 2 sources, poster
Kadence12 (5) + 1 HTML3,447 B1,121 BNative background video
Elementor24 (8)1,751 B928 BNative Background Video, 1 source
GenerateBlocks16 (6)2,994 B local + 1,454 B global695 BCore Video, 1 source
Greenshift22 (7)3,321 B778 BVideo element, settings hidden
Spectra17 (7)2,585 B790 BNative background, MP4 only

Winner for this section: Unblock. Two sources, a poster, Dutch labels and the least script, without fighting a component built for something else.

Eight Service Tiles

Diensten is a grid of eight dark tiles, four across on desktop and two on tablet and phone. Each tile has a number, an icon, a title, a subtitle, an arrow and a photo that fades in on hover, and the last tile is a frosted glass call to action. It is the most repetitive section, so it tests how well each builder reuses styling.

Every builder landed between 63 and 71 blocks here, because every tile needs the same seven or eight pieces. The differences are in how you style tile one and make the other seven follow. Unblock and Greenshift use one class rule with the hover states nested inside it; Greenshift splits that between visual style groups and a raw CSS field per class. Elementor uses a Global Class with native props, but the hover image needs a descendant selector, so it went into class CSS, plus 1,107 bytes of local CSS for the glass tile. Two V4 traps cost time: a default 10 pixel padding on every atomic container, and a CSS converter that stored flex: none as 0 1 auto.

Kadence has a lovely native touch: a hover background image under Style, Background, Hover, on a Section set to link. Spectra set the four, two, two columns with its native Grid per device, though it silently dropped a clamp() icon size and rgba border colours I had set.

GenerateBlocks did it in the fewest blocks, 63, with the styling almost entirely in Global Styles: tile, tile number, icon, title, subtitle, arrow and CTA, 4,325 bytes, with only 319 bytes of local CSS for the whole section and no script. And you edit those Global Styles with the same visual controls as a single block.

BuilderBlocks (depth)Custom CSSCustom JSNative or code
Unblock71 (6)3,744 BNoneOne class rule
Kadence71 (6)3,661 BNoneNative hover image
Elementor71 (6)2,321 BNoneGlobal Class + class CSS
GenerateBlocks63 (5)319 B local + 4,325 B globalNoneGlobal Styles, visual
Greenshift71 (6)4,907 BNoneLocal classes + raw CSS
Spectra71 (6)3,923 BNoneNative Grid per device

Winner for this section: GenerateBlocks. The fewest blocks and the tile is one Global Style you edit visually. Spectra and Kadence are close behind for client editability.

About, Stats and Pillars

A two column block with uneven columns (1fr and 1.1fr), three stats, a photo with a frosted caption, and four pillars with dividers that switch from four to two to one column. This is the semantics test: stats are a description list, pillars a list, the photo a figure.

Four builders gave me the right HTML. Unblock, GenerateBlocks, Greenshift and Spectra all produced a real dl with dt and dd, a ul of four li, and a figure with a figcaption. Kadence nests Row Layouts seven levels deep with Advanced Text for every item, and its column controls cannot set 1fr and 1.1fr. Elementor V4’s atomic containers offer no dl, ul, li, figure or figcaption tags at all, so the stats and caption became divs and paragraphs. Its 611 bytes of CSS look good on paper; the markup does not.

Among the four that got the HTML right, Spectra needed the least CSS, 1,321 bytes, because its native Grid handled the three stats and the four, two, one pillars as settings. Only the uneven columns, the dividers and the caption chip were code. GenerateBlocks would have tied it, but its editor canvas showed this transparent section as light grey text on light grey, the worst editing view in the whole test.

BuilderBlocks (depth)Custom CSSCustom JSNative or code
Unblock33 (6)1,966 BNonedl, ul, figure
Kadence32 (7)2,224 BNoneNested rows, no dl
Elementor33 (6)611 BNoneDivs only
GenerateBlocks39 (7)2,342 B local + 384 B globalNonedl, ul, figure
Greenshift33 (6)2,586 BNonedl, ul, figure
Spectra33 (6)1,321 BNonedl, ul, figure, native grid

Winner for this section: Spectra. The same semantic HTML as the best of them, the least CSS among those that got it right, and responsive columns as settings.

Draggable Project Strip

Recent werk is a horizontal strip of six project cards and a portfolio card that snaps card by card, with round previous and next buttons that move exactly one card, and mouse drag on desktop.

Not one of the six has a native component for this. GenerateBlocks Pro, Greenshift and Spectra all ship a carousel, and all three are Swiper based: GenerateBlocks’ would have added about 131 KB, and none of them can do a free scrolling snap strip with a one card step. Kadence had no option that behaves like it. So every build used the same pattern: a flex row with overflow-x and scroll snap in CSS, and about a kilobyte of script for the buttons and drag. The scripts came out between 1,048 and 1,274 bytes.

The real difference is in the editor. In Kadence the cards stack vertically while you edit, because the strip CSS lives in Additional CSS and the editor does not load it. You edit seven tall cards that look nothing like the site. Spectra dropped an empty data-strip="" attribute until I gave it a value. Unblock, Elementor, GenerateBlocks and Greenshift all show the strip as it looks live.

BuilderBlocks (depth)Custom CSSCustom JSNative or code
Unblock41 (6)1,633 B1,048 BCSS + block script
Kadence38 (6)2,285 B1,261 BCSS + footer script
Elementor41 (6)1,164 B1,274 BClass CSS + site snippet
GenerateBlocks38 (5)870 B local + 2,093 B global1,057 BStyles + hook script
Greenshift44 (6)2,410 B1,180 BLocal classes + page JS
Spectra41 (6)1,566 B1,115 BBlock CSS and JS

Winner for this section: A draw. Same pattern, same kilobyte of script everywhere. Kadence loses on editing comfort, since its editor cannot show the strip at all.

Contact and the Quote Form

The largest section: address, phone, WhatsApp, email and opening hours with a live open or closed pill on Amsterdam time, and a quote form with service chips, required fields, inline validation and a personal thank you. This is the one section that takes leads, so the form back end matters more than markup purity.

Three builders have a full form builder. GenerateBlocks Pro Forms live in their own post type with 26 blocks: validation, REST submission, an email action and stored entries, all native, with 1,253 bytes of script for the status pill and the personal greeting. Forms are switched off by default, and required labels get an asterisk the design did not want. Kadence’s Advanced Form gave me validation, AJAX submit, an Email action and hide after submit with no form script at all; the status pill took 805 bytes, the least of the six. Elementor’s Pro atomic Form stores submissions, with 2,062 bytes of script.

Unblock and Greenshift have native forms that post and are handled on the server: Unblock injects the action, a honeypot and a timestamp, Greenshift adds a nonce with optional Turnstile. Neither has client side validation or a success state, so both needed about 2.3 to 2.6 KB of script. Unblock’s contact section is also where its visual panels show best: Borders, Typography and Background edit the same .contact rule the CSS dock shows. Spectra Blocks has no form block. The form is raw HTML in a Custom HTML block that nothing receives without a second plugin.

BuilderBlocksCustom CSSCustom JSValidationSubmission handled
Unblock766,607 B2,593 BScriptYes, honeypot and timestamp
Kadence28 + 7 in form5,447 B805 BNativeYes, email action
Elementor762,784 B2,062 BNativeYes, stored submissions
GenerateBlocks37 + 26 in form4,198 B1,253 BNativeYes, stored + email
Greenshift794,441 B2,263 BScriptYes, nonce, optional Turnstile
Spectra243,624 B1,854 BScriptNo, needs a form plugin

Winner for this section: GenerateBlocks, narrowly over Kadence. Validation, stored entries and an email action are native, and the form survives as its own reusable post. Spectra comes last by a distance.

Footer with the Giant Word

Four columns (brand, services, more links, workshop address), a giant outlined Wrapaholic word across the full width, and a bottom bar with the current year.

Unblock and Greenshift built it as a block theme footer part with real ul, li and h4 elements and a 100 byte year script. Elementor used 35 elements in a Theme Builder template, but its link lists are paragraphs, because atomic containers have no list tags. Kadence used a Pro Element on the replace footer hook, 20 blocks, and Elements print their CSS after Additional CSS, so my overrides needed extra specificity.

Spectra used Astra’s Footer Builder with widget areas and Astra’s copyright element, whose [current_year] shortcode writes the year with no script. The giant word sits in an HTML element that opens in a TinyMCE editor. GenerateBlocks did the same job as a block layout in a GP Element of type Site Footer, with the Pro {{current_year}} dynamic tag: 50 blocks, 1.8 KB of styling, no script.

BuilderBlocks (depth)Custom CSSCustom JSNative or code
Unblock54 (7)2,198 B100 BTemplate part
Kadence20 (5)1,839 B89 BPro Element on a hook
Elementor35 (6)456 B128 BTheme Builder, no lists
GenerateBlocks50 (7)1,281 B local + 512 B globalNoneGP Element + year tag
Greenshift56 (7)1,638 B109 BTemplate part
Spectra31 widget blocks3,205 BNoneAstra Footer Builder

Winner for this section: GenerateBlocks, narrowly. A block built footer with site wide display rules and a dynamic year, and no JavaScript. Spectra’s widget footer is the friendliest for clients.

Mobile Contact Bar

On phones a fixed glass bar with call, WhatsApp and quote buttons sits at the bottom of the screen, and slides away while the menu is open or the visitor types in the form.

This tiny section exposes how each builder handles a mobile only element. Unblock keeps the bar, its CSS and its 680 pixel media rule together on one selector, with no script, since it reacts to classes the header and form scripts already set. GenerateBlocks did the same in 4 blocks and 1,002 bytes, reacting to its own menu open attribute. Greenshift matched them, except the body padding had to go into the Stylebook, because its own rules forbid body styles on blocks.

The other three split it up. Kadence needed a second Pro Element plus 314 bytes of script to hide it while the form has focus. Elementor has no breakpoint below mobile, so the 380 pixel rule went into the kit CSS. Spectra put the blocks in an Astra Site Builder hook and the styling in Customizer Additional CSS, two places for one small bar.

BuilderBlocks (depth)Custom CSSCustom JSNative or code
Unblock10 (3)974 BNoneOne selector with a media rule
Kadence5 (3)1,129 B314 BSecond Pro Element
Elementor10 (3)150 B + kit CSSNoneMobile class variant
GenerateBlocks4 (2)1,002 BNoneLocal styles
Greenshift10 (3)1,052 BNoneLocal class + Stylebook
Spectra5 (3)1,393 BNoneAstra hook + Additional CSS

Winner for this section: Unblock and GenerateBlocks, tied. About a kilobyte of CSS, no script, and everything in one place.

Section by section: the scoreboard

SectionWinnerRunner upWhy
Header and menuGenerateBlocksKadenceNative accessible nav at the design breakpoint
Video heroUnblockElementorTwo sources, poster, least script
Service tilesGenerateBlocksSpectraFewest blocks, one visual Global Style
About and statsSpectraUnblockSemantic HTML with the least CSS
Project stripDrawDrawNo native component anywhere
Contact and formGenerateBlocksKadenceValidation, stored entries, email
FooterGenerateBlocksSpectraDynamic year, no script
Mobile barUnblock and GenerateBlocksGreenshiftOne place, no script

GenerateBlocks took four sections and shared a fifth, which is the first reason it tops my ranking. Its pattern is consistent: a native component where one makes sense (navigation, forms, dynamic tags), a Global Style everywhere else. Unblock won where the design asked for something no component offers, and on a custom agency design that is more of the page than you would think.

Design Systems, Fonts and Global Styles

A design system decides how fast the second and third page go, and how safely a client can change the brand colour. The six differ more here than anywhere else.

BuilderTokensReusable classesWhere breakpoints liveFonts served
Unblock120 variables in 5 collections156 selectors in 11 collections11 site at rules (1080, 680, 380)363 KB
Kadence10 slot Global PaletteNone, per block settingsFixed per device65 KB
Elementor21 variables104 Global Classes, 628 propsKit breakpoints (680, 1080)84 KB
GenerateBlocks23 Design Tokens35 Global StylesMedia rules in each style75 KB
Greenshift24 Global Variables7 global + 70 local classesIn class CSS75 KB
Spectra10 slot Style Guide + 3None, per block settingsWordPress 7.1 viewport setting86 KB
Counts from each build. Fonts are compressed transfer on the homepage; all six serve fonts locally.

Unblock has the most complete system for anyone who thinks in CSS: 120 custom properties (34 colours in HSL, 36 spacing values, 25 typography tokens with fluid clamps, 20 effects, layout), 156 selectors grouped like a stylesheet, at rules for the design’s own breakpoints, and a history tab. GenerateBlocks is the friendliest strong system: 23 Design Tokens and 35 Global Styles compiled into one cached 9 KB file, with a live Style Book that shows your tokens on real elements. Elementor V4 finally has one too, though new classes take the highest priority by default, so a base class overrode its modifiers until I reordered them.

Kadence and Spectra are palette systems: ten colour slots every block references, excellent for a client recolouring the site and thin for spacing and fluid type. Watch Astra under Spectra: it writes a 17 pixel body size as html { font-size: 106.25% }, which made every rem 6% too big until I reset it. Greenshift’s system is smaller and flatter.

Fonts are the one place Unblock clearly loses. Its Fonts tab installs through the WordPress Font Library and served three full Inter Tight files of about 110 KB each, 363 KB in total, where every other builder served between 65 and 86 KB. That is a default you can fix by uploading variable or subset files, and it is the biggest single reason for Unblock’s mobile score below.

Custom CSS and JavaScript: How Much Each Needed and Where It Lives

This is the number people ask about first, and it needs a warning label. In Unblock, Greenshift and GenerateBlocks, CSS is how styling works, so their “custom CSS” is their entire style layer. In Kadence, Elementor and Spectra, custom CSS is what the settings could not express, on top of hundreds of settings. Read the two groups differently.

BuilderHand written CSSHand written JSWhere the CSS livesWhere the JS livesPlaces to look
Unblock31.4 KB (all styling)5.9 KBGlobal selectors managerOn each block, bundled2
Kadence31.6 KB (on top of settings)4.6 KBOne Additional CSS boxOne Pro footer script2 plus Elements
Elementor12.4 KB (on top of 628 props)6.0 KB52 class variants + kitOne Pro Custom Code snippet4
GenerateBlocks27.8 KB (all styling) + 112 B4.2 KBGlobal Styles + local stylesOne GP Hook Element3
Greenshift25.0 KB (all styling)6.6 KB3 Style Manager blocks + Stylebook3 Style Manager blocks4
Spectra29.1 KB (on top of settings)5.3 KBAdditional CSS + Block CSSBlock JS + Astra hook4 plus Custom HTML
Bytes of hand written source from the six build logs, November 2026.
Bar chart of hand written CSS and JavaScript each builder needed for the same homepage
Hand written CSS and JavaScript for the same homepage on each builder.

Three findings. First, the JavaScript barely moves: every builder needed between 4.2 and 6.6 KB, because the design needs a scroll aware header, a video toggle, a strip and opening hours, and no builder has native components for all of them. Native navigation and forms are why GenerateBlocks and Kadence sit at the low end.

Second, visual settings did not save as much CSS as you would expect. Kadence needed 31.6 KB of Additional CSS on top of its settings, more than Unblock’s entire style layer, and Spectra 29.1 KB. Elementor needed the least, 12.4 KB, because V4’s Global Classes carry most of the styling as native props, and still 52 class variants needed hand written CSS for pseudo elements, descendant rules and states.

Third, where code lives decides how a site ages. Unblock puts each script on the block it controls and each rule in a named collection, so you click the strip and see the strip’s code. Kadence puts 33 KB in one Customizer box the editor does not even load. Spectra spread mine across four places. Elementor, GenerateBlocks and Greenshift keep each script in a single site wide field you have to remember exists.

Performance: What Each Builder Ships

Same page, same images, same video, same machine. I measured every homepage logged out with no page cache. The hand coded original is the baseline. Transfer sizes are compressed unless noted, and the 2.3 MB hero video is left out of the code totals.

MeasuredHand codedUnblockKadenceElementorGenerateBlocksGreenshiftSpectra
Code shipped (HTML, CSS, JS, fonts)96 KB390 KB151 KB398 KB120 KB104 KB254 KB
Without fonts22 KB27 KB86 KB314 KB45 KB28 KB168 KB
Fonts75 KB363 KB65 KB84 KB75 KB75 KB86 KB
JavaScript2.9 KB8.2 KB15.8 KB257 KB12.9 KB5.6 KB76 KB
HTML document, uncompressed22 KB89 KB315 KB137 KB88 KB95 KB536 KB
Requests17182248241642
Stylesheets / script tags2 / 10 / 211 / 417 / 166 / 31 / 116 / 11
DOM nodes / max depth449 / 10477 / 12658 / 23558 / 14520 / 17465 / 13688 / 17
Unused CSS71%44%75%79%69%52%76%
Server response, local6 ms52 ms129 ms209 ms64 ms63 ms201 ms
Lighthouse mobile76708474777676
Lighthouse desktop97969993989796
Mobile first paint1.6 s3.0 s1.4 s2.3 s1.5 s0.9 s2.1 s
Accessibility969610096969696
Local WordPress 7.1.4, PHP 8.5, November 2026. Lighthouse is the median of 3 runs. The hand coded original is static HTML.
Bar chart of code shipped, code without fonts, JavaScript, DOM nodes and requests for six builders and the hand coded page
Code shipped, code without fonts, JavaScript and DOM nodes for all six builders and the hand coded original.

Three builders landed close to hand written code. Greenshift shipped 104 KB, 8 KB more than the original, with the fewest requests of all. GenerateBlocks shipped 120 KB. Unblock shipped the least code of any builder before fonts, 27 KB, and the least unused CSS, then lost it all on 363 KB of fonts.

Three did not. Kadence inlines 232 KB of CSS into a 315 KB document, and three quarters of its CSS goes unused on this page, though it still scored best because it preloads lean fonts. Spectra writes each block’s CSS once per device, desktop, then tablet, then mobile, even when the value is the same: 2,176 rules and 334 KB of inline CSS inside a 536 KB HTML document, plus jQuery, the AOS library and four Spectra Pro extension stylesheets on a page that uses none of their features. Elementor sent 257 KB of JavaScript, 30 times what Unblock sent, partly because one V3 Nav Menu widget pulled in jQuery, jQuery Migrate and SmartMenus.

Read the Lighthouse scores with care

On every one of the seven pages, the hand coded original included, the mobile Largest Contentful Paint element is the 2.3 MB hero video. Mobile scores therefore mostly measure how fast that video arrives, and the original itself only scores 76. A few points of mobile score between these builders tell you little about the builder.

Desktop runs from 93 to 99, and total blocking time was zero everywhere. The meaningful signals are first paint, where Unblock’s font files cost it (3.0 seconds against 0.9 for Greenshift), and JavaScript weight, which Lighthouse on a fast machine under counts. Elementor’s 257 KB will cost more on a cheap phone than its 74 suggests.

Accessibility was 96 on every build except Kadence’s 100. The one axe violation on the others is a colour contrast rule the original design trips as well, so they reproduced it faithfully, and Kadence’s markup happened to avoid it.

My performance ranking, as delivered: Greenshift, GenerateBlocks, Kadence, Unblock, Spectra, Elementor. With Unblock’s fonts swapped for variable files, I would expect it to move up to share the top with Greenshift, but I did not test that, so I will not claim it.

Building It with AI

Unblock sells itself on AI building, so I also had an AI agent build each version from the same written brief, using each vendor’s recommended programmatic route, with the same pixel check as the finish line. That measures how easy each builder is to drive from text, which is where a lot of agency work is heading. I did not use any builder’s built in AI assistant.

AI buildUnblockGreenshiftGenerateBlocksElementorKadenceSpectra
Tokens used352K408K450K457K479K518K
Pixel check runs to pass234367
Minutes to a passing build192026343635
RouteUnblock abilitiesVendor converterBlock markup + stylesElementor MCP abilitiesBlock editor markupBlock markup + Astra
Same brief, same agent, same comparison harness. Sorted by tokens.
Bar chart of AI agent tokens, check runs and minutes to rebuild the homepage on each builder
Tokens, pixel check runs and minutes for an AI agent to rebuild the homepage on each builder.

The order follows each builder’s data model. Language models write HTML and CSS fluently, and the closer a builder’s storage is to plain HTML and CSS, the less there is to translate. Unblock stores exactly that: an element with a tag and attributes, a selector with rules. Its abilities, the same ones its MCP Bridge exposes to Claude, ChatGPT, Cursor and other clients, wrote them directly. Greenshift was a close second through its HTML converter, which dropped attributes and misordered media rules until patched.

GenerateBlocks stores styles twice, as style data and compiled CSS, so an outside writer must produce both. Elementor’s CSS goes through a converter into atomic props, and every gap in it cost a retry. Kadence and Spectra needed the most runs to discover their defaults, from Kadence’s inner column height to Spectra’s silent drops of clamp(). A human builder hits the same walls, more slowly.

Unblock’s MCP Bridge needs WordPress 6.9 or newer and an active licence, and lists 16 tools plus 31 more abilities through the WordPress MCP Adapter. Its Unbot assistant uses your own API key with no markup. If an agent does the first build of every site you make, the difference between 19 and 35 minutes repeats on every one of them.

Lock In: Switch the Builder Off

Then I deactivated each builder plugin, left its theme active, and measured how much of the original page text was still visible. This is the test that decides what happens if a client deactivates the plugin, a licence problem bites, or you want to move on.

What is left of the homepage on each builder with the builder plugin deactivated
What is left of the homepage on each builder with the plugin deactivated and the theme left on.
Builder offText visibleLinksImagesForm fieldsPage height (original 5,772 px)
Kadence91%, styled26 of 44All0 of 47,774 px
Elementor99.6%, unstyled5 of 443 of 4Fields left, unstyled49,913 px
Greenshift99.6%, unstyledAll3 of 4Fields left, unstyled39,042 px
GenerateBlocks65%, unstyledAll3 of 40 of 437,985 px
Spectra11%22 of 44AllRaw HTML form left16,182 px
Unblock0%, blank page0 of 440 of 40 of 4900 px, empty
Lock in test on all six local sites with the theme left active.

Kadence is the only build a visitor could still use: its blocks save HTML into the post, and the theme, the Customizer header, the Additional CSS and the Pro Elements keep most of it styled. Elementor and Greenshift keep almost every word, unstyled, with inline SVG icons blown up to full width. GenerateBlocks keeps two thirds, and its header and footer still print because GP Premium holds them. Spectra keeps the wrong 11%: Astra’s header and footer and the raw form survive, every Spectra block renders nothing.

Unblock leaves a blank page. Its elements are rendered by the plugin, and the Unblock Theme’s header and footer are Unblock elements too, so nothing prints. To be fair to it, if you stop paying the plugin keeps working, and you lose only updates, the AI assistant and support. The risk is removing it, never lapsing. Treat Unblock as permanent infrastructure, because it is.

WooCommerce: One Product Page, Six Builders

A homepage shows how a builder handles design. A shop shows how it handles data, so I went back to all six sites and built a WooCommerce product page on each, again against a hand coded reference. Two products share one template: AlloyGator rim protection, a variable product with 7 rim sizes and 5 colours (35 variations), and an XPEL paint protection film kit, a simple product. The page needed a breadcrumb, a gallery with thumbnails, size buttons and colour swatches that select the real variation, a price and stock box, a quantity stepper, tabs, related products and a fixed product bar on phones. Same six installs, WooCommerce 11.3.0, same rules as the homepage.

Every build matched the reference within 1% at 1440, 768 and 390 pixels, and every build passed a real cart test: I chose 20 inch in Rood, set the quantity to 2, and each cart showed the right variation at € 498,00. So all six can build a custom product page. The differences are in how they get there and what the page costs on a phone.

Hand coded reference product page for AlloyGator rim protection with size buttons and colour swatches
The target: my hand coded product page. Size buttons, colour swatches with names, a price and stock box and a fixed gallery. 104 KB shipped.

Where the product template lives

  • Unblock has no display conditions; WordPress’s template hierarchy applies the template to every product. It cannot write to the single-product template, because WooCommerce registers the same name, and it cannot place WooCommerce blocks. So the template is a shell of three template parts, and the product page itself is an Unblock template part of 193 blocks that Unblock’s WooCommerce data fills from the current product.
  • Kadence gets a real product template from Shop Kit, its WooCommerce add on: a Single Product Woo Template set to all products, built from Row Layouts around Shop Kit’s product blocks (67 blocks). Shop Kit ran from the vendor zip without a licence key. The editor canvas does not load the template’s own custom CSS, so it looks unstyled while you edit.
  • Elementor uses a Pro Theme Builder Single Product template with an all products condition, 90 elements. Version 4’s atomic elements have no WooCommerce versions, so six classic Pro WooCommerce widgets sit inside atomic Divs.
  • GenerateBlocks has no WooCommerce code at all. GP Premium’s WooCommerce module prints the classic WooCommerce template, a Layout Element removes the sidebar, and ten Block Elements hung on WooCommerce hooks add everything the design needs on top. The two column layout is forced with CSS.
  • Greenshift edits the Single Product template in the Site Editor with its WooCommerce add on blocks (gallery, price, add to cart, tabs, availability), 98 blocks, applied by the template hierarchy.
  • Spectra has no visual product template, because Astra has none. WooCommerce’s classic template is arranged by Customizer toggles, and eight Astra hook layouts add the rest: five built with Spectra blocks, three of code. Astra Pro’s generated files went stale after I enabled its WooCommerce module and had to be refreshed.

Only Kadence, Elementor and Greenshift give you a product template you design on a canvas with real WooCommerce blocks or widgets. Unblock gives you a canvas too, but you build the product parts yourself from elements and Twig. GenerateBlocks and Spectra leave the page to WooCommerce and let you hang content around it.

Size buttons and colour swatches

Classic WooCommerce prints dropdowns for variations, and the design wanted buttons and named colour swatches. The six builds took three routes.

  • A swatch add on: Kadence (Shop Kit Variation Swatches, set per attribute and per colour term, no picker JavaScript), Greenshift (its WooCommerce add on, text and colour types on the attribute screen) and Spectra (the Variation Swatches add on from Brainstorm Force). Greenshift’s and Spectra’s colour swatches print dots without names, so the names come from CSS, and Greenshift’s swatch stylesheet loads on every page of the site, homepage included.
  • Custom JavaScript over WooCommerce’s dropdowns: Elementor (a 9.8 KB Pro Custom Code snippet) and GenerateBlocks (a 3.1 KB Hook Element). Both turn the hidden selects into buttons, and the swatch colours live in code keyed by term slug.
  • Built in the builder: Unblock loops over the product’s attributes to print the buttons, takes swatch colours from its design tokens, and a 6.6 KB block script matches the choice to WooCommerce’s variation data and adds it to the cart. Without JavaScript the form still posts to WooCommerce.

What each product page ships

BuilderCode shippedJavaScriptRequestsLighthouse mobile / desktopMobile CLSHand written CSS / JSVariation pickerPixel diff 1440 / 768 / 390
Hand coded reference104 KB5 KB1495 / 1000n/aStaticn/a
Kadence + Shop Kit288 KB115 KB5881 / 990.0335.6 KB / 3.9 KBShop Kit swatches, no picker JS0.85 / 0.59 / 0.97%
Greenshift + Woo add on248 KB119 KB4580 / 990.0831.5 KB / 4.8 KBAdd on swatches + 4.7 KB JS0.05 / 0.48 / 0.08%
Unblock467 KB (363 KB fonts)59 KB2776 / 99025.7 KB / 6.6 KBOwn buttons on a real Woo form, 6.6 KB JS0.16 / 0.22 / 0.34%
GenerateBlocks + GP Premium249 KB102 KB4267 / 1000.4733.7 KB / 3.1 KBCustom buttons over Woo dropdowns, 3.1 KB JS0.21 / 0.44 / 0.62%
Elementor Pro497 KB296 KB7457 / 990.4924.9 KB / 9.8 KBCustom buttons, 9.8 KB JS0.02 / 0.03 / 0.04%
Spectra + Astra Pro + swatches add on385 KB137 KB6354 / 980.4936.3 KB / 1.4 KBAdd on swatches, 1.4 KB JS0.20 / 0.30 / 0.46%
The variable product page, compressed transfer, logged out with no page cache. Lighthouse is the median of 3 runs. Hand written CSS and JS count only the product page code of each build. Local WordPress 7.1.4, WooCommerce 11.3.0, November 2026.
Bar chart of code shipped, JavaScript, mobile Lighthouse score and layout shift for the WooCommerce product page on six builders
Code shipped, JavaScript, mobile Lighthouse and layout shift for the WooCommerce product page on all six builders and the hand coded reference.

WooCommerce changes the order from the homepage. Every build now carries WooCommerce’s own scripts, so the JavaScript gap between the light builders and the heavy ones narrows: GenerateBlocks, Kadence and Greenshift all land between 102 and 119 KB. Unblock sends the least JavaScript (59 KB) and the fewest requests (27), because WooCommerce’s gallery and variation scripts never run on its page, and once again loses most of that lead to the same 363 KB of fonts. Greenshift and GenerateBlocks ship the least code overall, about 250 KB each. Kadence has the best mobile score of the six, 81. Elementor sends 296 KB of JavaScript and 74 requests, and Spectra scores 54 on mobile.

Desktop runs from 98 to 100 for every build, so the spread is a phone problem, and most of it comes from one cause, below. The six stores are also not set up identically, and I left that visible: Elementor prints whole euros, GenerateBlocks and Spectra trim the ,00 on product pages with a PHP filter, and Kadence keeps WooCommerce’s two decimals. Some builds switched reviews off or raised the image sizes from 600 to 800 pixels. GenerateBlocks and Spectra put all 35 variations in the page, while Greenshift’s page looks up the default variation with an extra request, because 35 is above WooCommerce’s limit of 30.

The layout shift on phones

Three builds score a mobile CLS of 0.47 to 0.49, well into what Google rates as poor (above 0.25). The cause is the same on all three: WooCommerce’s own gallery slider. Before WooCommerce’s gallery slider starts, it lays every slide out at full width for a moment. On a 390 pixel phone I measured the gallery grow from 450 to 3,637 pixels tall and fall back to 444, and because the summary column sits under the gallery on phones, the title, price and buttons drop off the screen and jump back. GenerateBlocks, Elementor and Spectra all use WooCommerce’s gallery as it comes, so all three get the full jump.

The other three show why the template matters. Greenshift uses its own Swiper gallery, whose thumbnail strip starts as tall as the main image and collapses to 84 pixels: a 270 pixel jump and a CLS of 0.08. Kadence pre-sizes the main image, so only the thumbnail row moves, 49 pixels, CLS 0.03. Unblock gives the main image a fixed square box and never runs WooCommerce’s gallery script, so nothing moves: CLS 0.

Why the page jumps on phones

WooCommerce’s classic gallery uses a slider (FlexSlider) that sizes its slides only after the page has loaded. Until then the slides stack at full size, the gallery becomes several screens tall, and everything under it is pushed down, then pulled back up when the slider starts. On desktop the summary sits beside the gallery, so nobody sees it. On a phone it sits underneath.

The fix is a few lines of CSS: reserve the gallery’s space before the script runs, with an aspect ratio on the main image area and the extra slides hidden until the slider is ready. I did not add it to the three builds, because every build here is measured as it was built, so treat 0.47 to 0.49 as what you get by default. All three builders can carry the fix.

My WooCommerce ranking

For a WooCommerce store, I would pick Kadence first: it is the only one of the six that gives you a designed product template, native swatches with names and no picker code, the best mobile score and almost no layout shift. Greenshift comes second, with the lightest page and add on swatches, minus a stylesheet on every page and swatches that need CSS for their names. Unblock is third: the least JavaScript and zero shift, but you build every product part yourself and own the cart code. GenerateBlocks drops to fourth, because it has no WooCommerce code at all and its page shifts until you add the CSS fix. Elementor and Spectra stay fifth and sixth, with the heaviest pages and the full jump. None of this changes my scores, which rate the builders overall, but it does change who I would send to which builder.

Pricing in 2026

All prices are in US dollars from each vendor’s own pricing page, checked on 12 November 2026, before any Black Friday discount unless stated. I priced the tier each build needed: Elementor custom code and CSS are not in its Essential plan, Kadence Pro features are only sold in the bundle, and the Spectra build used Spectra Pro and Astra Pro.

What you payUnblockKadenceElementorGenerateBlocksGreenshiftSpectra stack
Free versionNone (demo only)YesYesYesYesYes
1 site, a year$69$350$84 (Advanced Solo)$99$59.99 (All in One)$138 (two Pro add ons, 3 sites)
10 sites, a year$129$599$204 (Expert, 25)$149$109.99 (15 sites)$199, renews $299
100 sites, a year$199$999$432 (unlimited)$199$129.99 (unlimited)$279, renews $429 (1,000)
Lifetime$499, 1,000 sitesNoneNone$596, 100 sites$109.99 to $399.99$549 (10) or $799 (1,000)
Refund window14 days30 days30 days, annual30 days14 days14 days
unblockwp.com/pricing, liquidweb.com/software/kadence, elementor.com/pricing, generatepress.com/pricing, greenshiftwp.com and wpspectra.com/pricing, 12 November 2026. Only Brainstorm Force publishes renewal prices.
Bar chart of the yearly price for ten sites and the lifetime price on each builder
Yearly price for ten sites, the second year, and the cheapest lifetime licence covering ten sites on each builder.

Two notes the table cannot show. Every Unblock plan is 30% off until 1 December 2026 ($48.30, $90.30, $139.30 and $349.30 lifetime), and local and staging sites do not count. Kadence’s bundle also includes Give, The Events Calendar and LearnDash, which you pay for whether you need them or not.

The comparison that should decide it for freelancers

At ten client sites a year, Greenshift is the cheapest at $109.99, then Unblock at $129 and GenerateBlocks at $149. Spectra’s toolkit starts at $199 and renews at $299, Elementor Expert costs $204, and Kadence costs $599, more than four times GenerateBlocks.

For lifetime, Greenshift’s $399.99 unlimited licence and Unblock’s $499 for 1,000 sites are the two best deals in the group. GenerateBlocks’ $596 caps you at 100 sites. Kadence and Elementor have no lifetime option at all. And five of the six let you start free; Unblock does not, so you pay before you can try it beyond the demo.

Which One Should You Pick?

Here is how I would choose, by who you are and who will own the site.

Pick GenerateBlocks if

  • You want one builder for most client sites, with visual styling on a real design system.
  • You need an accessible navigation and a form builder with stored entries, natively.
  • You want a light page (120 KB), a free version, and content that survives without the plugin.

Pick Unblock if

  • You write HTML and CSS and want each block to be exactly one element with your classes.
  • You build with AI agents over MCP: 352K tokens and 19 minutes, the best of the six.
  • You maintain the sites yourself and like $499 once for 1,000 sites.
  • You accept that switching the plugin off leaves a blank page.

Pick Kadence if

  • Your client will edit the site alone and needs native, familiar components.
  • You want the best measured scores out of the box: 84 and 99, accessibility 100.
  • Losing the plugin must not take the styled content with it, and the price is fine.
  • You are building a WooCommerce store: Shop Kit adds a real product template and swatches with no picker code.

Pick Greenshift if

  • Budget and page weight come first: 104 KB shipped and lifetime licences from $109.99.
  • You are technical, comfortable with class based CSS, and can live with a busy editor.
  • You run a small shop: its WooCommerce add on gave the lightest product page of the six, 248 KB.
  • Elementor: your team already works in it, and you want the biggest ecosystem and stored form submissions. Budget for the JavaScript.
  • Spectra: you run Astra already and want a free start that follows its palette. Add a form plugin and watch the page weight.

The Ranked Verdict

Scores out of five, defended by the evidence above. Three builders share 4.5; the order within that tie is my call, and I explain it under each card.

1. GenerateBlocks

GenerateBlocks

4.5/5

The best all rounder of the six: native navigation and forms, a real design system, a light page and a graceful exit. Its weak spot is the editor, not the output.

What works

  • Won four of eight sections, the most of any builder
  • 120 KB shipped, Lighthouse 77 mobile and 98 desktop
  • Native accessible navigation and a full form builder
  • Global Styles, Design Tokens and a live Style Book
  • Free version, and 65% of the text survives with the plugin off

What does not

  • Editor canvas ignores the dark page background
  • List View says Container on almost every row
  • Pro only sold in the GeneratePress One bundle
  • No WooCommerce blocks: the product page is classic WooCommerce plus hooks, CLS 0.47 on phones

It ranks first because it never lost badly anywhere. Every other builder has at least one section or metric where it fell far behind.

2. Kadence

Kadence

4.5/5

The safest pick for sites the owner edits: mature components, the best scores and the best exit. Held back by price and an editor that hides your CSS.

What works

  • Best Lighthouse (84 and 99) and the only 100 for accessibility
  • 91% of the page survives with the plugin off, still styled
  • Native header drawer, background video and validated form
  • Best WooCommerce product page: Shop Kit template, named swatches, mobile 81
  • Free blocks and theme with 600,000+ installs

What does not

  • $350 a year for one site, $599 for ten, no lifetime
  • Needed 31.6 KB of Additional CSS for this design
  • The editor does not load Additional CSS
  • 315 KB HTML document, 658 DOM nodes up to 23 levels deep

Second, ahead of Greenshift, because it is the one I would hand to a client without worrying. The price is what keeps it off the top.

3. Greenshift

Greenshift

4.5/5

The lightest and cheapest builder in the test, with HTML that survives without it. The editing experience is the roughest of the six.

What works

  • 104 KB shipped, 16 requests, the fastest first paint
  • Lifetime licences on every pack, unlimited sites for $399.99
  • 99.6% of the text survives with the plugin off
  • Real semantic tags through one Element block
  • Lightest WooCommerce product page, 248 KB, with add on swatches

What does not

  • CSS lives in Style Manager blocks away from the element
  • Class and token names near invisible in dark panels
  • The vendor converter dropped attributes until patched

4. Unblock

Unblock

4.0/5

The best editing model for developers and the best AI build of the six, held back by its font defaults, no free tier and total lock in.

What works

  • Every block is one HTML element with your own classes
  • Visual panels and the CSS editor work on the same global rule
  • 27 KB of code before fonts, the least unused CSS
  • Fastest AI build: 352K tokens, 2 runs, 19 minutes
  • Least JavaScript and zero layout shift on the WooCommerce page
  • $129 for 10 sites, $499 once for 1,000

What does not

  • Blank page with the plugin switched off
  • 363 KB of fonts by default, mobile Lighthouse 70
  • No ready made menu, slider, video or form validation
  • Cannot place WooCommerce blocks: you build the product page and cart code yourself
  • No free version, and 1.0 shipped on 10 November 2026

Fourth overall, first for its audience. If you are a developer or an agency building with agents, move it to the top of this list.

5. Elementor

Elementor

3.5/5

V4 is a big step forward and reached the same page with the same element count, but it ships far more JavaScript than this page needs.

What works

  • Global Classes and Variables make it workable for developers
  • Native Background Video and a Pro form with stored submissions
  • 99.6% of the text survives without it
  • Free version and the largest ecosystem in WordPress

What does not

  • 257 KB of JavaScript and 48 requests
  • 497 KB and 296 KB of JavaScript on the WooCommerce product page
  • No ul, dl, figure or fieldset tags in atomic containers
  • Class priority quirks, converter bugs and promo modals

6. Spectra

Spectra

3.5/5

A capable free builder with good visual grids, carried by Astra, with heavy output and no form block.

What works

  • Free on WordPress.org with Astra underneath
  • Native Grid and breakpoints that follow WordPress 7.1
  • Containers render as any semantic tag
  • Won the about section with the least CSS

What does not

  • 536 KB HTML: each block’s CSS is written once per device
  • 76 KB of JavaScript and 42 requests, including jQuery
  • No form block, and 11% of the text survives without it
  • No visual product template, and 54 on mobile for the product page
  • Silent drops of clamp(), rgba borders and empty attributes

Elementor ranks above Spectra on a tie because it keeps your words if you leave and has a working form. Spectra does neither.

When Unblock Makes Sense, and When It Does Not

This site is about Unblock, so it deserves a straight answer of its own.

Unblock makes sense for developers and designers who already think in HTML and CSS and want the block editor to stop fighting them. It makes sense for agencies whose first build is done by an AI agent, because the agent writes what it already knows and got it right in two runs. It makes sense for custom designs with their own breakpoints and tokens, for anyone who wants semantic markup and the least code before fonts of the six, and for people who maintain many sites and like a one time price.

Unblock does not make sense for clients who edit alone: the visual panels edit a class, so changing one tile’s padding changes all eight. It does not suit anyone who wants ready made components, since there is no menu, slider, tabs, video background or form validation; GenerateBlocks and Kadence won the header and the form for exactly that reason. It does not suit anyone who needs a free start or a track record, with version 1.0.0 released on 10 November 2026. And it does not suit anyone who cannot accept a blank page if the plugin ever goes.

If you do pick it, upload variable or subset font files instead of relying on the Font Library default, because that one change is most of the gap between Unblock and the top three on performance.

The Conclusion, in Full

I built one demanding homepage six times to the same pixel, and the builders split into two groups. GenerateBlocks, Kadence, Greenshift and Unblock produced pages close to what I would write by hand, each with a clear strength. Elementor and Spectra produced the same picture with far more code underneath: 257 KB of JavaScript in one case, a 536 KB HTML document in the other.

GenerateBlocks is my pick for most people. It won the header, the tiles, the form and the footer, shipped 120 KB, has a free version and a design system that scales from one page to fifty, and leaves something to rescue if you ever switch it off. Its editor has rough edges, and you should rename your blocks, but nothing it does costs your visitors.

Kadence is the one I would hand to a client who edits alone, and the scores back that up: the best Lighthouse results and the only perfect accessibility score in the test, and a styled page with the plugin off. You pay for that peace of mind at four to five times the price of the others. Greenshift is the one I would pick on a tight budget for a technical team: the lightest page and the cheapest lifetime licence, with an editor you have to get used to.

Unblock is the best tool for the person building the site. It is the closest thing to writing HTML and CSS by hand inside WordPress, its visual panels and code editor never disagree, and it gave an AI agent the easiest job of the six by a wide margin. It is also brand new, paid only, heavy on fonts by default and impossible to leave. If you are a developer or an agency building with agents and you keep your clients on a care plan, those trade offs are worth it. If you hand sites over and walk away, they are not.

WooCommerce reshuffles the middle of that list. If the site is a shop, Kadence moves to the top: Shop Kit gives it a real product template and named swatches, and its product page scored best on mobile with almost no layout shift. GenerateBlocks, my pick for brochure sites, has no WooCommerce code at all, and its product page jumps on phones until you add a few lines of CSS. Unblock built the steadiest product page of the six, with the least JavaScript, at the price of building every product part yourself.

My ranking: GenerateBlocks, Kadence, Greenshift, Unblock, Elementor, Spectra. For the pair you are deciding between, read the head to head posts below.

FAQ

What is the best WordPress page builder in 2026?

In my test of six builders on the same homepage, GenerateBlocks was the best all rounder: 120 KB shipped, native navigation and forms, a free version and a graceful exit. Kadence is best for client edited sites, Greenshift for low cost and weight, and Unblock for developers and AI builds.

Which page builder is the fastest?

Greenshift shipped the least code (104 KB against 96 KB for the hand coded original) and had the fastest first paint. Kadence scored the highest Lighthouse results, 84 mobile and 99 desktop. Unblock shipped the least code before fonts, 27 KB, but 363 KB of fonts by default.

Kadence vs GenerateBlocks: which should I choose?

GenerateBlocks if you build many sites and care about weight and price: 120 KB shipped and $149 a year for 10 sites. Kadence if a client edits alone and you want the best scores and a styled page without the plugin, at $599 a year for 10 sites.

Is Unblock better than Kadence, Elementor or GenerateBlocks?

For developers and AI agent builds, yes: the least code before fonts and the fastest AI build of the six. For most other sites, GenerateBlocks and Kadence are safer, with native navigation and forms, free versions and content that survives without the plugin.

Is Unblock code only?

No. Its inspector has visual Layout, Sizing, Spacing, Borders, Typography, Background and Effects panels, and they edit the same global CSS rule the docked code editor shows. It is CSS first, with visual controls on top.

What happens if I deactivate my page builder?

In my test Kadence kept 91% of the text, still styled. Elementor and Greenshift kept 99.6% unstyled, GenerateBlocks 65%, Spectra 11%, and Unblock left a blank page.

Which page builder has a lifetime deal?

Unblock ($499 for 1,000 sites), GenerateBlocks through GeneratePress One ($596 for 100 sites), every Greenshift pack ($109.99 to $399.99 for All in One) and Spectra and Astra ($319 to $799). Kadence and Elementor have no lifetime plan.

Which page builder is cheapest for agencies?

At ten sites a year Greenshift costs $109.99, Unblock $129, GenerateBlocks $149, Spectra $199 renewing at $299, Elementor $204 and Kadence $599. For 100 sites Greenshift, Unblock and GenerateBlocks all cost $199 or less.

Which builder is best for building with AI?

Unblock. An AI agent rebuilt the homepage with 352K tokens, 2 check runs and 19 minutes, against 408K and 20 minutes for Greenshift and up to 518K and 35 minutes for Spectra. Unblock also has an MCP Bridge for Claude, ChatGPT and Cursor.

Does Spectra Blocks have a form block?

Not in version 1.0.15. I built the quote form as raw HTML that nothing receives without a form plugin. Kadence, Elementor Pro, GenerateBlocks Pro, Greenshift and Unblock all handle form submissions natively.

Which builders output semantic HTML?

Unblock, GenerateBlocks, Greenshift and Spectra all produced real dl, ul and figure elements in my build. Kadence nests rows of text blocks, and Elementor V4’s atomic containers offer no list, description list or figure tags.

Which page builder is best for WooCommerce?

In my test Kadence, with its Shop Kit add on: a designed product template, named swatches with no picker code, the best mobile Lighthouse score of the six (81) and a CLS of 0.03. Greenshift with its WooCommerce add on came second with the lightest product page, 248 KB.

Can Unblock build a WooCommerce product page?

Yes. I built a full variable product page with size buttons, colour swatches and AJAX add to cart, and it passed the cart test. Unblock cannot place WooCommerce blocks, so you build the product parts from elements and Twig, with 6.6 KB of your own JavaScript for the variation picker.

Why does my WooCommerce product page jump on mobile?

Usually because WooCommerce’s gallery slider lays all slides out at full size before it starts. On phones the summary sits under the gallery and jumps with it: CLS 0.47 to 0.49 in three of my builds. Reserving the gallery’s space with CSS fixes it.

Related Posts

Subscribe to my Newsletter

If you love my tutorials, consider subscribing to not miss any awesome tips about block editors.

Don't Keep This Magic to Yourself - Share!
Rahul Singh
Rahul Singh

With more than 5 years of wrangling Kadence and Blocksy Themes, plus mastering the Block Editor, I turn complex web design into a breeze. My superpower? Crafting websites that are both fast and fabulous, with a dash of fun and a focus on making conversions soar!

Articles: 17

Leave a Reply

Your email address will not be published. Required fields are marked *