Within a CiviCRM extension, what's the best way to determine the current CiviCRM version in versions 4.6.x and above?


Agree with Chris that System.get is a great API for inspecting the system -- with a trade-off of breadth vs speed.

If you need something more performant, use CRM_Utils_System::version(), e.g.

$ cv ev 'return CRM_Utils_System::version();'

I'd use System.get API call. (source)

In the return values, there's a value for version which corresponds to the value in civicrm-version.php

$ cv api System.get name=version
    "is_error": 0,
    "version": 3,
    "count": 1,
    "id": 0,
    "values": [
            "version": "",
            "uf": "Drupal",
            "php": {
            // lots more info ...

Only worry about this might be how heavy that API call is - since I see data there from OS etc, it might not be suitable for calling frequently if rebuilding the data each time. There seems to be a bit of overhead to this API call (~0.07s per call in a randomly picked test environment), so for frequent use you'd want something lighter.


Your Answer

