This update is by far the biggest we ever released (300+ changes). Marking a new chapter of even better performance, tying up a lot of loose ends, and paving the way for many upcoming new & more advanced features.

Builder Rewrite

One of the reasons this release took longer than usual was the major rewrite of the builder. Which now runs on a completely custom and optimized-for-Bricks state management solution.

This decision came to be as it was clear that Vuex, the state management solution we used up until now, won’t receive any major updates. Not to accumulated any outdated technology, we decided to roll-out our own solution.

We’ve also written our own Bricks-native Drag & Drop (& Sortable) solution, for which we relied on SortableJS before.

Builder interactions should feel much more snappy & accurate. Moving away from relying on third-party solutions as much as possible not only future-proofs us, it enables tailor-made & optimized in-builder experiences. Like being able to drag new elements directly into the Structure panel, custom auto-scroll while dragging, and much more nerdy stuff.

Optimized HTML Output

We completely removed all element wrappers, and shortened element ID & class name prefixes from bricks-element- to brxe-.

A list of other ID/class name changes:

  • #bricks-header > #brx-header
  • #bricks-content > #brx-content
  • #bricks-footer > #brx-footer
  • .bricks-container > .brx-container
  • Removed: .bricks-site-wrapper
  • Removed: .bricks-element

Inside the builder, there are no more extra divs like .bricks-container-inner or .bricks-element-inner.

This new structure & naming convention results in even smaller, faster loading pages, and easier to write custom CSS.

Optimized DOM Structure

WooCommerce – Cart & Checkout Builder

You can now visually create your WooCommerce cart & checkout pages with Bricks. We’ve created a new “WooCommerce” topic in the Bricks Academy that walks you through our WooCommerce Builder: https://academy.bricksbuilder.io/topic/woocommerce

Auto-Sync Global Data between Tabs

In Bricks 1.4 changes to any of the following global data is automatically synced across all open builder tabs on your computer:

  • Global elements
  • Global classes
  • Global classes locked
  • Pseudo classes
  • Pseudo elements
  • Theme styles
  • Color palettes
  • Pinned elements

Only Save Actual Changes (Improved Team Editing)

Prior to 1.4 every time you hit save all builder data was saved, regardless if you changed it or not. When working in a team on a site, this often resulted in undesired data loss.

TIP: If you make & save a change in the builder, but it’s not persistent, you can do a forced-save of all data by using the new “CMD/CRTL + SHIFT + S” keyboard shortcut. Also, please let us know about any such issue in the forum.

More Powerful Dynamic Data

  • JetEngine: Custom Fields support
  • ACF Repeater & Groups; Meta Box Group; JetEngine Repeater
  • ACF Relationships (in Bricks Query Loop)
  • Dynamic Data: Run PHP functions: “echo:function_name()

Remove jQuery (from the frontend)

Bricks no longer loads any jQuery on the frontend. We have written plain JavaScript solutions for any frontend-facing Bricks code that relied on jQuery.

To benefit from this improvement make sure your site has no other jQuery dependencies.

You can, of course, still use jQuery. A lot of plugins actually require it.

If you use jQuery in any of your own custom JavaScript code you can load jQuery (it’s still registered) by adding the following code to the functions.php file of your Bricks child theme:

function load_jquery() {
  wp_enqueue_script( 'jquery' );
}

add_action( 'wp_enqueue_scripts', 'load_jquery' );

Update, Then Do This

Regenerate CSS files:

As with any update, make sure to “Regenerate CSS files” in case you are using the “External Files” CSS loading method (Bricks > Settings > Performance).

Custom elements:

If you have written your own custom Bricks elements make sure to add the new render_attribute( '_root' ) to your element’s outermost HTML tag.

This adds all relevant HTML attributes like the element ID, classes, etc. to your custom element.

We’ve updated the Bricks child theme with example code for the latest element syntax. You can find a concrete code example also in the Academy: https://academy.bricksbuilder.io/article/create-your-own-elements/

