CAMS v. 0.21.x has been released

With the release of carp_mobile_sensing version 0.21.0 the software architecture and hence API has changed to some degree. In this post, we want to provide you a little background on this change and point to the main differences to the previous version.

Version scheme

CAMS comply to semantic versioning. However, since we are still in a pre-release, the version number is (still) zero. However, by using version “20” or “21”, we are indicating that this is the 2nd major release of CAMS. We are, off course, working our way to the first “real” release of CAMS in a version 1.0.0. But we’re not ready yet – and the reason why is explained next.


CAMS is part of the CARP family of software components. The CARP architecture is based on a domain-driven model called CARP Core.

The main reason for releasing CAMS version 2 (0.20.x), was to comply to the CARP Core domain model and architecture.

The CARP Core domain model and architecture is described in great details in the carp.core-kotlin github. Please read more about its architecture and example usage.

So – what is new?

First, CAMS now follows the architecture of CARP Core.

Figure 1 – CARP Core Software Architecture

As shown in Figure 1, the software architecture consists of a number of sub-systems and all of these have now been implemented in Dart for use in CAMS. This is done in the carp_core Dart package available at

For CAMS, the main change is that now the definition of a study is separated from its so-called deployment, i.e. its execution. Following carp_core, a CAMS study can be configured, deployed, executed, and used in different steps:

  1. Define a StudyProtcol.
  2. Deploy this protocol to a DeploymentService.
  3. Get a study deployment for the phone and start executing this study deployment using a SmartPhoneClientManager.
  4. Use the generated data locally in the app or specify how and where to store or upload it using a DataEndPoint.

Note that as a mobile sensing framework running on a phone, CAMS could be limited to support 3-4. However, to support the ‘full cycle’, CAMS also supports 1-2. This allows for local creation, deployment, and execution of study protocols (which in many applications have shown to be useful).

The carp_mobile_sensing page contains a detailed description of this process and provide source code examples.


The documentation in the README file of carp_mobile_sensing is up-to-date. And of course the API documentation. However, we have not yet had the time to update the wiki – this will be done asap.

What is next?

The next major release of CAMS will be to support Dart null-safety. This will be the 3rd release, hence getting the version number of 0.30.x.

Simultaniously, we are moving towards stabiling the overall domain model of CARP Core and release is in a version 1.0.0. Once this is done (in Kotlin), the carp_core domain model in Dart will be upgraded to version 1.0.0 and released. Once this is done, all the packages depending on carp_core will be updated to 1.0.0.

And then ––– we have a first stable release of the Flutter CAMS family of software products.

Leave a Reply

Your email address will not be published. Required fields are marked *