I understand that CiviCRM is the same app regardless of which CMS it runs under. But I've been told that there are important differences in the way it integrates with the three. What are the main differences? Are there downsides to choosing WordPress or Joomla instead of Drupal?
Availablity of extensions
The biggest difference is the availability of extensions/add-ons/extra-integrations -- there are more addons for Civi+Drupal, but the differences are shrinking over time.
Civi 1.x didn't originally support its own extension mechanism - the only option was to write a Drupal module. Consequently, Civi-Drupal modules grew first/fastest. The platform now supports plugins on Joomla (Civi v3.3+?) and WordPress (Civi v4.6+) the same way.
There are a few big-ticket addons that can make a difference for site-builders:
- CiviCRM comes with many out-of-the-box forms for event registration, donations, etc. but if you'll be making a lot of customized forms, then the Drupal module
webform_civicrmis pretty cool. There are no published solutions which provide as much flexibility on Joomla/WordPress.
- Drupal and WordPress have CLI frameworks (
wp-cli) which are quite handy for developers and sysadmins. Joomla CLI is still immature.
- Drupal Views and Rules are substantial systems which have Civi integrations.
- WP BuddyPress is a substantial system which has an upcoming Civi integration.
However, the importance of these differences has diminished since ~v4.2 -- when Civi introduced a flexible, cross-CMS extension system.
There are some differences which arise because of distinctive features/norms in each CMS community, e.g.
- In WordPress, it's pretty common to embed content in your web-pages using short-codes. Civi has several short-codes in WP.
- In Drupal, it's pretty common to embed content in your web-pages using blocks. Civi has several blocks in Drupal.
- In Drupal, the core CMS has decent support for "roles" and "permissions", so Civi uses this. In Joomla/WordPress, these are regarded more as "hidden/advanced" functionality, so Civi has to fill in some gaps.
The installers are a bit different -- web-based installation is easier in Joomla (because there are fewer forms to fill out), but it's more flexible in Drupal/WP. CLI-based installation is easier in Drupal/WP.
The core system is the same across all CMSs, but occasionally there are bugs in the CMS integration code. Most of the testing is performed on Drupal/CiviCRM, and it may take a bit longer to identify/resolve bugs in the WordPress and Joomla integrations.
I think the big differences relate to architectural differences between the three, and of course all come about as you increasingly seek to integrate between the CMS side and the CRM side. If you just want to use the core CRM it is self contained. So in Joomla you really use plugins (that respond to event triggers) and modules. Once key difference is that Joomla webmasters are used to systems where they can very easily use layout overrides to control html outputs and with the CiviCRM hook system things are different. You can't just make a layout override and put it in the template html folder, it's a bit more work. If you look at the frontend [code] (https://github.com/civicrm/civicrm-joomla/blob/master/site/views/Contributions/tmpl/pcp.php) you see that all it does is basically provide a container for code produce by the CiviCRM templating system, there is no integration at all.
Also the integration with the Joomla ACL is (from my understanding) a bit different, for most cases you can use the Joomla ACL and not think about the CiviCRM ACL at all.
Agree with most that was said here. Drupal has most extensions and users, and at the moment the integration is most thorough. WordPress is probably growing fast and has the biggest potential looking at the usage of WordPress in general. I have found that customers that put a lot of importance on community sharing, security, access limitations etc. tend to go for Drupal and do some CiviCRM customizations too. Most customers that want standard CiviCRM probably go for WordPress. But that might be more of a snapshot of this day and age than a decision based on structure :-)
In my opinion, the differences are somewhat historical and somewhat incidental. The fact that a few more integrations exist with one CMS over another should be a small consideration in the overall scope of your website discovery process. Obviously the more users there are on any given platform the more integrations and support there will be for that audience long term. A great example of this is the Gravity Forms integration for WordPress from CiviVIP. Built as the result of demand from users of that platform for an integrated form solution for CiviCRM.