Using Custom CSS? Run The “Converter”

If you have written any custom CSS you can run the new Converter to automatically update any obsolete Bricks element ID & class name occurrences for you. So you don’t have to do this manually 😉

As it’s an experimental feature that performs changes in your database, please create a full-site backup before running the new Converter.

Other Noteworthy Changes

  • Default container width only set on root container. To set a specific width for an inner container set “Flex shrink” to “0”.
  • Shape Divider: Only available for Container element (due to removing the element wrappers)
  • CSS filters apply to container itself: You now might need to manually create an inner container that contains your CSS filter, so it doesn’t affect the other container elements.
  • Removed button line-height default (allows for better multi-line buttons)

Full changelog

  • Remove jQueryNew
  • ACF Relationships (in Bricks Query Loop)New
  • ACF Repeater & Groups; Meta Box Group; JetEngine RepeaterNew
  • Link Type: Media (Attachment)New
  • WooCommerce : Cart & Checkout Pages (Phase #2)New
  • Class Lock for CSS-Class-Based StylingNew
  • Structure Panel: Custom CSS IndicatorNew
  • Unlink Global ElementsNew
  • Editor: Add subscript & superscript HTML tagsNew
  • Drag/Add Elements directly into Structure PanelNew
  • Wrap Any Element in ContainerNew
  • Counter element: Add “Count From” settingNew
  • Remove Element Wrapper (Builder & Frontend)New
  • Global Data Auto-Sync of all open builder tabsNew
  • Builder: History PanelNew
  • Global CSS Classes: Import/ExportNew
  • Copy element styles & paste to global classNew
  • Add New Container Layouts VisuallyNew
  • Canvas: Incremental Element Spacing & Container Resizing (in Steps of 5)New
  • Element Spacing: Visually adjust any unit on canvasNew
  • Dynamic Data: Add Provider “JetEngine”New
  • Template: “Populate content” New option to populate with “CPT Archive”New
  • Product Up-Sells element: Extend with Product Cross-SellsNew
  • Dynamic Data: Run PHP functionsNew
  • Dynamic Data: human readable time difference filterNew
  • Shorter element IDs & element class namesNew
  • Query: Add “Ignore sticky posts” settingNew
  • “Disable lazy load” setting: Carousel, Slider, TestimonialsNew
  • Query: Add custom “No results message” settingNew
  • Nav Menu Element: Sub menu item borderNew
  • New Filter: Disable Google FontsNew
  • Divider: Add Direction “Vertical”New
  • Products Filter element: New setting “Only parent terms”New
  • Allow to nest TemplatesNew
  • Structure Panel: Add Level IndicatorNew
  • Nav Menu: Background on sub menu “ul” wrapperNew
  • Dynamic Data: New filter “newTab” to open link in a new tabNew
  • Renamed “Social Icons” to “Icon List” & Improve CSS selectors (to make entire icon clickable)New
  • Carousel: Add setting “Stop autoplay on last slide”New
  • Slider: Show multiple slides at onceNew
  • Image element: Add HTML tag settingNew
  • New Template & Theme Style Condition: Apply to child termsNew
  • Bricks-Native Drag & Drop, and Sorting (Repeater)New
  • Editing Text on Canvas on second/double clickNew
  • DnD: Highlight container while dragging an element over itNew
  • Builder: Dependency-free custom Draggable & SortableNew
  • Only Save Changed Data (Enabled Team Editing)New
  • New Keyboard Shortcut: “Duplicate” (CMD / CTRL + Shift + D)New
  • New Keyboard Shortcut: “Wrap in Container” (CMD / CTRL + Shift + P)New
  • New filter: bricks/elements/{element_name}/control_groupsNew
  • Icon Box: Add ‘Spacing’ and Content ‘Align’ settingNew
  • Theme Style: Typography > HTML font-sizeNew
  • New Setting: Disable Google FontsNew
  • New Template & Theme Style Condition: Apply to child pagesNew
  • Builder: Remove inner wrappersImprove
  • Updated: FontAwesome 6 & swiperJS 8Improve
  • Image Gallery & Posts element: Add “srcset” attributeImprove
  • Custom Fonts: Load “woff2” font file firstImprove
  • Community Templates: Disable autoloading option (performance)Improve
  • Remove default WordPress color presets on Bricks pagesImprove
  • Improve Selection Contrast in Code EditorImprove
  • Improve performance on element registrationImprove
  • Image element: Open Link to Attachment Page/Media File in same tab by defaultImprove
  • A11y: Tabbing should target menu items subsequently (Fly-out Menus)Improve
  • TinyMCE: Text editor resizes when switching between Visual & Text modeImprove
  • Revisions: Don’t apply Bricks revisions limit to pages/posts that aren’t rendered with BricksImprove
  • Improve Quick Edit linksImprove
  • Export Template: Include Global CSS Classes DataImprove
  • Copy Styles: Copy CSS classes tooImprove
  • Theme Styles: Container width only applies to root & direct child container of stretched containerImprove
  • Image element: Render img tag onlyImprove
  • Elements panel: Auto-focus on search fieldImprove
  • Insert new element into parent containerImprove
  • Remove #brx-wrap HTML tagImprove
  • Global Class Lock: Can’t select or view locked classImprove
  • Builder: Higher contrast text selectionImprove
  • Shortcode element: Render Dynamic Data before do_shortcodeImprove
  • Various Accessibility ImprovementsImprove
  • Builder Access: Remove pseudo-classes UI for “Edit content”Improve
  • Hide “Bricks” menu in WP admin if logged-in user has no builder accessImprove
  • Form Element Styling issuesImprove
  • Global Classes: Lag in class dropdown when using hundreds of classesImprove
  • Panel Controls on lower breakpoints visible although they don’t meet conditionsImprove
  • Button: Remove Default Line Height & Use Padding InsteadImprove
  • Icon List: Remove superfluous styles (font-size, font-weight, etc.)Improve
  • Slider/Carousel Spacing: Remove units (swiperJS always uses px)Improve
  • ControlNumber: Resize unit CSS variable or function is usedImprove
  • Code Control: Add mode: ‘javascript’Improve
  • Improve: Undo/redo history in builderImprove
  • Images were sometimes loaded twice (due to imagesLoadedJS proxy image creation)Improve
  • Template inserted as shortcode: Missing Styles (“External Files”)Fix
  • Template: Page Settings > Custom CSS: Missing styles (“Inline Styles”)Fix
  • Theme Styles: Icon Box Alignment & Icon SizeFix
  • Pseudo Classes: Styles not added to other elementsFix
  • Global CSS Class: “flex-stretch” doesn’t stretchFix
  • SVG Element Width (in %)Fix
  • Remove Bricks templates from wp-sitemap.xmlFix
  • Testimonials Element: SVG arrow icons aren’t renderedFix
  • Conflict with Users list custom columns in wp-adminFix
  • Post title: Renders archive title (in loop)Fix
  • Query Loop: “Include posts” resets the queryFix
  • Query Loop: Same background image for all posts/terms showsFix
  • Query Loop: Broken Taxonomy & Meta Repeater Control UI (in builder panel)Fix
  • Heading “Reset” via formatting toolbar adds “p” tagsFix
  • Builder: “Scroll to element” with preview scale creates grey area at the bottomFix
  • Saving element as “Global element” loses the custom labelFix
  • “Paste element” with non-container selected not workingFix
  • Copy & Paste Element: Custom CSS “root” issueFix
  • Basic Text element: HTML tag doesn’t update in builderFix
  • Related Posts: “Content width” sets height; and column width depends on post titleFix
  • max-width unit (default 100%) can’t be changed to px (default unit)Fix
  • Form Element: Remove inline style from file upload result divFix
  • Form Element: File upload in form shows 10 uploads instead of 1Fix
  • PHP notice: When inserting Community TemplateFix
  • PHP error: When using woo_product_excerptFix
  • Dynamic Data: Allow output of iframe in textareaFix
  • Templates: Escape characters in Code elementFix
  • Insert Template: Single quote gets escapedFix
  • Dynamic Data “post_content”: SVGs are escapedFix
  • Rich text with image in Template: img tag gets escapedFix
  • Pricing Table: Dynamic Data Dropdown Styling IssueFix
  • Product Archive: If set as the search template it should accept filter with ?s=Fix
  • Conditions: Pages translated with Polylang do not showFix
  • Nav Menu Element: CSS transition don’t apply to menu itemsFix
  • Background video: Chrome not playing .mp4 filesFix
  • Number Control: Unit only added after blur or enterFix
  • Basic Text element: 0 = empty contentFix
  • Color Palette: Using “External Files” in a fresh installation color vars are not loadedFix
  • Icon Box: Deprecated controls generate old CSSFix
  • JS-based elements inside Query Loop not workingFix
  • Author Avatar & Featured Image Image SizeFix
  • Header/Footer Templates: “Inner Container” PaddingFix
  • Mobile Menu: After opening a submenu, it is not possible to close itFix
  • Structure Panel (RTL): Container toggle not workingFix
  • Custom elements: Styles & scripts not loaded if element not added to canvasFix
  • WooCommerce: Breadcrumbs wrong pathFix
  • WooCommerce Price Filter: Styling issues (Safari & Firefox)Fix
  • WooCommerce: Variable product not showing stock of the variationFix
  • Fix Multiple CSS DeclarationsFix
  • ControlEditor Panel stays expandedFix
  • Theme Styles: Link Color precedes color set on element ID (on canvas)Fix
  • ControlDimensions: Linked units on smaller breakpoints don’t sync correctlyFix
  • Form Element: Every field contains the “file upload” separatorFix
  • Linking value of 0 doesn’t auto-link the other valuesFix
  • Button inside linked Container breaks HTMLFix
  • Image Element: Fix Object-fit & stretchFix
  • Social Icons: Alignment issuesFix
  • Image Gallery: SVG + Masonry Layout PHP Warning and NoticesFix
  • Query Loop .root on every container breaks layout on canvasFix
  • Fix scroll-to-element on canvas (triggered by Structure Panel)Fix
  • Save Container as Section Template: Container is emptyFix
  • CSS ID & Classes should use left-to-right (LTR) direction regardless of selected languageFix
  • Dynamic Data: Loading ACF fields from PHP not workingFix
  • Page Settings: Fix custom CSS & JSFix
  • Slider & Carousel: Items to Show / Scroll on breakpointsFix
  • WooCommerce: Image Gallery ElementFix
  • Mobile Menu: Hamburger Close Button inherits “Scrolling Text Color”Fix
  • Shortcode element with global classes: CSS missing on frontend (External files)Fix
  • Form Element: File Upload LabelFix
  • WP Admin Bar + Sticky Header (on mobile)Fix
  • Carousel: Show Feature Image in “Content > Overlay”Fix
  • Loop Pagination on Page (with default page template)Fix
  • Audio Element: Play button icon after audio endsFix
  • Builder: Fix Horizontal OverflowFix
  • Slider: Pause on hover stops foreverFix
  • {woo_product_sku} not retrieving the variation SKU only the main SKUFix
  • Form success message: Fields or Dynamic Ddata not replacedFix
  • Element-specific Theme Styles not applied when previewing a Query LoopFix
  • Form: Email Content set to HTML: “br” tag added for each new lineFix
  • Chained Pseudo Elements/Classes not working on frontendFix
  • Slider Element: Slide background-image position not appliedFix
  • Don’t apply .root container padding to .stretch containerFix
  • Author Archive: Image/Image Gallery not showing correctly (Dynamic Data)Fix
  • Heading with Separator isn’t self-alignableFix
  • Heading: Add Separator ‘None’ optionFix
  • Improve Dynamic Data logic: Avoid replacing code inside and Fix
    All releases