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
fix: a study deployment stopped on the server did not stop the study on the phone. Once the study's status is Stopped, the study controller removes th
Stopped, the study controller removes the study's tasks and disposes its executor, so nothing resumes sampling again - not even a device reconnecting. Needs carp_core 2.2.2.SQLiteDataManager writes measurements in one batched transaction per 500 ms instead of one transaction per measurement - a burst of ~30k health points
SQLiteDataManager writes measurements in one batched transaction per 500 ms instead of one transaction per measurement - a burst of ~30k health points took minutes and flooded the log with "database has been locked" warnings; it now takes secondsProbe.addMeasurement() saves the PersistentSamplingConfiguration.lastTime checkpoint at most once per second instead of rewriting the whole deployment on every measurementOne column per quarter.
UserTask.onExpired({dequeue}) - pass dequeue: false to keep an expired task on the queue (state expired, still counted in taskExpired) instead of dequ
UserTask.onExpired({dequeue}) - pass dequeue: false to keep an expired task on the queue (state expired, still counted in taskExpired) instead of dequeuing it, which also deletes it from persistent storage. Default is unchangedfix permission dialogs failing silently: all permission requests now go through one serialized queue, SmartPhoneClientManager.requestPermissions(), wh
SmartPhoneClientManager.requestPermissions(), which asks one dialog at a time. Android denies - without showing anything - any request made while another dialog is up, and the deployment handler, probes and device managers used to ask concurrentlyrequestPermissionsInOrder() (the default requester) also skips already granted permissions and asks locationWhenInUse before locationAlways, as Android requiresconfigure(permissionRequester:) lets an app take over how the user is asked - e.g. to show a rationale before each dialogaskForAllPermissions() and Probe.requestPermissions() now also ask on iOS. They skipped it because batching List<Permission>.request() is flaky on iOS; one at a time is not. locationAlways and notification are never auto-prompted by iOS, so studies needing them used to depend on the app asking by hand_deviceDeploymentReceived is serialized - the deployment event fires twice on a normal launch, and the two runs used to configure and ask for permissions at the same timeshow() crashed with a null iconflutter_local_notifications instead of permission_handler, which never completes its future when the dialog is dismissed - hanging SmartPhoneClientManager.configure() foreverSCHEDULE_EXACT_ALARM, which Android only grants through a settings screen: notifications now schedule exactly when the permission happens to be granted, and inexactly (still while idle) otherwisefix duplicate column name: record_id crash in the record_id SQLite migration (SQLiteDataManager.onUpgrade) by only adding the column/index when it isn
duplicate column name: record_id crash in the record_id SQLite migration (SQLiteDataManager.onUpgrade) by only adding the column/index when it isn't already thereupgrade to device_info_plus ^13.2.0 and package_info_plus ^10.2.1, which require Flutter >=3.38.1
device_info_plus ^13.2.0 and package_info_plus ^10.2.1, which require Flutter >=3.38.1
health ^13.3.2, which also requires device_info_plus ^13.xwin32 6.x; neither changes the API used hererequire carp_serializable ^3.0.0, which replaces the built-in Uuid with the uuid package
carp_serializable ^3.0.0, which replaces the built-in Uuid with the uuid packageNothing published for this version
resume a connectable device's task control executors when it connects after the study has started - previously they stayed paused and the device never
Nothing published for this version
Nothing published for this version
Nothing published for this version
Update screen_state plugin to 5.0.1
screen_state plugin to 5.0.1Backwards compatibility with studies created on CAMS 1.x (protocol API level < 2.0), so that apps can upgrade from 1.x to 2.x without losing running d
Backwards compatibility with studies created on CAMS 1.x (protocol API level < 2.0), so that apps can upgrade from 1.x to 2.x without losing running deployments.
carp_core device namespace before the rename to dk.carp.cams.devices — the 1.x device type names are now registered as fromJson aliases (Smartphone, BLEHeartRateDevice, SmartphoneDeviceRegistration).serviceUuids, allowDuplicates) and the missing deployed / 1.x status fields when deserializing 1.x deployments.stepcount measure type and probe.studies table and the device_role_name column on task_queue), instead of failing with no such table / no such column.This release has two new main features: (i) to support adding, running, and removing multiple studies to the client manager, and (ii) to save runtime
This release has two new main features: (i) to support adding, running, and removing multiple studies to the client manager, and (ii) to save runtime state persistently so that sampling of data in all studies will resume effortlessly across app restart. In addition, a set of issues have been addressed, as listed in Milestone 2.0.0. The important ones include:
StudyStatus in the client manager (#504)AppLifecycleEvent measure to collect life-cycle event from the appThe example app has also been update to illustrate how a client can run multiple studies (#559). Also note that CAMS now has a completely new documentation site.
Nothing published for this version
API level 2.0 for all packages as released on pub.dev
API level 2.0 for all packages as released on pub.dev
Nothing published for this version
Deprecating the ONE_TIME_SENSING_TYPE - now there is only one type of sensing user task
ONE_TIME_SENSING_TYPE - now there is only one type of sensing user task (#488)Nothing published for this version
Bumped minimum Flutter SDK requirement to 3.3
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Support for the NoUserTaskTrigger (issue #453)
NoUserTaskTrigger (issue #453)Fix of issue with restarting data collection on device reconnect (issue #442)
Extended the SmartphoneStudy and SmartphoneDeployment to hold info on participant ID and participant role for a study running on the phone. This helps
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Upgrade to carp_core v. 1.8 & carp_serialization v. 2.0
fromJson() methods & nested json serializationSupport for handling permission on a Measure level #407.
* Fix of #408
Added support for extension of triggers, #403. See the section on Adding new Trigger on the CAMS wiki.
Nothing published for this version
Nothing published for this version
* Fix of #390
Refactor task and notification enqueueing process:
Improvement to removing studies (linked to issue #283 in the CARP Studies App)
Nothing published for this version
Automatically stopping a background task if all of its underlying probes have stopped (fix of 384)
IsoDuration)Improvements to the Notification Controller
Improvements to handling connected BLE devices
Nothing published for this version
Nothing published for this version
Upgrade of plugins (battery_plus, sensor_plus, cron)
IntervalSamplingConfigurationNothing published for this version
Nothing published for this version
Nothing published for this version
* Upgrade to Dart 3.2 * Update to README
First major release of CARP Mobile Sensing based on CARP Core API level 1.x.
First major release of CARP Mobile Sensing based on CARP Core API level 1.x.
Upgrade of uuid and permission_handler plugins
toString() methods on data points - if you want to print data, print the json generated from the toJson() method.TransformerSchemaRegistry to DataTransformerSchemaRegistryNothing published for this version
Nothing published for this version
Nothing published for this version
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 →