NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
pub.dev · #5291 most downloaded on pub.dev
Mobile Sensing Framework for Flutter. A software framework for collecting sensor data from the phone and attached wearable devices via probes. Can be extended.
Last release 14 days ago
24 Sep 2026
Ships unpredictably
gaps range from 8 days to 10 months
Some releases are documented
notes for 34 of the last 60 stable releases
3 versions withdrawn
withdrawn after publishing
8 years old
178 releases · first in 2018
Battery stream on device controller and device managers
Added support for restoring a SmartPhoneClientManager on app restart
SmartPhoneClientManager on app restartprivacySchemaName is moved to be part of the SmartphoneStudyProtocol configuration.One column per quarter.
> Note: This release has breaking changes.
Note: This release has breaking changes.
The first stable release of CARP Mobile Sensing which follows the carp.core-kotlin v. 1.1.0 domain model, which again is implemented in the carp_core v. 1.1.0 Dart Domain model.
This entails a set of breaking changes to the domain model:
geolocation, stepcount, etc.). These CARP Core measures has replaced the previous CAMS versions of these. However, most of the "old" measures are kept, so there should be backward compatibility.TriggeredTask, CompletedTask, which now automatically collected data on when and how a trigger and task are done.Heartbeat measurement has been added, which sends a measure every 5 minutes for each device (incl. the phone), if connected. This can be used to retrospectively check if sampling has been running (typically used in our so-called Coverage tests).Control class, which basically states if sampling should be started or stopped. So, instead of adding a TriggeredTask to a protocol you now add a TaskControl instead.Control state of a TaskControl).SamplingConfiguration which can be part of a DataTypeSamplingScheme which again can be part of a DataTypeSamplingSchemeMap. A description of how this works is on the CARP Core description of Sampling Schemes and Configuration section. Note that sampling configurations can be associated both with a Measure, with a DeviceConfiguration for a device, and with a SamplingPackage.The new data sub-system has been implemented in CAMS. This entails:
Data objects which again are stored as part of a Measurement (this replaces the old DataPoint data model).measurements stream which is accessible from the SmartphoneDeploymentController.DataManager. CAMS comes with two build-in data managers: the FileDataManager and the SQLiteDataManager.The UserTask is no longer responsible for showing the user interface of the task. Now, instead of showing the user interface, the onStart methods now returns a Widget to be shown. In this model, the app (and not CAMS) is responsible for deciding when and how to show the user interface. This entails that the the life cycle methods of onStart, onCancel, onExpired, and onDone no longer takes the Flutter BuildContext as a parameter. Read more on the AppTask and UserTask model on the CAMS wiki.
Other smaller changes include:
CarpMobileSensing.ensureInitialized() static method in your main method to ensure that CAMS is initialized before use.AppDelegate.swift in example app to handle notifications in the background.Nothing published for this version
Nothing published for this version
The last version in the 0.40.x series of releases before moving to the 1.x.x series of releases.
The last version in the 0.40.x series of releases before moving to the 1.x.x series of releases.
timezone data type (issue #301).Better support for removing a study deployment from a client manager
DataManager interfaces; file, sqlite, etc. to support multiple deployments on the same client.* Fix of issue #305.
Adding dispose, pause, and remove life cycle methods to the DeploymentController
dispose, pause, and remove life cycle methods to the DeploymentControllergetTaskExecutor methodNothing published for this version
Nothing published for this version
Fix of BufferingUserAccelerometerProbe error.
BufferingUserAccelerometerProbe error.Addition of USER_ACCELEROMETER measure (issue #283).
* Fix of issue #280.
Added convenience method addStudyProtocol to SmartPhoneClientManager and updated examples accordingly.
addStudyProtocol to SmartPhoneClientManager and updated examples accordingly.Nothing published for this version
Added the UserTaskTrigger trigger.
UserTaskTrigger trigger.magnetometer measure type.device_info_plus v. ^8.0.0carp_core v. 0.40.3* Upgrade to carp_core v. 0.40.2 * Fix of issue #269.
carp_core v. 0.40.2Nothing published for this version
One purpose of this release is to make CAMS more stable across app re-restart (since the OSs (Android / iOS) increasingly are killing apps). This has
MarkedMeasure is no longer a separate measure type. The state of all measure are now saved across app restart.OneTimeTrigger no longer needs an id (this is now handled behind-the-scene).AppTask are now scheduled persistently using the notification system. When an app task is due, a notification is made on the phone, and when the user taps this notification, the app is (re)started.SmartphoneDeploymentControlleris configured to use notifications).Measure no longer contains sampling configurations but only specifies the type of data to collect (e.g., dk.cachet.carp.memory)SamplingConfiguration and SamplingScheme classes (which can be part of a StudyProtocol).SamplingSchema provided by the SamplingPackage. For example, periodic sampling in e.g. the MemoryProbe is configured using a PeriodicSamplingConfiguration in the DeviceSamplingPackage.DeviceDescriptor classes.SQLiteDataEndPoint data endpoint.compileSdkVersion 33. Make sure to update the android/app/build.gradle file and set the compileSdkVersion to 33.DeploymentDelayedTrigger has been removed. Use ElapsedTimeTrigger.RecurrentScheduledTrigger no longer supports the remember feature. Persistent sampling for app tasks is now supported by the persistent sampling configuration across app re-start as described above.AutomaticTask is replaced by the BackgroundTask from carp_core.support of new device model, incl. configuration of devices with device descriptors
carp_core v. 0.33.0SmartphoneDeploymentController no longer automatically deploys the study when calling addStudy().
tryDeployment() method when you want the deployment to happen.SamplingPackageRegistry.permission_handler: ^9.2.0added OneTimeTrigger as a new trigger type.
OneTimeTrigger as a new trigger type.timestamp is now enforced (not null) on all Datum objects.Nothing published for this version
notifications are no longer (re-)send when the app task queue is restored across app restart.
upgrade to permission_handler: ^8.3.0
permission_handler: ^8.3.0build.graddle set compileSdkVersion 31Info.plist file and update the Podfilesupport for a ConditionalPeriodicTrigger which preiodically checks resume/pause conditions (originates from #230).
ConditionalPeriodicTrigger which preiodically checks resume/pause conditions (originates from #230).PeriodicTrigger now required a sampling duration.pubspec libaries (flutter_local_notifications, cron, and json).permission_handler since 8.2.0 gives a graddle compile error?????Nothing published for this version
Nothing published for this version
* bug fix of #221.
A CAMS-specific StudyProtocol named SmartphoneStudyProtocol has been reintroduced (c.f., v. 0.30.0). It turned out that there are several things which
StudyProtocol named SmartphoneStudyProtocol has been reintroduced (c.f., v. 0.30.0). It turned out that there are several things which needs to be configured as part of a study protocol, which the generic StudyProtocol from carp_core doesn't support. The new SmartphoneStudyProtocol supports specifying:
StudyDescription describing the study including the researcher responsible for the study.DataEndPoint specifying where and how to upload data.SmartphoneDeploymentService is updated to handle the new SmartphoneStudyProtocol.StudyDescription now also supports specifying the URL of a study description and the privacy policy.separate method for asking permissions in SmartphoneDeploymentController
SmartphoneDeploymentControllerconfigure method of the SmartphoneDeploymentController.all deployment information is now stored in a folder named /carp/deployments/ where local_application_path is the folder where an application can plac
<local_application_path>/carp/deployments/<study_deployment_id> where local_application_path is the folder where an application can place files that are private to the application.
NSDocumentsDirectory and this can be accessed like accessing files on iOS via the Finder.AppData directory, which is located in the data/data/<package_name>/app_flutter folder. Files can be accessed via AndroidStudio.added support for the DeploymentDelayedTrigger
DeploymentDelayedTriggerSettings now have support for storing deployment information across app restartAppTaskNothing published for this version
fixed a bug in path to json files in FileDataManager
SettingsFileDataManagerCAMSMasterDeviceDeployment renamed to SmartphoneDeployment (to allign with the other naming using Smartphone)StudyProtocolDescription and StudyProtocolReponsible renamed to StudyDescription and StudyReponsibleAppTaskControllerNothing published for this version
Nothing published for this version
support for persistenly storing AppTasks on the AppTaskController queue across app re-start
DebugLevel is now an enumAppTasks on the AppTaskController queue across app re-startupgrade to null-safety, carp_core v. 0.30.0
carp_core v. 0.30.0CAMSStudyProtocol is no longer used and is replaced by StudyProtocol in carp_coreRandomRecurrentTriggerExecutor (Issue #202)* bug fix of #199
rename of ProtocolOwner to StudyProtocolReponsible (in order not to confuse it with ownerId in StudyProtocol)
ProtocolOwner to StudyProtocolReponsible (in order not to confuse it with ownerId in StudyProtocol)* small bug fixes * upgrade to carp_core 0.21.4
carp_core 0.21.4NOTE - DataEndPoint is no longer specified as part of a StudyProtocol.
DataEndPoint is no longer specified as part of a StudyProtocol.
DataEndPoint is now part of a MasterDeviceDeployment.SmartphoneDeploymentService will use the FileDataEndpoint per default if not specified in the deployment. Hence, data is saved as files on the phone.StudyDeploymentController.configure() method now takes an optional DataEndPoint parameter to specify the data endpoint, if it should be different to what is specified in the deployment.StudyDeploymentController.configure() method also takes a askForPermissions parameter - if false, then CAMS will not ask for permissions, but hands this over to the app, which can show appropiate information to the user.Settings() (similar to other singletons in the framework)* update to carp_core v. 0.21.2
carp_core v. 0.21.2* update to carp_core v. 0.21.0
carp_core v. 0.21.0release of carp_core v. 0.21.x incl. the client sub-system
carp_core v. 0.21.x incl. the client sub-systemcarp_mobile_sensing to reflect carp_core domain and runtime modelscarp_webservices updated to v. 0.21.x APIcarp_backend supports handling
carp_study_generator as a CLI tool for uploading protocols, informed consent, and localization to CARPcarp_mobile_sensing_app updated to v. 0.21.0 APIpulmonary_monitor app updated to v. 0.21.0 APIcarp_core v. 0.21.0 client domain modelSmartPhoneClientManager for executing multiple studiesAdded a RandomRecurrentTrigger as a new trigger type (Issue #170)
RandomRecurrentTrigger as a new trigger type (Issue #170)removed localization support again - this has to be handled on an application level, not as part of sensing.
ConsentSection also - again, this is separate to sensing.update to carp_core v. 0.20.3 (json serialization)
carp_core v. 0.20.3 (json serialization)release of Dart implementation of carp_core
carp_corecarp_mobile_sensing to reflect carp_core domain and runtime modelscarp_webservices update to CARP web service and carp_core models (using study deployment ids)carp_backendcarp_mobile_sensing_app updated to v. 0.20.0 APIpulmonary_monitor app updated to v. 0.20.0 APIcarp_core domain models in order to align with the overall domain-driven design of CARP.Study is now called StudyProtocol and a CAMS-specific protocol called CAMSStudyProtocol is availablePrincipalInvestigator is now called ProtocolOwnerTask is now called TaskDescriptorDevice is now called DeviceDescriptorManualTrigger is now called PassiveTriggerScheduledTrigger is now called DateTimeTriggerMeasure is now called CAMSMeasure (but Measure is part of carp_core)StudyProtocol now uses the concept of a TriggeredTask which is slightly different to the previous Study model. See the example.CAMSStudyProtocol now supports localization. A StudyProtocolDescription and a list of ConsentSection can be added to a protocol for each locale (i.e., language code).CAMSMeasure there is the option to specify its MeasureDescription for each locale.camelCase instead of snake_case to be consistent with carp_core in Kotlin.
DataPoint objects are still serialized as snake_case json.events streams are now called data and streams DataPoint data objects (instead of just the Datum data objects).DataPoint comply to version 1.2 definition (Issue #162)extension of Study to include purpose, title and PrincipalInvestigator
Study to include purpose, title and PrincipalInvestigator* support for canceling UserTask
UserTasksmall refactor for Device model.
Device model.feature: support for handling a Device as part of a study configuration.
Device as part of a study configuration.Device to DeviceInfo.Device to DeviceInfofeature: support for storing and retrieving study json protocols on the local file system.
deploymentId has been removed from Study since this is CARP specific info.Nothing published for this version
refactor: improved (de)serialization in the Serialization class.
Serialization class.Study and Measure classes.Settings.description property to Measure.AppTask can expire, i.e. be removed from the queue.based on issue #134 the following measures has changed
periodic_accelerometer and periodic_gyroscope has been addedaccelerometer and gyroscope measures are made to run continouslyTrigger instead.AppTask. For example, sampling accelerometer data while a Parkinson's patient fill in a survey.Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →