Applies to Joomla 3.10 + VirtueMart 3.x → Joomla 5.4 + VirtueMart 4.8 Updated 16 Oct 2026

This is step 1 of the route to Joomla 6: get an old shop onto Joomla 5.4 and VirtueMart 4.8, which are supported and patched. Do it on a staging copy; the live shop keeps selling until you switch.

Before you start

  • A staging server with PHP 8.1–8.3 and MySQL 8.0.13+ or MariaDB 10.4+ (Joomla 5's requirements; PHP 8.3 also gets you ready for Joomla 6).
  • A full backup of files and database, restored on staging.
  • The VirtueMart 4.8 package from virtuemart.net. Some VirtueMart releases are offered to members first; check the download page.
  • A list of your extensions, payment and shipping plugins, and overrides – see checking plugins.

Step 1: Make staging safe

  • Put payment plugins in sandbox or test mode.
  • Stop outgoing email (or catch it), so customers don't get order emails from staging.
  • Block search engines from staging.

Step 2: Count your data

Write down how many products, categories, manufacturers, orders and shoppers the shop has. In phpMyAdmin or MySQL, with your table prefix:

SELECT COUNT(*) FROM jos_virtuemart_products;
SELECT COUNT(*) FROM jos_virtuemart_categories;
SELECT COUNT(*) FROM jos_virtuemart_orders;
SELECT COUNT(*) FROM jos_virtuemart_vmusers;

You will run the same queries after each step. Matching numbers are the quickest proof that nothing went missing.

Step 3: Update VirtueMart while still on Joomla 3.10

  1. Make sure Joomla is on 3.10 (the last Joomla 3).
  2. Install the VirtueMart 4 package over VirtueMart 3 through the Joomla extension installer – component first, then the AIO package, as the VirtueMart download explains.
  3. Open VirtueMart in the admin. If it offers database updates or tools, run them.
  4. Compare the counts.
  5. Open the shop front end: categories, a product, add to cart.

VirtueMart 4 supports Joomla 3.10, 4 and 5, which is what makes this order work: VirtueMart first, Joomla second.

Step 4: Upgrade Joomla 3 → 4 → 5.4

  1. Run Joomla's pre-update check for Joomla 4 and deal with every extension it flags – update, replace or remove.
  2. Switch to a Joomla 4-compatible template (or its new version) before the upgrade, if your template has no Joomla 4 version.
  3. Upgrade to Joomla 4, then straight on to the latest 5.4.
  4. Update VirtueMart to the latest 4.8.x again if a newer one is out.
  5. Compare the counts.

Step 5: Fix the shop front end

  • Cart and checkout overrides need the security token – otherwise "Invalid token" when updating the cart. The fix.
  • Compare every other override with the new core layout. How.
  • Update or replace payment and shipping plugins.

Step 6: Test orders

Place a test order with every payment method and every shipping method, as a guest and as a registered shopper. Check the order in the admin, the emails, the stock, and the status changes after payment. The full list: test-order checklist.

Step 7: Switch live

  • Pick a quiet hour. Put the live shop in maintenance mode.
  • New orders and customers since you built staging must come across – either repeat the upgrade on live, or copy the new rows into the upgraded database. Don't lose a single order.
  • Switch, place one real order with a small amount, refund it.
  • Check redirects for any URLs that changed. Keep your URLs.

Common errors

  • White page after the Joomla upgrade – an extension without a Joomla 4/5 version. Disable it from the database or the extension manager and replace it.
  • Product images missing – check the media paths in VirtueMart configuration; VirtueMart 4.4.6 added a tool that repairs images that lost their image property.
  • Prices or taxes look wrong – check the calculation rules and shopper groups on a few products against the old shop.

For developers: compare everything, not four tables

The four counts above catch the big losses. To catch anything, count every VirtueMart table before and after each step and diff the two files:

# terminal – row counts of all VirtueMart tables (adjust database and prefix)
mysql -N -e "SELECT CONCAT('SELECT ''', table_name, ''', COUNT(*) FROM ', table_name, ' UNION ALL')
             FROM information_schema.tables
             WHERE table_schema = 'shop_db' AND table_name LIKE 'jos\_virtuemart\_%';" \
  | sed '$ s/ UNION ALL$/;/' | mysql -N shop_db > counts-step3.txt
diff counts-step2.txt counts-step3.txt

Expected differences are new tables or columns that VirtueMart 4 adds. Anything that loses rows is a stop sign. During the Joomla 3 → 4 → 5 steps, the Joomla CLI is faster than the browser for big shops: php cli/joomla.php core:update after each version change (Joomla 4+), then maintenance:database.

Rather have it done for you? We upgrade VirtueMart shops on staging, compare data after every step and test real orders before go-live.

VirtueMart Joomla 6 upgrade →