Skip to main content

68 templates now rebuilt for Joomla 5 + VirtueMart 4 on Bootstrap 5. See what changed

  • Change Log:
    • Release Date: 2026-10-19, Version: 5.4.10.2, Notes:

      Security. The template's menu layouts printed a menu item's note and link exactly as entered, so markup typed into a menu item's Note or Link field reached the page. Both are now escaped, as Joomla's own menu layouts do.

      Colours with transparency. A colour chosen with the colour picker's opacity slider (saved as an 8-digit colour such as #rrggbbaa) was replaced with black. Colours with transparency are now used as chosen.

    • Release Date: 2026-10-19, Version: 5.4.10.1, Notes:

      VirtueMart login page. The VirtueMart login page, which shoppers who are not logged in reach from the cart and account links, returned a server error on Joomla 5. The template's login override used JDispatcher, a Joomla 3 class that Joomla 5 no longer has; it now uses Joomla's own event call.

      Page language. The page had no opening <html> tag, so browsers, screen readers and search engines were not told the page's language or text direction. It now declares both from the site's language settings.

      Printing. Printed pages lost the template's print styling: a leftover line at the top of css/print.css stopped browsers reading the stylesheets it imports.

    • Release Date: 2026-10-19, Version: 5.4.10, Notes:
      First Joomla 5 native release. Flexo has been brought forward from the previous download (18.08.2025 5.3.0/4.4.4) to Joomla 5.4.10 + VirtueMart 4.8.4 + Bootstrap 5. Flexo keeps its own Bootstrap 2 layout classes and renders on Joomla 5’s Bootstrap 5 through a compatibility stylesheet, so existing module and article markup keeps its layout. This release adds a full phone layout, a real colour picker for every colour setting, a favicon tool and current social networks. Every Joomla 3 API call has been replaced, and every template setting written into the page is now escaped. Across the template, 19 files were added, 12 removed and 66 modified (341 → 348 files). The template version now matches the Joomla version it ships with.

      Added

      Bootstrap 5 compatibility layer

      • New css/bs2-bs5-bridge.css: maps Flexo’s Bootstrap 2 grid (.row-fluid, .spanN, offsets, hidden-phone / visible-phone utilities, button and form classes, modal shell) onto Joomla 5’s bundled Bootstrap 5. It is loaded as the last stylesheet in the head, with a file-time version marker, so it sits in the right place in the cascade.
      • The bridge includes the Bootstrap 2 phone body gutter, block-level .nav > li > a anchors, and icons for the VirtueMart cart’s update-quantity and remove buttons (Font Awesome 6 glyphs in the cell’s own text colour).
      • New js/cs-jq-compat.js: restores three jQuery 1.x calls that Joomla 5’s jQuery 3 removed but the bundled slideshow, parallax and carousel scripts still use (.live(), .offset() on the window, and .load(fn) as a load-event shortcut).

      Phone layout

      • New js/cs-mobile-generic.js: on phones (up to 767 px) Flexo gets a compact header with a menu button that opens a slide-out menu built from the site’s menus.
      • A phone toolbar under the header with six 44×44 px buttons: Section menu (opens the shop categories), Log in, Register, Search, Follow us (the social links) and Cart. The toolbar runs the full width of the screen.
      • The VirtueMart category menu opens its subcategories with the arrow on phones.
      • The cart opens as a panel centred on the screen. The cart icon shows how many items are in the cart, on phones and on desktop, and updates when VirtueMart refreshes the cart.
      • The cart panel, the login form and open dialogs close when you tap outside them.
      • The phone search box uses a 16 px font and a 44 px height, so iPhones do not zoom the page when you tap into it.
      • On account pages (login, registration, password reset, VirtueMart account), phones show the page content first, with only the breadcrumbs and store menu above it.
      • On phones, the header, slideshow, information band and footer run edge to edge, while text and product cards keep a 20 px side margin (cs-no-bs2-gutter body class plus a Flexo-specific inset block). The page cannot be pushed sideways.

      Password show/hide

      • New js/cs-password-eyeball.js: every password field (login module, login page, registration and account forms) gets an eye button that shows or hides what you have typed. On phones it sits beside the field.

      Own error pages

      • “Page not found” (404) and “access denied” (403) pages are now shown inside the template, with its header, menus, phone toolbar and footer, instead of Joomla’s bare error page. They fit a phone screen.

      Colour picker

      • New custom field fields/colorpicker.php with the bundled Coloris picker (js/coloris.min.js, css/coloris.min.css). All 70 colour settings are now type="colorpicker", with a live swatch and a picker that ships with the template (nothing is loaded from an outside site).
      • New fields/adminui.php: loads the Options screen’s support scripts, declares the jQuery framework they need, and makes the template’s Details panel follow Joomla’s light or dark admin theme.

      Favicon tool

      • New Favicon tab (fieldset faviconsettings) with a media field (favicon) and a favicon tool (fields/favicontool.php) that builds the favicon set from one image. With thanks to Gianluca, whose favicon question inspired this tool.
      • index.php outputs the favicon links through two new helpers, phFaviconSet() and phIcoBytes().
      • 10 new language strings in en-GB.tpl_flexo.ini (73 → 83), e.g. TPL_FLEXO_FAVICON_TAB, TPL_FLEXO_FAVICON_LABEL, TPL_FLEXO_FAVICONTOOL_CREATE.

      Modern social network support

      • Eight new social services, each with an on/off switch and a URL field: Instagram, YouTube, Pinterest, Threads, TikTok, Bluesky, Mastodon, Discord (fields instagram/instagramON … discord/discordON).
      • Matching icon images ship in images/: instagram.png, youtube.png, pinterest.png, threads.png, tiktok.png, bluesky.png, mastodon.png, discord.png, x.png.

      Security helpers

      • 13 new helper functions in index.php: phEsc(), phHexColor(), phCssDim(), phCssNum(), phCssFont(), phCssSelector(), phCssToken(), phCssUrl(), phJsStr(), phJsLit(), phRichText(), phFaviconSet(), phIcoBytes(). They are used at 204 call sites. Details under Security.

      Changed

      Joomla 5 platform

      • Built for Joomla 5.4.10 and VirtueMart 4.8.4 (previous demo stack: VirtueMart 4.6.8).
      • The template renders on Joomla 5’s bundled Bootstrap 5 (/media/vendor/bootstrap/, plus bootstrap.rtl.min.css for right-to-left sites) through css/bs2-bs5-bridge.css.
      • The print view and VirtueMart pop-up windows (component.php, used for “Ask a question”, print and similar) and the error page (error.php) now load the same Bootstrap 5 base and bridge as the main layout. Before, they still loaded the original Bootstrap 2 head and stylesheets that no longer exist.
      • Dialogs (login, social and VirtueMart pop-ups) use Bootstrap 5’s data-bs-toggle / data-bs-target / data-bs-dismiss attributes (data-bs-* 7 → 14).
      • templateDetails.xml version 18.08.2025 5.3.0/4.4.4 → 5.4.10; method="upgrade" kept, so an existing install updates in place.

      J3 → J5 API migration

      • All 218 Joomla 3 static calls removed (JFactory → Factory, JText → Text, JHtml → HTMLHelper, JRoute → Route, JUri → Uri, JError::raiseWarning() → throw new \Exception(), and the rest). These aliases exist only while Joomla’s Behaviour – Backward Compatibility plugin is enabled.
      • Template overrides converted (calls before → after):
        • html/mod_login/default.php 20 → 0, default_logout.php 6 → 0.
        • html/com_virtuemart/productdetails/default.php 16 → 0, plus default_addtocart.php 3, default_images.php 4, default_reviews.php 4, default_customfields.php 1, default_showcategory.php 1 → 0.
        • html/mod_virtuemart_product/single.php 15 → 0, default.php 7 → 0.
        • html/com_virtuemart/user/login.php 14 → 0, edit_address.php 6, bs3-edit_address.php 5, bs3-edit_vendor.php 4, edit.php 3, bs3-edit.php 3, edit_orderlist.php 3, mail_raw_regvendor.php 3, edit_vendor.php 2, bs3-edit_shopper.php 1, bs3-edit_address_userfields.php 1, mail_html_reguser.php 1, mail_raw_reguser.php 1 → 0.
        • html/com_virtuemart/virtuemart/default_products.php 9 → 0, default.php 1, default_categories.php 1 → 0.
        • html/com_virtuemart/category/default.php 8 → 0, categories.php 1 → 0.
        • html/com_virtuemart/cart/default_shopperform.php 6 → 0, default_pricelist.php 5, default_coupon.php 1 → 0.
        • html/com_virtuemart/askquestion/form.php 3, bs3-form.php 3, mail_html_question.php 2 → 0.
        • html/mod_articles_latest/default_items.php 6 → 0; html/mod_menu/default.php 2; html/mod_virtuemart_currencies/default.php 2; html/mod_breadcrumbs/default.php, html/mod_search/default.php, html/mod_virtuemart_cart/default.php 1 each → 0.
      • In all, 55 of the 81 PHP overrides under html/ were modified.

      Template Options screen

      • 105 field type changes in templateDetails.xml. The 40 legacy class="switch" checkboxes are gone; settings such as RSSON, H1TitleImgText, cam_autoAdvance, cam_hover and cam_navigation now use Joomla’s native on/off switchers (43 in all). The 70 colour settings (e.g. cam_loaderColor, cam_loaderBgColor) changed from text to colorpicker.
      • Fields 174 → 183, fieldsets 9 → 10. Tab names no longer end in “Settings”.
      • The Options screen’s icon font now uses Font Awesome 6.5.2 + v4 shims instead of Font Awesome 4.6.3 from the shut-down MaxCDN (maxcdn 1 → 0). The panel’s fa fa-* icons keep working through the shims.

      Fonts and icons

      • The Google Fonts WebFontConfig JavaScript loader is replaced by a direct font stylesheet link (WebFontConfig 1 → 0; webfont.js no longer loaded).
      • The front end loads Font Awesome 6.5.2 (all.min.css) with v4-shims.min.css, so the template’s existing fa fa-* markup keeps working.

      Menus, background and selects without old jQuery plug-ins

      • Drop-down menus open on hover without the Superfish/Supersubs plug-ins.
      • Background images are sized with CSS background-size: cover instead of Backstretch.
      • Select boxes are plain HTML selects instead of DropKick.
      • None of these scripts is loaded any more. jQuery itself still loads for the slideshow and carousels.

      Store behaviour

      • In the VirtueMart product modules, a product that has options such as size or colour now shows a Product details button that opens its page, where the option is chosen. html/mod_virtuemart_product/single.php routes the button through the new cs_vm_module_cart_button(). Products without options keep their Add to Cart button.
      • Article Previous and Next buttons sit at opposite ends of the article.

      Stylesheets

      • Every local stylesheet link carries a version marker, so style changes show straight after an update instead of waiting for visitors’ browser caches to expire.
      • css/print.css and css/template.css updated for Joomla 5.

      Fixed

      • Every “page not found” returned a server error when Joomla’s backward-compatibility plugin was off. error.php used JError::raiseWarning() and JText; it now uses the Joomla 4+ API.
      • The VirtueMart login form could stop with “behavior::formvalidation not found”. The Joomla 3 behavior.formvalidation call in the VirtueMart login override is now the Joomla 5 behavior.formvalidator (1 → 0). With thanks to Zoltán Szász, whose report found it.
      • The address form could fail on PHP 8. html/com_virtuemart/user/bs3-edit_address.php called count($this->userFields['functions']) on a value that can be empty; it now uses !empty(). Also thanks to Zoltán Szász.
      • The account page showed an error for store owners and vendors. HTMLHelper::_('Select.…') / JHtml::_('Select.…') with a capital S cannot be resolved by Joomla 5. Fixed in html/com_virtuemart/cart/default_shopperform.php, user/edit_vendor.php and user/bs3-edit_vendor.php.
      • A product module’s Add to Cart put every size of a product in the cart. The old module override built its form from customfieldsCart, which VirtueMart 4 never fills, so no option was sent. Fixed in html/mod_virtuemart_product/single.php (see Store behaviour).
      • The colour settings were plain text boxes on Joomla 5: the jscolor loader never ran, so a colour could only be changed by typing its hex code. All 70 now have the colour picker.
      • The Options screen requested files that no longer existed: the jscolor script and the MaxCDN Font Awesome stylesheet.
      • The template’s Details panel was unreadable in the dark admin theme (grey text with a white shadow). It now follows the selected admin theme.
      • Stylesheet requests for files that no longer exist on every page load were removed. These included the 3 @imports of media/jui/css/bootstrap*.css in css/print.css, which Joomla 4 removed.
      • Cart page: the update-quantity and remove buttons were blank boxes, because they used the Joomla 3 media/jui Glyphicons sprite. They now show icons in a readable colour.
      • Fixes from a maintenance pass across our templates:
        • The @font-face pointing at the removed media/jui/fonts/ IcoMoon font is disabled; it returned a 404 on every page.
        • Featured-article intro text is no longer clipped to its title (.blog-featured .blog-item).
        • The search button sits flush with its search box again (#search-position .btn).
        With thanks to Michael Mullan, whose Expression bug report led to this maintenance pass across our templates.

      Removed

      Legacy scripts and stylesheets no longer loaded

      • Scripts: superfish.js, supersubs.js, jquery.backstretch.min.js, jquery.dropkick-1.0.0.js, jquery.mobile.customized.min.js, modernizr.js, selectivizr-min.js, html5.js, webfont.js. The files remain in js/ but nothing loads them.
      • Stylesheets: all.css, bootstrap-extended.css, reset.css, style-error.css, and the Internet Explorer files ie.css, ie6.css, ie9-10.css with their conditional comments.

      MooTools and dead module chromes

      • All MooTools addEvent calls removed (4 → 0), with the files that carried them: html/modules.php (Joomla 5 has no modChrome_ code path), html/layouts/chromes/-toggleModule.php and -toggleModule2.php.

      Old colour picker and admin script

      • utils/js_colourchanger/ (jscolor.js, arrow.gif, cross.gif, hs.png, hv.png) and the colours_handlers field that loaded it.
      • utils/admin-js.js, a Joomla 3 admin script.

      Unused files

      • html/mod_k2_content/Slider/default.php and its index.html (an override for K2, which the template does not use).
      • html/mod_menu.zip, an archive left inside the overrides folder.

      Retired social services

      • Five social slots removed with their switches: Google+ (gplus), StumbleUpon, Digg, MySpace, Blogger.

      Security

      • Every template setting written into the page is escaped for where it appears, through the new helpers (204 call sites):
        • phEsc() for HTML text and attributes.
        • phHexColor() for colours.
        • phCssDim(), phCssNum(), phCssFont(), phCssToken(), phCssSelector() and phCssUrl() for values inside inline <style>.
        • phJsStr() and phJsLit() for values inside inline JavaScript.
      • Site-title fields (H1Title / H2Title) go through phRichText(): formatting markup is kept, but scripts, styles, iframes and on* event handlers are stripped.
      • Image alt text built with strip_tags() did not escape quotes; the 3 occurrences in index.php are now escaped.
      • The error page escapes the error message it prints.
      • Module, menu and tab titles are escaped in index.php and the overrides. htmlspecialchars/escape calls across the template rose from 47 to 86, including mod_login, mod_articles_latest, mod_menu, mod_breadcrumbs, mod_virtuemart_cart, the com_content blog, featured and archive views, and the slides and vmdefault module chromes.

      Quickstart Installer

      The Quickstart is a complete Joomla 5.4.10 site with VirtueMart 4.8.4 and Flexo installed as the active template, with the demo content.

      • Bundled extensions: Joomla 5.4.10, VirtueMart 4.8.4, MCP For J 2.8.3, Akeeba Backup 10.4.0, Weblinks 5.2.0.
      • Only the templates the site uses are included: the templates/ folder holds cassiopeia, flexo and system. VirtueMart’s demo templates vmbasic, horme_3 and vmbeez3 are gone; horme_3 and vmbeez3 carried error pages that returned a server error.
      • Joomla 5.4’s “What’s New” guided tour (tour 15) no longer starts by itself (autostart = 0). Before, it sent every administrator link to the dashboard on a fresh install.
      • Joomla’s Statistics plugin is set to never send data.
      • A clean starting state: the action log is empty, the post-install messages are trimmed to the five worth keeping, and the template overrides are marked as reviewed (no “changes found” warning).

      Package format

      • Standalone template: Flexo now installs as a Joomla package (pkg_flexo.xml) that installs and registers the flexo template extension. It declares method="upgrade", so an existing Flexo updates in place, and <blockChildUninstall>true</blockChildUninstall>, so the template is removed through the package rather than on its own.
      • Quickstart bundle: a complete Joomla 5.4.10 install with VirtueMart 4.8.4 and Flexo pre-loaded as the active template.
      Version numbering: from this release the first three digits of Flexo’s version match the Joomla release it is built for (5.4.10 = Joomla 5.4.10). A later fix on the same Joomla release adds a fourth digit (5.4.10.1). The previous download was versioned 18.08.2025 5.3.0/4.4.4.
    • Release Date: 2025-08-18, Version: 18.08.2025 5.3.0/4.4.4, Notes:
      • Upgraded - Now compatible Joomla 5
      • Upgraded - Now compatible Virtuemart 4.4.4
      • Fixed - Minor bugs
    • Release Date: 2024-11-29, Version: 29.11.2024 5.1.2/4.2.12, Notes:
      • Fixed - Minor bugs with cart
    • Release Date: 2024-08-16, Version: 16.08.2024 5.1.2/4.2.12, Notes:
      • Upgraded - Now compatible Joomla 5
      • Upgraded - Now compatible VirtueMart 4.2.12
      • Fixed - Minor bugs
    • Release Date: 2024-01-18, Version: 18.01.2024 4.3.4/4.2.0, Notes:
      • Fixed - Minor bugs
    • Release Date: 2023-12-18, Version: 07.12.2023 4.3.4/4.2.0, Notes:
      • Fixed - Minor bugs
    • Release Date: 2023-09-15, Version: 15.09.2023 4.3.0/4.0.13, Notes:
      • Fixed - Template is compatible wiith PHP 8.2
      • Fixed - Template updated to be compatible with Joomla 4.3.4
      • Fixed - Template updated to be compatible with Virtuemart 4.2.0
    • Release Date: 2023-06-30, Version: 26.06.2023 4.3.0/4.0.13, Notes:
      • Fixed - VirtueMart Products Module bug
      • Fixed - Double ReCaptcha on VirtueMart Registration page
      • Fixed - Template toggle button not displaying
    • Release Date: 2023-06-23, Version: 16.06.2023 4.3.0/4.0.13, Notes:
      • Fixed - Menu Params error for adding in image on menu
    • Release Date: 2023-05-20, Version: 20.05.2023 4.3.0/4.0.12, Notes:
      • Fixed - Template updated to be compatible with Joomla 4.3
    • Release Date: 2022-09-09, Version: 09.09.2022 3.10.11/4.0.6, Notes:
      • Fixed - Joomla 3.10.11
      • Fixed - Template updated for PHP 8.0