Applies to CiviCRM 6.x · Joomla 5.4 and 6 Updated 16 Oct 2026

An upgrade is finished when the things that bring in money, members and sign-ups work – not when the installer says "success". This is the list we run on staging after every CiviCRM or Joomla upgrade, and a shorter version on live right after the switch.

Before you start on staging: payment processors in test mode, outgoing email to a mail catcher, and a test contact you can safely fill with records.

1. CiviCRM itself

  • Footer shows the expected CiviCRM version.
  • System Status has no new red or orange items (resource URLs, extensions, cron).
  • Dashboard, contact search and one contact record open without errors.
  • Extensions page: no extension shows an error or a missing dependency.

2. Donations

  • Each public contribution page loads from its Joomla menu item.
  • A one-off test donation completes; the contribution is recorded with the right financial type and status.
  • The receipt email arrives (in the mail catcher) with correct amounts and links.
  • A recurring donation can be set up, and the recurring record is created.
  • Premiums, price sets and "other amount" fields behave as before.

3. Memberships

  • Membership sign-up page completes with a test payment.
  • The membership is created with the right type, dates and status.
  • Renewal works for an existing member, including from the link in a renewal email.
  • Members-only Joomla content still checks access correctly, if you use it.

4. Events

  • Event listing, information page and registration form load.
  • A paid and a free registration complete; participants are recorded.
  • Confirmation emails arrive; waitlist and full-event behavior still work.
  • Personal campaign (PCP) pages load and accept a donation, if you use them.

5. Forms and profiles

  • Profile create/edit forms and FormBuilder forms submit and save.
  • Mailing-list subscription page adds the contact to the group, with confirmation if enabled.
  • The CiviCRM user dashboard shows a logged-in user their contributions, memberships and events.

6. Joomla users and contacts

  • Creating a Joomla user creates or matches a CiviCRM contact.
  • Changing a user's email in Joomla updates the contact (if your setup syncs it).
  • Login and logout work on pages that show CiviCRM content.

On Joomla 6 this is the part that touches CiviCRM's Joomla plugins and its user matching – test it carefully. Background: Joomla 6 plugin events.

7. CiviMail and scheduled jobs

  • A test mailing to a small group sends; open and click tracking links work.
  • Unsubscribe and opt-out links in that mailing work.
  • Cron runs from the command line and the job log shows "Success". If not.
  • Bounce processing connects to its mailbox, if configured.

8. Links already out there

  • Old task=civicrm/… links from past emails still open the right page.
  • Changed menu aliases have redirects. How to check.

9. On live, right after the switch

A short version, with real (small) payments if your processor has no test mode on live:

  • One donation, one membership or event sign-up, one mailing-list sign-up.
  • One cron run checked in the job log.
  • System Status checked.

Refund the real test payments afterwards, and write down what you tested and when. If someone reports a problem next week, you'll know what was working at launch.

Checks you can script

# terminal – System Status, without opening the browser
cv api4 System.check --cwd=/var/www/example.org | grep -iE '"(title|severity)"'

# did cron run after the upgrade? (CiviCRM database)
mysql -e "SELECT MAX(run_time) FROM civicrm_job_log;" civicrm_db

# Joomla users without a CiviCRM contact link (adjust database names and prefix)
mysql -e "SELECT u.id, u.username FROM joomla_db.jos_users u
          LEFT JOIN civicrm_db.civicrm_uf_match m ON m.uf_id = u.id
          WHERE m.id IS NULL AND u.block = 0 LIMIT 20;"

Users who never opened a CiviCRM page may legitimately have no link yet, because CiviCRM creates it on first use. A user who has CiviCRM records but no link after the upgrade is a real problem.

On staging, define('CIVICRM_MAIL_LOG', '…/mail.log') in both settings files sends every CiviCRM email to a file instead of the mail server, so you can check receipts and confirmations without a mail catcher.

Every CiviCRM upgrade we do ends with this list – and a written test report you keep.

CiviCRM Joomla 6 upgrade →