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-16, Version: 5.4.10, Notes:
      First Joomla 5 native release. Flat Store has been brought forward from the previous download (18.08.2025 5.3.0/4.4.4, built for VirtueMart 4.4.4) to Joomla 5.4.10 + VirtueMart 4.8.4 + PHP 8 + Bootstrap 5. Flat Store 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; the template’s own copy of Bootstrap 2 is gone. jQuery still loads for the camera slideshow, while the old jQuery menu, background and select plug-ins and the Internet Explorer polyfills are no longer loaded. This release adds a full phone layout, a real colour picker for all 90 colour settings, Joomla’s own on/off switches, a favicon tool, current social networks and its own 404 page. Joomla 3 class calls have been replaced throughout, and every template setting written into the page is now escaped. Compared with the previous download: 295 → 289 files, 10 added, 16 removed, 61 modified. The template version is now 5.4.10, matching the Joomla version it ships with.

      Added

      Bootstrap 5 compatibility layer

      • New css/bs2-bs5-bridge.css: maps Flat Store’s Bootstrap 2 grid (.row-fluid, .spanN, offsets, the hidden-phone / visible-phone / -tablet / -desktop utilities, tab panes, button and form classes, the dialog shell) onto Joomla 5’s bundled Bootstrap 5. Its grid rules carry zero specificity, so Flat Store’s own template.css still overrides them as it did Bootstrap 2 (for example the five-across product rows).
      • It is loaded as the last stylesheet in the page head (one <link> before </head>, with a file-time version marker), so it sits above the template’s own CSS in the cascade.
      • New js/cs-jq-compat.js: restores four jQuery 1.x calls that Joomla 5’s jQuery 3 removed ($.browser, .live(), .offset() on the window and .load(fn) as a load-event shortcut). The bundled camera slideshow reads $.browser and binds its controls with .live().

      Phone layout

      • New js/cs-mobile-generic.js: on phones (up to 767 px) Flat Store gets a compact header, logo with the slogan beside it, and 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, which shows a cart glyph in the same box as its neighbours.
      • The VirtueMart category menu opens its subcategories with the arrow on phones.
      • The cart icon shows how many items are in the cart, on phones and on the desktop bag icon, and updates when VirtueMart refreshes the cart. On phones the cart opens as a panel centred on the screen, keeping Flat Store’s dark panel and readable text.
      • The cart panel, the login form and open dialogs close when you tap outside them.
      • The search box, and the cart and login fields, use a 16 px font and a 44 px height, so iPhones do not zoom the page when you tap into them.
      • On account pages (login, registration, password reset, VirtueMart account), phones show the page content first, with only the breadcrumbs and the store menu above it.
      • On the product page, the quantity and Add to Cart bar takes its own row on phones, clear of the “Ask a question” link below it.
      • Joomla’s page navigation wraps to fit a phone, and the VirtueMart cart page fits a phone screen.
      • Flat Store’s own 2 px body padding no longer frames the phone page: the header, slideshow and footer run edge to edge, while text bands keep a 20 px side margin (cs-no-bs2-gutter body class plus a Flat Store 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 stays 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 a separate bare page. They fit a phone screen, show the message first on phones and ask search engines not to index them (noindex, follow). Server errors (5xx) still use Joomla’s minimal system page.

      Colour picker

      • New custom field fields/colorpicker.php with the bundled Coloris picker (js/coloris.min.js, css/coloris.min.css). All 90 colour settings are now type="colorpicker", with a live swatch and a picker that ships with the template, so nothing is fetched from an outside site.
      • New fields/adminui.php: loads the Options screen’s support code, declares the jQuery framework it needs, 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_flat.ini (70 → 80), e.g. TPL_FLAT_FAVICON_TAB, TPL_FLAT_FAVICON_LABEL, TPL_FLAT_FAVICONTOOL_CREATE.

      Modern social network support

      • Eight new social services, each with a URL field and an on/off switch: Instagram, YouTube, Pinterest, Threads, TikTok, Bluesky, Mastodon, Discord (fields instagram/instagramON … discord/discordON). With Facebook, LinkedIn, Vimeo, RSS and X, the footer carries 13 networks.
      • The Twitter slot is now X (formerly Twitter), with the X logo.
      • The social icons are Font Awesome 6 brand glyphs (fab fa-*) in place of the old image sprite, keeping the flat one-colour look. Each link has a screen-reader label.

      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 238 call sites. Details under Security.

      Changed

      Joomla 5 platform

      • Built for Joomla 5.4.10 and VirtueMart 4.8.4 (the previous download was built for VirtueMart 4.4.4).
      • 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, in place of its own Bootstrap 2 copy (css/bootstrap/bootstrap.min.css, bootstrap-responsive.min.css, bootstrap-extended.css).
      • The print view and VirtueMart pop-up windows (component.php, used for “Ask a question”, print and similar) now load the same Bootstrap 5 base and compatibility stylesheet as the main layout. Before, they loaded the template’s stylesheets with no Bootstrap underneath, plus the Internet Explorer 9–10 sheet.
      • error.php no longer builds its own XHTML page from reset.css, text.css, typography.css and presets/style-error.css; it renders inside index.php (see Own error pages).
      • 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, creation date 09/09/2022 → 2026-10-16; the version shown in the template description and the @version docblock in index.php match. method="upgrade" is kept, so an existing install updates in place.

      J3 → J5 API migration

      • 188 Joomla 3 static class calls replaced with their namespaced Joomla 4+ forms (JFactory → Factory, JText → Text, JHtml/JHTML → HTMLHelper, JRoute → Route, JURI → Uri, JModuleHelper, JPluginHelper, JComponentHelper and the rest). JError::raiseWarning() in error.php became throw new \Exception(). These aliases exist only while Joomla’s Behaviour – Backward Compatibility plugin is enabled.
      • Template overrides converted (calls per file):
        • html/mod_login/default.php 20, default_logout.php 6.
        • html/com_virtuemart/productdetails/default.php 16, plus default_images.php 4, default_reviews.php 4, default_addtocart.php 3, default_customfields.php 1, default_showcategory.php 1.
        • html/com_virtuemart/user/login.php 14, 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.
        • html/mod_virtuemart_product/single.php 8, default.php 6.
        • html/com_virtuemart/virtuemart/default_products.php 6, default.php 1, default_categories.php 1.
        • html/com_virtuemart/category/default.php 6, categories.php 1.
        • html/com_virtuemart/cart/default_shopperform.php 6, default_pricelist.php 5, default_coupon.php 1.
        • html/com_virtuemart/askquestion/form.php 3, bs3-form.php 3, mail_html_question.php 2.
        • html/mod_articles_latest/default_items.php 6; 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.
      • In all, 54 of the 77 PHP overrides under html/ were modified.

      Template Options screen

      • 124 field type changes in templateDetails.xml:
        • 90 colour settings: type="color" → type="colorpicker" (for example sitenamecolor, slogancolor, bodybackground, bodytextcolor, Hederbg).
        • 34 on/off settings: legacy class="switch" checkbox → Joomla’s native on/off switcher (for example RSSON, H1TitleImgText, H2TitleImgText). With the retired social switches removed and eight new ones added, the template has 42 switchers and no legacy checkboxes (39 before).
      • Fields 194 → 204, tabs 9 → 10. Tab names no longer end in “Settings”: Built-in Slideshow, Product Slider, Product Images, Theme, and Header & Footer Custom Code (was “Template Header And Footer Custom Code”).
      • 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 front end loads Font Awesome 6.5.2 (all.min.css) with v4-shims.min.css, in place of Font Awesome 5.0.1 from use.fontawesome.com. The template’s existing fa fa-* markup keeps working.
      • The Google Fonts WebFontConfig JavaScript loader (webfont.js from ajax.googleapis.com) is replaced by a direct Open Sans stylesheet link with display=swap (WebFontConfig 1 → 0).

      Menus, background and selects without old jQuery plug-ins

      • Drop-down menus open on hover through CSS (nav.css and the compatibility stylesheet) instead of the Superfish/Supersubs plug-ins.
      • The body background image set in the options is applied by a few lines of plain JavaScript and sized by the browser (background-size: cover, fixed, centred) instead of Backstretch.
      • The currency selector is a plain HTML select, styled like the old label, instead of DropKick.
      • jQuery itself still loads, for the camera slideshow (jquery.easing.1.3.js, camera.min.js).

      Articles

      • Article Previous and Next buttons sit at opposite ends of the article; before, both were bunched at the left.

      Stylesheets

      • Every local stylesheet link carries a version marker (?v=: 12 links in index.php, 9 in component.php), so style changes show straight after an update instead of waiting for visitors’ browser caches to expire.
      • css/template.css (28,952 → 29,585 bytes): four rules also match the Bootstrap 5 .row / .col-md-2 markup, the dead IcoMoon @font-face is disabled (see Fixed), and a sizing rule was added for the social glyphs.

      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 html/com_virtuemart/user/login.php is now the Joomla 5 behavior.formvalidator. With thanks to Zoltán Szász, whose report led to this fix across our templates.
      • 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.
      • Store owners and vendors got a server error on the front-end account page and the cart’s change-shopper form. JHtml::_('Select.…') with a capital S cannot be resolved by Joomla 5 (“HTMLHelper Select not found”). Fixed in html/com_virtuemart/user/bs3-edit_vendor.php and html/com_virtuemart/cart/default_shopperform.php.
      • The colour settings were plain text boxes on Joomla 5, so a colour could only be changed by typing its hex code. All 90 now have the colour picker.
      • The Options screen loaded its icon font from MaxCDN, which has shut down, so the panel’s icons failed to load.
      • 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: the 3 @imports of media/jui/css/bootstrap*.css in css/print.css, which Joomla 4 removed, are gone.
      • Cart page: the update-quantity and remove buttons were blank boxes, because they used the Joomla 3 media/jui Glyphicons sprite. They now show Font Awesome 6 icons (arrows for update, a bin for remove).
      • Product page: the print and e-mail icons (<a class="modal">) were caught by the dialog positioning rule and sat in the top-left corner of the page. They now sit in the product’s icon row.
      • Fixes from a maintenance pass across our templates:
        • The @font-face in css/template.css pointing at the removed media/jui/fonts/ IcoMoon font is disabled; it returned four 404s on every page.
        • Joomla 4+ pagination arrows (.icon-angle-left / -right / -double-left / -double-right) show arrows again instead of empty squares.
        • 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).
        • The MooTools-era scripts are gone (see Removed), and the version shown in the Options description matches the release.
        With thanks to Michael Mullan, whose Expression bug report led to this maintenance pass across our templates.

      Removed

      Bootstrap 2 copy

      • css/bootstrap/ (7 files): bootstrap.css, bootstrap.min.css, bootstrap-responsive.css, bootstrap-responsive.min.css, bootstrap-extended.css, bootstrap-rtl.css, bootstrap-tooltip-extended.css.

      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, the remote html5.js (html5shiv) and webfont.js. The local files remain in js/ (30 → 34 files) but nothing loads them.
      • Stylesheets: Font Awesome 5’s all.css, bootstrap-extended.css, bootstrap-responsive.min.css, reset.css and style-error.css (the old error page), 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).
      • utils/admin-js.js, the Joomla 3 jQuery script that drew the legacy on/off switches, and the <script> in the template description that loaded it.

      Retired social services

      • Five social slots removed with their URL fields and 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 (238 call sites):
        • phEsc() for HTML text and attributes.
        • phHexColor() for colours.
        • phCssDim(), phCssNum(), phCssFont(), phCssToken(), phCssSelector() and phCssUrl() for values inside inline <style>. The colour-theme preset name that builds a stylesheet path is escaped in both index.php and component.php.
        • phJsStr() and phJsLit() for values inside inline JavaScript, such as the background image URL.
      • 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 now go through phEsc(strip_tags(…)).
      • Social links were printed unescaped; all 13 now go through phEsc() and open with rel="noopener".
      • 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 82, including mod_login, mod_articles_latest, mod_menu, mod_breadcrumbs (module class suffix), mod_virtuemart_cart, the com_content blog, featured and archive views, the VirtueMart address-field overrides, 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 Flat Store 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, flat 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.
      • VirtueMart 3’s old Klarna and Klarna Checkout payment plugins, which VirtueMart 4 no longer ships and which were never enabled, are no longer included.
      • Joomla 5.4’s “What’s New” guided tour (tour 15) no longer starts by itself (autostart = 0), so it does not send 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: Flat Store now installs as a Joomla package (pkg_flat-5.4.10.zip, manifest pkg_flat.xml) that installs and registers the flat template extension. It declares method="upgrade", so an existing Flat Store updates in place, and <blockChildUninstall>true</blockChildUninstall>, so the template is removed through the package rather than on its own.
      • Quickstart bundle: flat-quickstart-J5.4.10.zip, a complete Joomla 5.4.10 install with VirtueMart 4.8.4 and Flat Store pre-loaded as the active template, installed through Joomla’s own installer. The previous quickstart was an Akeeba backup archive (.jpa) restored with Kickstart.
      Version numbering: from this release the first three digits of Flat Store’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; it ran on Joomla 5 but was still built on Bootstrap 2 and Joomla 3 class calls.
    • 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-15, Version: 14.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-19, Version: 07.12.2023 4.3.4/4.2.0, Notes:
      • Updated - Compatible with PHP 8.2
      • Updated - Compatible with Joomla 4.3.4
      • Updated - Compatible with VirtueMart 4.2.0
      • Fixed - Minor bugs
    • 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