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-31, Version: 5.4.10.2, Notes:

      Checkout from the cart panel. The open cart panel offered only a Show Cart link. It now ends with a Check Out Now button, shown once the cart has products and kept in step when products are added without a page reload.

      Added-to-cart pop-up. Continue Shopping and Show Cart showed as bare text in a box sized to them. They are now proper buttons, and on a small phone the pop-up fits the screen.

      Ask a question. The question pop-up opened collapsed to a narrow strip. It now opens at full size, and its form no longer breaks its labels before the colon; on a phone the Send button and the character counter no longer overlap.

      Print view and shop pop-ups in the template's colours. The print view and VirtueMart's pop-up windows loaded Bootstrap after the template's own stylesheet, so their links and buttons came out in Bootstrap blue. They now use the template's colours.

      Phone header. Opening a phone panel (search, account, cart) no longer dims the logo and menu buttons at the top of the page. The header no longer turns see-through over the grey overlay.

      Cart count badge. The number in the red cart badge sat 4px above the middle of its circle on desktop; it is now centred.

      Defaults for a fresh install. The site name / logo now links to the home page and the slideshow is switched on with autoplay on desktop and phones (logoLinked, cam_turnOn, cam_autoAdvance, cam_mobileAutoAdvance default to on). Existing sites keep their saved settings.

      Quickstart. Guests can now use Ask a question without logging in first, and the demo's Contact Us and Special Offers menu items, which pointed nowhere, now open the contact page and the shop.

      Removed. 19 JavaScript and CSS files nothing loads (281 KB), among them jQuery 1.8.1, Superfish, Modernizr and old Internet Explorer stylesheets; template code that read three settings the template never offered.

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

      Checkout button in the cart panel. Opening the cart now ends with a full-width Checkout button under the total, on desktop and phones; it opens the cart page, where checkout happens. Before, the panel’s only action was a “Show Cart” link above the item list.

    • Release Date: 2026-10-23, Version: 5.4.10, Notes:
      First Joomla 5 native release. XStore has been brought forward from its previous download (version string 07.08.2025 5.3.0/4.4.4) to run natively on Joomla 5.4.10, VirtueMart 4.8.4 and PHP 8. The template’s own markup keeps its Bootstrap 2 class names — .spanN, .row-fluid and the rest — and renders on Joomla’s bundled Bootstrap 5 through a compatibility stylesheet shipped with the template, so layouts and overrides you may have customised keep working. 263 Joomla 3 static class calls have gone to zero, the bundled Bootstrap 2 stylesheets are no longer shipped, the template options have real colour pickers and Joomla 5 switches, and the phone layout has been rebuilt. jQuery still loads for the camera slideshow, the Slick carousels, the styled drop-downs and the cookie-law pop-up; the old jQuery menu, background, parallax and polyfill plug-ins are no longer loaded. Compared with the previous download: 255 → 250 files, 11 added, 16 removed, 63 modified. The template version is now 5.4.10, matching the Joomla release it ships with.

      Added

      Bootstrap 5 rendering through a compatibility stylesheet

      • css/bs2-bs5-bridge.css — a new stylesheet that translates XStore’s Bootstrap 2 grid, responsive utilities (hidden-phone, visible-phone and the rest), tabs, forms, buttons, navigation, pagination and dialogs onto Joomla’s Bootstrap 5. It is loaded last in the page head, with a file-time version marker, so it sits above the template’s own CSS in the cascade.
      • index.php now loads Joomla’s /media/vendor/bootstrap/css/bootstrap.min.css (and bootstrap.rtl.min.css on right-to-left sites) in place of the template’s own Bootstrap 2 copies.
      • The print view and every VirtueMart pop-up (component.php) and the error page (error.php) load the same Bootstrap 5 foundation and compatibility stylesheet as the main layout.
      • The login dialog opens as a Bootstrap 5 dialog (data-bs-toggle="modal"); Bootstrap 5 data-bs-* attributes go from 0 to 9.

      Rebuilt phone layout

      • js/cs-mobile-generic.js — a vanilla-JavaScript phone layer. The menu button opens the main menu (Home, Shop, Blog, Features, Contact…) as a slide-out drawer, and a second menu button opens the shop categories.
      • The shop-category drawer is fed by a new hidden module position, cs-secondary, declared in templateDetails.xml, so you choose which menu the second button shows.
      • A phone toolbar of 44×44 buttons for the account, search and cart controls. The cart button carries an item-count badge, and tapping outside closes the cart panel and the login dialog.
      • The phone header sits in the page flow: no blank band above the page, no duplicate submit button in the search panel, and a menu button that always contrasts with its bar. The search box uses 16 px text, so iPhones no longer zoom the page in when it is tapped.
      • One 12 px side inset on phones. The logo, breadcrumbs, page content, images and footer now line up 12 px from the screen edge; before, a template wrapper’s padding stacked on an inner container and pushed them 20–40 px in. Desktop is unchanged.

      Show / hide on password fields

      • js/cs-password-eyeball.js — login, registration and account password fields gain an eye control that reveals what has been typed. It sits inside the field row, and the login page’s username and password fields are the same width and height.

      Error pages inside the template

      • error.php rewritten: “page not found” (404) and “access denied” (403) pages now display inside XStore, with its header, menus and footer, and the message comes first on phones. Server errors (5xx) use Joomla’s minimal system page, because the database or a module may be what failed. Before, the error page was a bare stand-alone page with its own stylesheets.

      Favicon tool

      • A new Favicon tab in the template options (fieldset faviconsettings, fields favicon and favicontool, field class fields/favicontool.php). Pick one image and the template creates and outputs the icon set (phFaviconSet(), phIcoBytes() in index.php). With thanks to Gianluca, whose favicon question inspired this tool.
      • 10 new language strings (TPL_XSTORE_FAVICON_*, TPL_XSTORE_FAVICONTOOL_*); the language file goes from 74 to 84 strings.

      Modern social network support

      • Five new social services, each with its own URL field and show/hide switch: Threads, TikTok, Bluesky, Mastodon and Discord (threads/threadsON, tiktok/tiktokON, bluesky/blueskyON, mastodon/mastodonON, discord/discordON).

      Template options (administrator)

      • fields/colorpicker.php, css/coloris.min.css and js/coloris.min.js — the open-source Coloris colour picker ships inside the template, so nothing is fetched from another site.
      • fields/adminui.php — loads the Options-screen support code: the jQuery the older option scripts rely on, and a dark-theme style for the template’s Details panel.

      Supporting scripts

      • js/cs-parallax.js — drives the parallax backgrounds (slideshow, breadcrumb, tabs, testimonials, footer and the other parallax bands) in place of jquery.stellar, which does not work with the jQuery 3 that Joomla 5 ships.
      • js/cs-jq-compat.js — a small shim covering jQuery conventions that the remaining jQuery plug-ins and third-party extensions still expect.

      Changed

      Joomla 3 → Joomla 5 API migration

      • 263 Joomla 3 static class calls reduced to zero — JFactory, JText, JHtml, JRoute, JUri, JError, JDispatcher and the rest, each replaced with its namespaced Joomla\CMS\* equivalent. These aliases exist only while the Behaviour – Backward Compatibility plugin is enabled.
      • Heaviest files: index.php (38), html/mod_login/default.php (20), html/com_virtuemart/productdetails/default.php (16), html/com_virtuemart/user/login.php (14), html/mod_virtuemart_product/single.php and slick-slider.php (13 each), html/mod_virtuemart_product/default.php (11).
      • 56 of the 68 PHP overrides changed: VirtueMart user (14), productdetails (6), askquestion, cart, category, sublayouts and virtuemart (3 each), html/layouts/chromes (7), mod_menu (4), mod_virtuemart_product (3), and mod_login, mod_search, mod_custom, mod_virtuemart_cart, _category, _currencies and _manufacturer.

      Template options (administrator)

      • 97 field type changes in templateDetails.xml:
        • 20 colour settings: type="color" → type="colorpicker". On Joomla 5 each rendered as an empty text box that needed a hex code typed in; each now opens a real picker with a live swatch. Existing values carry over.
        • 77 on/off settings: legacy checkbox switches → Joomla 5 radio switchers (for example OverrideDefaultSettings, RSSON, AdditionalGFontON, H1TitleImgText, cam_autoAdvance). With the five new social switches the template has 82 switchers and no legacy checkboxes.
      • Template options: 339 → 337 fields, 15 → 16 tabs. Tab names lose their redundant “Settings” suffix (“Theme”, “Drop Down Menus”, “Built-in Slideshow”, “Color” and so on).
      • The Options screen’s Font Awesome stylesheet came from MaxCDN, which has shut down. It is now Font Awesome 6.5.2 with v4 shims, so the panel’s icons display again.
      • The template’s Details panel follows Joomla’s light or dark admin theme; it used to be grey text with a white shadow, unreadable on the dark theme.

      Icons and fonts

      • Front end: Font Awesome 4.7.0 from MaxCDN (font-awesome.min.css) → Font Awesome 6.5.2 (all.min.css + v4-shims.min.css). Older fa fa-* class names keep working; they go from 22 to 11 in the template, including the overrides com_virtuemart/category/default.php, category/productsviewarray.php and mod_virtuemart_cart/default.php. Social icons use Font Awesome 6 brand glyphs.
      • Google Fonts load through a stylesheet link. Both WebFontConfig JavaScript loaders, in index.php and component.php, are gone.

      Menus, backgrounds and scripts

      • The drop-down menus open through the template’s CSS hover rules in place of the superfish.js + supersubs.js jQuery plug-ins.
      • A body background image set in the template options is sized with CSS (background-size: cover) in place of the jQuery Backstretch plug-in, which index.php loaded twice.
      • The jQuery.browser compatibility block and the Internet Explorer conditional loaders are gone.
      • The tablet off-canvas menu opens and closes with CSS transitions and no longer needs jQuery UI.
      • Template-side jQuery call sites: 199 → 173. The rest serve the camera slideshow (camera.js), the Slick carousels, the jquery.selectric.js drop-downs, the cookie-law pop-up and smooth scrolling.
      • Every local stylesheet link carries a version marker (?v=), so style changes appear straight after an update instead of waiting for visitors to clear a cached copy.
      • css/template.css: 219,932 → 225,810 bytes.

      Version

      • templateDetails.xml <version> 07.08.2025 5.3.0/4.4.4 → 5.4.10, with <creationDate> 2026-10-23. The Template Version: span in the manifest description and the index.php @version docblock carry the same value, so the version shown in the administrator matches the download page.
      • method="upgrade" is kept, so existing sites update in place. The manifest’s copyright line is a proper notice and the author URL uses https.

      Fixed

      Pages that returned a server error

      • Every “page not found” could be served as a 500. error.php used removed Joomla 3 class aliases (JError::raiseWarning, JText). With the Backward Compatibility plugin off, Joomla could not render any error page. It now raises a proper \Exception with the status code.
      • Login form validation: the VirtueMart login override called behavior.formvalidation, which Joomla 5 removed (“behavior::formvalidation not found”, a 500). It now uses behavior.formvalidator, and its plugin hook no longer uses JDispatcher, which Joomla 5 does not have. With thanks to Zoltán Szász, whose follow-up report led to this fix across our templates.
      • Guest checkout address form on PHP 8: html/com_virtuemart/user/bs3-edit_address.php called count($this->userFields['functions']) on a value that is empty for guests, a fatal error on PHP 8. It now uses !empty(). With thanks to Zoltán Szász, whose report found it.
      • Slick product slider: html/mod_virtuemart_product/slick-slider.php called JHTML::_('behavior.modal'), a behaviour Joomla 4 removed. The call is gone.
      • Store owner’s account page: html/com_virtuemart/user/bs3-edit_vendor.php called JHtml::_('Select.…') with a capital S, which Joomla 5’s HTMLHelper cannot resolve. All four calls now use select.genericlist.

      Browser errors and dead requests

      • Cart and “ask a question” pop-ups logged JavaScript errors. component.php loaded no jQuery, so VirtueMart’s inline scripts in those pop-ups failed with “jQuery is not defined”. It now loads Joomla’s jQuery.
      • The template’s cut-down jQuery UI shadowed VirtueMart’s full copy, which VirtueMart picked up in its place. The template’s copy is no longer shipped.
      • Stylesheet requests for files that were never in the template. The error page requested reset.css, text.css and typography.css, and the print view requested template_rtl.css on right-to-left sites. Each returned the site’s “page not found” response. All are gone.
      • The template Options screen no longer loads the dead jscolor script from the template description, which 404’d every time the screen opened.

      Home page

      • The home page product tabs showed “0 1 2” on phones instead of their titles. They now read the tab titles (HOT OFFER, NEW ITEMS, GREAT SALE in the demo).

      Maintenance pass

      With thanks to Michael Mullan, whose Expression bug report led to this maintenance pass across our templates.
      • IcoMoon icon font 404s. An @font-face rule in css/template.css pointed at media/jui/fonts/, a folder Joomla 4 removed: four failed requests on every page load. The rule is disabled and the search icon is self-contained.
      • Pagination arrows rendered as empty squares. Joomla 4 and later emit .icon-angle-left, -right, -double-left and -double-right, which the legacy icon stylesheet did not define. They now map to Font Awesome glyphs.
      • Featured articles clipped to their title. Tall intro articles in a single-column featured view were cut off; .blog-featured .blog-item now uses display:block; overflow:visible; height:auto.
      • The search button detached from its input. A global button margin separated them; the margin is cleared inside search and finder modules.

      Removed

      Legacy stylesheets no longer shipped

      • The bundled Bootstrap 2 stylesheet stack: css/bootstrap/bootstrap.css, bootstrap.min.css, bootstrap-responsive.css, bootstrap-responsive.min.css, bootstrap-extended.css, bootstrap-rtl.css and bootstrap-tooltip-extended.css. Joomla’s own Bootstrap 5 is used instead.
      • css/k2.css and css/k2.print.css — styling for a third-party extension the template no longer carries.
      • No longer loaded: the Internet Explorer sheets ie.css and ie6.css, and presets/style-error.css.

      Legacy scripts

      • No longer shipped: js/jquery-ui.min.js (the cut-down jQuery UI described under Fixed), js/jquery.stellar.min.js (replaced by js/cs-parallax.js) and utils/admin-js.js (a Joomla 3-era admin script).
      • No longer loaded: superfish.js, supersubs.js, jquery.backstretch.min.js, jquery.mobile.customized.min.js, modernizr.js, selectivizr-min.js and the html5.js shim. The files that remain in js/ (30 → 33 files) are not referenced.

      Files removed

      • html/modules.php — seven Joomla 3 modChrome_ functions, which Joomla 5 never calls. The module chromes Joomla 5 uses are in html/layouts/chromes/.
      • The K2 module override html/mod_k2_content/, including its Slider layout (3 files).
      • In total the shipped tree moves from 255 files to 250: 11 added, 16 removed, 63 modified.

      Retired settings

      • Four social slots removed with their switches: Google+ (gplus), StumbleUpon, Digg and Blogger.
      • The five Superfish animation settings that went with the old menu plug-in: dropopacity, dropheight, dropwidth, dropspeed and dropdownhandler1maxwidth.
      • Two settings the template never read (testimonialswidth, HRboxspeed), and the colours_handlers spacer that tried to start the old jscolor picker.

      Download

      • An earlier download of this template contained a server error log. It served no purpose in a fresh install and exposed file paths from our own build server. It was taken out of that download, and the new packages do not contain it.

      Security

      • 13 output helpers added to index.php, used 310 times across the template, so every template setting written into the page is escaped for where it lands:
        • phEsc(): HTML text and attributes.
        • phRichText(): the site-name fields (H1Title, H2Title), which may hold simple markup. Joomla’s input filter keeps the markup but strips script, style and iframe elements and on* event handlers.
        • phHexColor(), phCssDim(), phCssNum(), phCssFont(), phCssSelector(), phCssToken(), phCssUrl(): colours, sizes, fonts and image URLs written into the page’s CSS.
        • phJsStr(), phJsLit(): values written into inline JavaScript.
        • phFaviconSet(), phIcoBytes(): favicon output.
      • htmlspecialchars / escape calls in the template: 6 → 45. Module and tab titles are escaped in all seven module chromes (megamenu, parallax, slides, testimonial, vmdefault, vmdefaultlogin, vmtab), and new escaping covers mod_custom, mod_login, four mod_menu layouts, mod_virtuemart_cart and the VirtueMart address-field overrides.
      • Server paths no longer disclosed on error pages. A caught exception could reach the error page as a string carrying the site’s absolute filesystem path and a stack trace; outside debug mode the error template now shows Joomla’s generic message, keeping the status code. The message it prints is escaped.
      • Direct-access _JEXEC guards: 56 → 58 files.

      Quickstart

      • Bundles Joomla 5.4.10 and VirtueMart 4.8.4, with XStore pre-configured as the active template (styles XSTORE – Joomla Shop Template and its Parallax variant). Also bundled: Akeeba Backup 10.4.0, Weblinks 5.2.0 and MCP For J 2.9.3.
      • The site templates/ folder holds only cassiopeia, xstore and system. Three unrelated templates from the original sample data — horme_3, vmbeez3 and vmbasic — are gone. None was the default or assigned to a menu item, and the first two carried error pages built on the removed Joomla 3 class aliases, so activating either would have produced a 500 in place of an error page.
      • A Shop Menu module in the new cs-secondary position feeds the phone’s second menu button with the shop categories.
      • The empty “What’s on our blog” custom module, which showed only its heading above the footer, is unpublished.
      • A style setting that named a testimonials background image not in the package (background-1.jpg / background-2.jpg) is cleared, removing a failed request on every page load. The page looks the same.
      • Joomla 5.4’s “What’s New” guided tour (tour 15) no longer starts by itself (autostart = 0); it used to send every administrator link to the dashboard on the first visits. It remains available from the administrator.
      • Joomla’s Statistics plugin is set to never send data.
      • A clean starting state: the post-install messages are trimmed to the five worth keeping, the redirect list is empty, and the template overrides are marked as reviewed (no “changes found” warning).

      Package

      • Standalone template: now a Joomla package (pkg_xstore.xml) that installs the XStore template and registers it in the package manager. It declares method="upgrade", so an existing XStore updates in place with its settings preserved, 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 site with VirtueMart 4.8.4 and XStore pre-loaded, in place of the previous Akeeba .jpa archive with Kickstart. The Joomla 4 download remains available but is no longer recommended for new projects.
      Earlier history: the previous download was version 07.08.2025 5.3.0/4.4.4, the vendor’s Joomla 5-compatible build, still on Bootstrap 2 stylesheets and Joomla 3 class calls. This 5.4.10 release is the first one rebuilt natively for Joomla 5.
    • Release Date: 2025-07-10, Version: 10.07.2025 5.3.0/4.4.4, Notes:
      • Upgraded - Now compatible Joomla 5.3.0
      • Upgraded - Now compatible VirtueMart 4.4.4
      • Fixed - Minor bugs with cart
    • 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-08, Version: 08.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: 2023-11-17, Version: 31.10.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 issue
      • 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-08-24, Version: 23.08.2022 3.10.11/4.0.6, Notes:
      • Fixed - Joomla 3.10.11
      • Fixed - Template updated for PHP 8.0